[英]php and MYSQL SELECT issues with arrays
我想知道您是否可以告訴我我的代碼有什么問題,或者指出我要去哪里,因為我無法顯示任何結果。 $ _POST ['checkbox']是一個數組。
<?
$get_id=$_POST['checkbox'];
if(empty($get_id)) {
echo("<h3>You didn't select anything.</h3>");
} else {
$where[] = sprintf(" id='%s'",$_POST["checkbox"]);
}
$where_str = " WHERE ".implode(" AND ",$where);
$sql = "SELECT * FROM products $where_str";
$result = mysql_query($sql, $link);
echo "<table>";
echo "<tr> <th>Description</th> </tr>";
while($row = mysql_fetch_array($result)) {
echo "<tr><td>";
echo $row['description'];
echo "</td></tr>";
}
echo "</table>";
?>
<?
因為PHP 5.4之后不支持它們。 $link
undefined) mysql_
)。 參見注釋(替代mysqli_
或PDO
) 您應該使用$_SERVER
的REQUEST_METHOD
索引來確定是否已發布腳本。
if( $_SERVER[REQUESTED_METHOD] == 'POST' && !empty($_POST['checkbox']) ) {
... }
您需要使用錯誤處理來檢查錯誤。 如果您echo $sql;
您會看到未填充復選框:
SELECT * FROM products WHERE id=''
您的腳本容易受到SQL注入的攻擊。 切換到當前API時,請使用綁定的參數。
$_POST[checkbox]
是數組嗎? sprintf
將無法按sprintf
工作,因為您要將整個$_POST[checkbox]
數組傳遞給它。 您將需要遍歷它來格式化它。 (請參閱奧利的答案) 例
假設您的HTML看起來像這樣:
<form method="post" ...>
<input type="checkbox" name="checkbox[]" value="1" />
<input type="checkbox" name="checkbox[]" value="2" />
<input type="checkbox" name="checkbox[]" value="3" />
<input type="submit" name="submit" />
</form>
並且所有三個框都被選中; 它將產生以下數組:
Array ( [0] => 1 [1] => 2 [2] => 3 )
遵循Collie的循環:
foreach ($_POST['checkbox'] as $checkbox) {
$where[] = sprintf(" id='%s'",$checkbox);
}
$where
看起來像:
Array ( [0] => id='1' [1] => id='2' [2] => id='3' )
您的腳本的其余部分應正常工作。 但是,您應該考慮使用IN
運算符。
這將使您可以跳過循環,而只需使用implode
:
$where = "'" . implode("', '", $_POST[checkbox]) . "'";
產生:
'1', '2', '3'
並與IN
結合:
$sql = "SELECT ... FROM WHERE id IN ($where)";
請注意,這尚未消毒,您仍然容易受到注射的傷害。
如果$_POST["checkbox"]
是一個像您所說的數組,則不能在sprintf
中將其用作字符串。 嘗試使用array_pop
返回該數組或類似數組的最后一個值。
您可以foreach
數組中的每個元素:
foreach ($_POST['checkbox'] as $checkbox) {
$where[] = sprintf(" id='%s'",$checkbox);
}
盡管如果要求ID等於兩個不同的整數,這可能只會創建一個無效的SQL語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.