[英]How to use a $_POST variable in an mysqli-query? (php)
我目前正在學習php,並且正在測試sqli查詢。 我想要一個可以在其中輸入數字的輸入字段。 此數字在sql查詢中使用。 不幸的是,它不能按我想要的方式工作。 文本字段按以下方式存儲在index.php中:
<form method="post" action="handler.php">
<input type="text" name="idEingabe">
<input type="submit" value="Abfrage für eingegebene ID starten">
</form>
在handler.php中,我正在使用
$stridEingabe = $_POST["idEingabe"];
該查詢包含:
$query = 'SELECT name, beschreibung FROM uebersicht WHERE id = "$stridEingabe"';
$result = mysqli_query($con, $query);
if ($result = mysqli_query($con, $query)) {
/* Array ausgeben */
while ($row = mysqli_fetch_assoc($result)) {
printf ("<b>%s</b> <br>%s<br> <br>", $row["name"], $row["beschreibung"]);
}
/* free result set */
mysqli_free_result($result);
}
mysqli_close($con);
?>
不幸的是,當我在文本框中輸入數字並單擊提交按鈕時,沒有任何結果。 但是,如果我在不使用$ stridEingabe的情況下在查詢中寫了數字,我就會得到結果。
錯誤在哪里? 非常感謝
看到在此之前已提交答案,以為我也根據問題下的評論也將答案也提交了。
這里的問題之一是,您要查詢兩次,這是一個主要問題,導致MySQL在后台拋出語法錯誤,但是您沒有在聽。 另外,如果您是一個字符串,我在下面修改了您的報價方法; 目前尚不知道。
$query = 'SELECT name, beschreibung FROM uebersicht WHERE id = "$stridEingabe"';
$result = mysqli_query($con, $query);
^^^^^^^^^^^^
if ($result = mysqli_query($con, $query)) {
^^^^^^^^^^^^
/* Array ausgeben */
while ($row = mysqli_fetch_assoc($result)) {
printf ("<b>%s</b> <br>%s<br> <br>", $row["name"], $row["beschreibung"]);
}
您要刪除的= mysqli_query($con, $query)
並添加錯誤檢查:
$query = "SELECT name, beschreibung FROM uebersicht WHERE id = '".$stridEingabe."'";
$result = mysqli_query($con, $query);
if ($result) {
/* Array ausgeben */
while ($row = mysqli_fetch_assoc($result)) {
printf ("<b>%s</b> <br>%s<br> <br>", $row["name"], $row["beschreibung"]);
}
} // brace for if ($result)
// else statement for if ($result)
else{
echo "There was an error: " .mysqli_error($con);
}
或者,最好還是使用mysqli_real_escape_string()
。
$stridEingabe = mysqli_real_escape_string($con,$_POST["idEingabe"]);
另外,對於您可以打開的SQL注入,應該將mysqli
與mysqli
准備語句一起使用,或者將PDO與 mysqli
准備語句一起使用, 它們要安全得多 。
腳注:
確保確實使用mysqli_
進行連接,而不要使用其他MySQL API(例如mysql_
或PDO)進行連接。 這些不同的API不會相互混合。
我說這是因為,您的問題中的連接方法未知。
另外,如果您在同一文件中使用整個代碼,則應該對POST數組使用條件語句,否則它將在頁面加載時立即引發通知; 假設您的系統上啟用了錯誤報告。
即:
if(!empty($_POST['idEingabe'])){...}
另一件事; 如果輸入的值是整數,則可以使用以下函數來確保它們是整數而不是字符串,如果這是最終目標是:
is_int()
is_numeric()
並結合使用這些條件語句。
將錯誤報告添加到文件頂部,這將有助於發現錯誤。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:錯誤報告僅應在登台進行,而不應在生產過程中進行。
兩件事,首先是您的引號是錯誤的,其次,對於您的代碼,您容易受到sql代碼注入攻擊,請嘗試以下方法:
$stridEingabe = mysql_real_escape_string($_POST["idEingabe"]);
$query = "SELECT name, beschreibung FROM uebersicht WHERE id='$stridEingabe'";
問題是您沒有將$ string連接到查詢
使用類似
$query = 'SELECT name, beschreibung FROM uebersicht WHERE id = ''.$stridEingabe.'';
或者使用雙引號更容易接受
$query = "SELECT name, beschreibung FROM uebersicht WHERE id = '$stridEingabe'";
並嘗試僅使用if語句中聲明的$ results以避免重復查詢。
您使用了錯誤的引號。 嘗試這個:
$query = "SELECT name, beschreibung FROM uebersicht WHERE id = '$stridEingabe'";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.