如何在mysqli查询中使用$ _POST变量? (PHP)

时间:2015-05-20 21:28:44

标签: php mysql sql database mysqli

我正在学习php并正在测试sqli查询。 我想要一个输入字段,可以输入一个数字。此编号用于sql-query。不幸的是,它不能按我想要的方式工作。 文本字段存储在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的情况下在查询中写入数字,我就会得到结果。

错误在哪里? 非常感谢

4 个答案:

答案 0 :(得分:2)

看到在此之前已经提交了答案,我想我也会根据问题留下的评论加上答案。

其中一个问题是,您要查询两次主要问题,导致语法错误MySQL is throwing in the background,但您没有收听为了它。另外,我在下面修改了你的引用方法,以防它是一个字符串;这是我们现在不知道的。

$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 with prepared statementsPDO with prepared statements,它们更安全

<强>脚注:

确保您确实使用mysqli_连接,而不是使用其他MySQL API(例如mysql_或PDO)进行连接。那些不同的API不会相互混合。

我这样说是因为,你的问题中的连接方法是未知的。

另外,如果您在同一个文件中使用了整个代码,那么您应该为POST数组使用条件语句,否则会在页面加载时立即发出通知; 假设您的系统启用了错误报告。

  • 通知将是&#34;未定义索引idEingabe ...&#34;

即:

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

另一件事;如果您输入的值是一个整数,您可以使用以下函数来确保它们是整数而不是字符串,如果这是最终目标:

并将条件语句与这些语句结合使用。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。

答案 1 :(得分:0)

两件事,首先你的报价是错误的,第二,你的代码很容易受到sql代码注入攻击,试试这个:

$stridEingabe = mysql_real_escape_string($_POST["idEingabe"]);
$query = "SELECT name, beschreibung FROM uebersicht WHERE id='$stridEingabe'";

答案 2 :(得分:0)

问题是你没有将$ string连接到查询

使用类似

的内容
$query = 'SELECT name, beschreibung FROM uebersicht WHERE id = ''.$stridEingabe.'';

或使用双引号,这是更可接受的

$query = "SELECT name, beschreibung FROM uebersicht WHERE id = '$stridEingabe'";

并尝试仅使用if语句中声明的$ results来避免双重查询。

答案 3 :(得分:0)

您使用的是错误的引号。试试这个:

 $query = "SELECT name, beschreibung FROM uebersicht WHERE id = '$stridEingabe'";