如果你不想第二查詢來獲取正是你需要的,在循環一個簡單 - if-statement
應該工作:
<?php
$getId = isset($_GET['id']) ? $_GET['id'] : false;
//give ma all values but only echo out list of the $_GET['id'] in the url
while ($row = mysql_fetch_array($result)) {
$id = $row["id"];
$title = $row["title"];
$length = $row["length"];
if ($id == $getId) {
echo("<li><a href='#'>". $title." " .$length. "</a></li>");
}
}
?>
注意,我宣佈$getId
外循環以防止在每次迭代期間使用isset()
。如果您不驗證它是否設置並嘗試使用它,則會發出undefined index
警告 - 假設您打開了error_reporting
(啓用該級別)。
或者,你可以使用PHP的array_filter()
上的數據,你已經解析了這一切之後:
$results = array();
while ($row = mysql_fetch_array($result)) $results[] = $row;
if (isset($_GET['id'])) {
$filtered = array_filter($results, function($element) use ($_GET['id']) { return ($element['id'] == $_GET['id']); });
$results = $filtered;
}
foreach ($results as $result) {
echo("<li><a href='#'>". $result['title']." " .$result['length']. "</a></li>");
}
我個人的意見將更有效率,雖然寫的第二個查詢,假設你當然不要當指定id
時,實際上並不需要所有的結果。這將是簡單的:
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
$query = 'SELECT id, title, length FROM table WHERE id=' . (int)$_GET['id'];
} else {
$query = 'SELECT id, title, length FROM table';
}
// your existing code as-is
我在這裏看到SQL注入的一個主要漏洞。 – 2012-08-13 15:20:59
htmlentries($ _GET)呢? – pcproff 2012-08-13 15:21:26
// @ RichardJ.RossIII真的嗎?我根本沒有看到任何查詢。 – 2012-08-13 15:21:28