我在修改php應用程序有分頁時遇到了問題。我的錯誤似乎與我的邏輯有關,而且我不清楚我做錯了什麼。我以前有過,但目前沒有收到mysql_num_rows()無效結果資源 的錯誤,並且提供了無效參數給foreach。我認爲在我的邏輯中存在一個問題,它會阻止mysql返回的結果。php和mysql沒有顯示數據,沒有進入foreach循環
我所有的「測試」回聲都是輸出,除了循環測試。使用查詢名稱和詞拍賣以及第一個和上一個鏈接生成頁面,但不會生成下一個和最後一個鏈接。如果可以指出一個更有效的方式來生成表格中的行的鏈接,而不是每個單元格都建立鏈接,我將不勝感激。是否有可能有多個項目的連續鏈接?
<?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實體等主題(提示:如果您希望顯示字面意思是「<」,則幾乎肯定需要寫<代替)。除此之外,請嘗試將您的問題修剪至要點。刪除評論和無關代碼 – phihag 2009-02-02 12:59:00
這與我的問題無關。我正在將我所有的代碼轉換爲mysqli來解決這個問題。我不知道什麼代碼導致了中斷,所以我不知道要刪除什麼。 – 2009-02-02 13:07:20
如果它從不運行foreach,那麼它可能意味着$行是空的,也許呢?也許getRowsByProductSearch不是你所期望的? – Ben 2009-02-02 19:32:36