while循环不连接字符串
While loop not concatenating string
我创建了一些 Javascript,它向下面的 PHP 文件发出 AJAX POST 请求,标题为 'listgroupsall.php'。但是,我没有得到正确的数据。
AJAX 请求和 PHP 脚本应该 return 站点成员所属的组,并在可以单击的页面上显示有关它们的一些信息转到该组的页面。
这里是 PHP 代码:
<?php
//CONTAINS MYSQL SERVER CONNECTION INFO AND OTHER GOODIES
require_once $_SERVER['DOCUMENT_ROOT'] . '/filepath/config.php';
//VARIABLES PASSED IN FROM THE AJAX REQUEST
$uid = $_POST['uid'];
$tid = $_POST['tid'];
$p = $_POST['page'];
$filter = $_POST['fieldcontent'];
//FORM MYSQL QUERY
$gaq = "SELECT g.gid, g.groupname, g.dispname, g.avpath FROM groups AS g INNER JOIN users_groups AS ug ON g.gid = ug.gid AND ug.uid = " . mysql_real_escape_string($tid);
//ADD CONSTRAINT BASED ON UID IF IT IS NOT PASSED IN AS 0
if($uid!="0"){
$gaq .= " INNER JOIN users_groups AS ug ON g.gid = ug.gid AND ug.uid = " . mysql_real_escape_string($uid); }
//ADD CONSTRAINT BASED ON FILTER IF IT IS NOT AN EMPTY STRING
if($filter!=""){
$gaq .= " WHERE g.dispname LIKE '%" . mysql_real_escape_string($filter) . "%'"; }
//ORDER THE RESULTS BY ASCENDING g.dispname
$gaq .= " ORDER BY g.dispname ASC";
//GET AMOUNT OF PAGES REQUIRED TO DISPLAY ALL ITEMS RETURNED,
// SUCH THAT 10 ITEMS FIT ON 1 PAGE
$pnum = ceil(mysql_num_rows(mysql_query($gaq))/10);
//DISPLAY 10 RESULTS, STARTING ON 'PAGE' PASSED IN TO AJAX REQUEST
$gaq .= " LIMIT " . ($p*10)-10 . ",10";
//EXECUTE FULL MYSQL QUERY
$gaqr = mysql_query($gaq);
//APPEND A STRING $galisthtml WITH HTML OF THAT BLOCK
// WHICH CAN BE WRITTEN STRAIGHT TO THE PAGE
$galisthtml = "";
while($row = mysql_fetch_array($gaqr)){
$gid = $row['gid'];
$gname = $row['groupname'];
$gdname = $row['dispname'];
$gavpath = $row['avpath'];
$galisthtml .= "<a href='http://galacticsoftware.net/prop/group.php?groupname=" . $gname . "'><div class=gblock><div class=gblockavcont>";
$galisthtml .= "<img src='/prop/assets/img/avatars/group/" . $gavpath . "' Alt='Group Avatar' height=48px width=48px></div>";
$galisthtml .= "<div class=gblocktextcont><h1>" . $gdname . "</h1>&" . $gname . "</div></div></a>";
}
//RETURN THE PAGE NUMBERS TOTAL
//AND THE GROUPS LISTING HTML
//(IN THAT ORDER)
echo json_encode(array($pnum, $galisthtml));
?>
当我调用 AJAX 请求时,我首先给它赋值
uid = 0
tid = 23
p = 1
fieldcontent = ""
当 AJAX 请求 return 时,它发回
[1,""]
整数是正确的,表示所有 returned 的组都将适合 1 页(总共有 4 个)。但是,while 循环内的字符串连接似乎永远不会执行。如果我使用 non-empty 字符串定义 $galisthtml,它会成功 returned,所以我知道我正在正确地 returning 我的数据。
我的 while 循环在页面的另一个区域成功使用,它回显字符串而不是连接字符串,并且在 运行 相同的 MYSQL 查询之后。
我已经研究过这个问题,甚至看到其他人像这样在 while 循环中连接字符串没有问题。我不知道可能是什么问题。
你应该在括号中关闭表达式:
$gaq .= " LIMIT " . (($p*10)-10) . ",10"; //<- Note bracket around expression
要分析此类问题,您应该始终打印生成的 SQL 语句。
我创建了一些 Javascript,它向下面的 PHP 文件发出 AJAX POST 请求,标题为 'listgroupsall.php'。但是,我没有得到正确的数据。
AJAX 请求和 PHP 脚本应该 return 站点成员所属的组,并在可以单击的页面上显示有关它们的一些信息转到该组的页面。
这里是 PHP 代码:
<?php
//CONTAINS MYSQL SERVER CONNECTION INFO AND OTHER GOODIES
require_once $_SERVER['DOCUMENT_ROOT'] . '/filepath/config.php';
//VARIABLES PASSED IN FROM THE AJAX REQUEST
$uid = $_POST['uid'];
$tid = $_POST['tid'];
$p = $_POST['page'];
$filter = $_POST['fieldcontent'];
//FORM MYSQL QUERY
$gaq = "SELECT g.gid, g.groupname, g.dispname, g.avpath FROM groups AS g INNER JOIN users_groups AS ug ON g.gid = ug.gid AND ug.uid = " . mysql_real_escape_string($tid);
//ADD CONSTRAINT BASED ON UID IF IT IS NOT PASSED IN AS 0
if($uid!="0"){
$gaq .= " INNER JOIN users_groups AS ug ON g.gid = ug.gid AND ug.uid = " . mysql_real_escape_string($uid); }
//ADD CONSTRAINT BASED ON FILTER IF IT IS NOT AN EMPTY STRING
if($filter!=""){
$gaq .= " WHERE g.dispname LIKE '%" . mysql_real_escape_string($filter) . "%'"; }
//ORDER THE RESULTS BY ASCENDING g.dispname
$gaq .= " ORDER BY g.dispname ASC";
//GET AMOUNT OF PAGES REQUIRED TO DISPLAY ALL ITEMS RETURNED,
// SUCH THAT 10 ITEMS FIT ON 1 PAGE
$pnum = ceil(mysql_num_rows(mysql_query($gaq))/10);
//DISPLAY 10 RESULTS, STARTING ON 'PAGE' PASSED IN TO AJAX REQUEST
$gaq .= " LIMIT " . ($p*10)-10 . ",10";
//EXECUTE FULL MYSQL QUERY
$gaqr = mysql_query($gaq);
//APPEND A STRING $galisthtml WITH HTML OF THAT BLOCK
// WHICH CAN BE WRITTEN STRAIGHT TO THE PAGE
$galisthtml = "";
while($row = mysql_fetch_array($gaqr)){
$gid = $row['gid'];
$gname = $row['groupname'];
$gdname = $row['dispname'];
$gavpath = $row['avpath'];
$galisthtml .= "<a href='http://galacticsoftware.net/prop/group.php?groupname=" . $gname . "'><div class=gblock><div class=gblockavcont>";
$galisthtml .= "<img src='/prop/assets/img/avatars/group/" . $gavpath . "' Alt='Group Avatar' height=48px width=48px></div>";
$galisthtml .= "<div class=gblocktextcont><h1>" . $gdname . "</h1>&" . $gname . "</div></div></a>";
}
//RETURN THE PAGE NUMBERS TOTAL
//AND THE GROUPS LISTING HTML
//(IN THAT ORDER)
echo json_encode(array($pnum, $galisthtml));
?>
当我调用 AJAX 请求时,我首先给它赋值
uid = 0
tid = 23
p = 1
fieldcontent = ""
当 AJAX 请求 return 时,它发回
[1,""]
整数是正确的,表示所有 returned 的组都将适合 1 页(总共有 4 个)。但是,while 循环内的字符串连接似乎永远不会执行。如果我使用 non-empty 字符串定义 $galisthtml,它会成功 returned,所以我知道我正在正确地 returning 我的数据。
我的 while 循环在页面的另一个区域成功使用,它回显字符串而不是连接字符串,并且在 运行 相同的 MYSQL 查询之后。
我已经研究过这个问题,甚至看到其他人像这样在 while 循环中连接字符串没有问题。我不知道可能是什么问题。
你应该在括号中关闭表达式:
$gaq .= " LIMIT " . (($p*10)-10) . ",10"; //<- Note bracket around expression
要分析此类问题,您应该始终打印生成的 SQL 语句。