簡體   English   中英

如何在MySQLi查詢中使用$ _POST變量? (php)

[英]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注入,應該將mysqlimysqli准備語句一起使用,或者將PDO與 mysqli准備語句一起使用, 它們要安全得多


腳注:

確保確實使用mysqli_進行連接,而不要使用其他MySQL API(例如mysql_或PDO)進行連接。 這些不同的API不會相互混合。

我說這是因為,您的問題中的連接方法未知。

另外,如果您在同一文件中使用整個代碼,則應該對POST數組使用條件語句,否則它將在頁面加載時立即引發通知; 假設您的系統上啟用了錯誤報告。

  • 通知將是“未定義索引idEingabe ...”

即:

if(!empty($_POST['idEingabe'])){...}

另一件事; 如果輸入的值是整數,則可以使用以下函數來確保它們是整數而不是字符串,如果這是最終目標是:

並結合使用這些條件語句。


錯誤報告添加到文件頂部,這將有助於發現錯誤。

<?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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM