我正在学习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的情况下在查询中写入数字,我就会得到结果。
错误在哪里? 非常感谢
答案 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 statements或PDO with prepared statements,,它们更安全
<强>脚注:强>
确保您确实使用mysqli_
连接,而不是使用其他MySQL API(例如mysql_
或PDO)进行连接。那些不同的API不会相互混合。
我这样说是因为,你的问题中的连接方法是未知的。
另外,如果您在同一个文件中使用了整个代码,那么您应该为POST数组使用条件语句,否则会在页面加载时立即发出通知; 假设您的系统启用了错误报告。
即:
if(!empty($_POST['idEingabe'])){...}
另一件事;如果您输入的值是一个整数,您可以使用以下函数来确保它们是整数而不是字符串,如果这是最终目标:
is_int()
is_numeric()
并将条件语句与这些语句结合使用。
将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'";