【发布时间】:2010-10-04 22:08:21
【问题描述】:
我在修改 php 应用程序以进行分页时遇到问题。我的错误似乎与我的逻辑有关,我不清楚我做错了什么。我以前有过,但目前没有收到 mysql_num_rows() 不是有效结果资源的错误 并且向 foreach 提供了无效的参数。我认为我的逻辑存在问题,即阻止返回 mysql 的结果。
除了测试 while 循环外,我所有的“测试”回声都被输出。生成一个页面,其中包含查询名称和单词拍卖,以及第一个和上一个链接,但没有下一个和最后一个链接。如果可以指出一种为表中的行生成链接的更有效方法,而不是为每个单元格创建链接,我将不胜感激。是否可以有多个项目的连续链接?
<?php
if (isset($_GET["cmd"]))
$cmd = $_GET["cmd"]; else
die("You should have a 'cmd' parameter in your URL");
$query ='';
if (isset($_GET["query"])) {
$query = $_GET["query"];
}
if (isset($_GET["pg"]))
{
$pg = $_GET["pg"];
}
else $pg = 1;
$con = mysql_connect("localhost","user","password");
echo "test connection<p>";
if(!$con) {
die('Connection failed because of' .mysql_error());
}
mysql_query('SET NAMES utf8');
mysql_select_db("database",$con);
if($cmd=="GetRecordSet"){
echo "test in loop<p>";
$table = 'SaleS';
$page_rows = 10;
$max = 'limit ' .($pg - 1) * $page_rows .',' .$page_rows;
$rows = getRowsByProductSearch($query, $table, $max);
echo "test after query<p>";
$numRows = mysql_num_rows($rows);
$last = ceil($rows/$page_rows);
if ($pg < 1) {
$pg = 1;
} elseif ($pg > $last) {
$pg = $last;
}
echo 'html stuff <p>';
foreach ($rows as $row) {
echo "test foreach <p>";
$pk = $row['Product_NO'];
echo '<tr>' . "\n";
echo '<td><a href="#" onclick="updateByPk(\'Layer2\', \'' . $pk . '\')">'.$row['USERNAME'].'</a></td>' . "\n";
echo '<td><a href="#" onclick="updateByPk(\'Layer2\', \'' . $pk . '\')">'.$row['shortDate'].'</a></td>' . "\n";
echo '<td><a href="#" onclick="updateByPk(\'Layer2\', \'' . $pk . '\')">'.$row['Product_NAME'].'</a></td>' . "\n";
echo '</tr>' . "\n";
}
if ($pg == 1) {
} else {
echo " <a href='{$_SERVER['PHP_SELF']}?pg=1'> <<-First</a> ";
echo " ";
$previous = $pg-1;
echo " <a href='{$_SERVER['PHP_SELF']}?pg=$previous'> <-Previous</a> ";
}
echo "---------------------------";
if ($pg == $last) {
} else {
$next = $pg+1;
echo " <a href='{$_SERVER['PHP_SELF']}?pg=$next'>Next -></a> ";
echo " ";
echo " <a href='{$_SERVER['PHP_SELF']}?pg=$last'>Last ->></a> ";
}
echo "</table>\n";
}
echo "</div>";
function getRowsByProductSearch($searchString, $table, $max) {
$searchString = mysql_real_escape_string($searchString);
$result = mysql_query("SELECT Product_NO, USERNAME, ACCESSSTARTS, Product_NAME, date_format(mycolumn, '%d %m %Y') as shortDate FROM {$table} WHERE upper(Product_NAME) LIKE '%" . $searchString . "%'" . $max);
if($result === false) {
echo mysql_error();
}
$rows = array();
while($row = mysql_fetch_assoc($result)) {
echo "test while <p>";
$rows[] = $row;
}
return $rows;
mysql_free_result($result);
}
编辑:我已经打印出没有的mysql错误。但是,从包含 100 多条记录的数据库中打印出 8 个“测试时间”。从未进入 foreach 循环,我不确定为什么。
【问题讨论】:
-
你的代码在很多方面都被破坏了。请查找诸如 SQL 注入和 HTML 实体之类的主题(提示:如果您想按字面意思显示“
-
这与我的问题无关。我正在将我的所有代码转换为 mysqli 来解决这个问题。我不知道是什么代码导致了中断,所以我不确定要删除什么。
-
如果它从不运行 foreach,那么它可能意味着 $rows 为空,也许?也许 getRowsByProductSearch 不是你所期望的?
-
我的猜测是您的 SQL 查询没有返回任何结果。您是否尝试过打印出它生成的查询,然后自己将其输入 MySQL 以查看您得到的结果?搜索字符串上 $max 的串联看起来有点可疑......
-
是的,查询返回正确的结果