Php/mysql:数据不是';不要插入表格
因此,我试图创建此表单,但是,我无法将数据输入表中。每当我点击“继续”按钮时,实际上什么也没发生。我没有发现任何错误。当我检查我的数据库时,这些值还没有被添加。Idk它是如何发生的。我花了几个小时试图了解问题是什么,但我无法确定它,它到了我感到绝望的地步,并决定张贴这个问题,所以请帮助我。这是我的密码:Php/mysql:数据不是';不要插入表格,php,mysql,sql,Php,Mysql,Sql,因此,我试图创建此表单,但是,我无法将数据输入表中。每当我点击“继续”按钮时,实际上什么也没发生。我没有发现任何错误。当我检查我的数据库时,这些值还没有被添加。Idk它是如何发生的。我花了几个小时试图了解问题是什么,但我无法确定它,它到了我感到绝望的地步,并决定张贴这个问题,所以请帮助我。这是我的密码: <?php $conn = new mysqli("localhost", "root", "", "KFC"); if(isset($_POST['Submit_btn'])) {
<?php
$conn = new mysqli("localhost", "root", "", "KFC");
if(isset($_POST['Submit_btn']))
{
session_start();
$RID= $_POST['R_ID'];
$Name= $_POST['Name'];
$S_Description=($_POST['S_Description']);
$L_Description=($_POST['L_Description']);
$Nutritional_value=($_POST['Nutritional_value']);
$Cost=($_POST['Cost']);
$TypeOfMeal=($_POST['TypeOfMeal']);
$SubmittedBy=($_POST['SubmittedBy']);
$sql= "INSERT INTO `recipe`(`R_ID`, `Name`, `S_Description`, `L_Description`, `Nutritional_value`, `Cost`, `TypeOfMeal`, `SubmittedBy`) VALUES ($RID,$Name,$S_Description,$L_Description,$Nutritional_value,$Cost,$TypeOfMeal,$SubmittedBy)";
mysqli_query($conn,$sql);
}
mysqli_close($conn);
?>
<html>
<body>
<div id="bodyContent">
<h1> Registration </h1>
</div>
<form method="post">
<table>
<tr>
<td>R_ID: </td>
<td>
<input type="text" name="R_ID" class="textInput">
</td>
</tr>
<tr>
<td>Name: </td>
<td>
<input type="text" name="Name" class="textInput">
</td>
</tr>
<tr>
<td>Small Description: </td>
<td>
<input type="text" name="S_Description" class="textInput">
</td>
</tr>
<tr>
<td>Long Description: </td>
<td>
<input type="text" name="L_Description" class="textInput">
</td>
</tr>
<tr>
<td>Nutritional value: </td>
<td>
<input type="text" name="Nutritional_value" class="textInput">
</td>
</tr>
<tr>
<td>Cost: </td>
<td>
<input type="number" name="Cost" class="textInput">
</td>
</tr>
<tr>
<td>Type Of Meal: </td>
<td>
<input type="text" name="TypeOfMeal" class="textInput">
</td>
</tr>
<tr>
<td>UserID: </td>
<td>
<input type="Number" name="SubmittedBy" class="textInput">
</td>
</tr>
<tr>
<td> </td>
<td>
<input type="submit" name="Submit_btn" value="Continue">
</td>
</tr>
</table>
</form>
</body>
</html>
登记
R_ID:
姓名:
小说明:
详细说明:
营养价值:
费用:
膳食类型:
用户标识:
尝试用此替换
<?php
// This prevents SQL injection threat
$RID = mysqli_real_escape_string($conn, $RID);
$Name = mysqli_real_escape_string($conn, $Name);
$S_Description = mysqli_real_escape_string($conn, $S_Description);
$L_Description = mysqli_real_escape_string($conn, $L_Description);
$Nutritional_value = mysqli_real_escape_string($conn, $Nutritional_value);
$Cost = mysqli_real_escape_string($conn, $Cost);
$TypeOfMeal = mysqli_real_escape_string($conn, $TypeOfMeal);
$SubmittedBy = mysqli_real_escape_string($conn, $SubmittedBy);
$sql= "INSERT INTO `recipe`(`R_ID`, `Name`, `S_Description`, `L_Description`, `Nutritional_value`, `Cost`, `TypeOfMeal`, `SubmittedBy`) VALUES ('$RID','$Name','$S_Description','$L_Description','$Nutritional_value','$Cost','$TypeOfMeal','$SubmittedBy')";
确定一些事情:
$SubmittedBy=($_POST['SubmittedBy']);
您不需要在$\u POST周围加括号。但是,如果要使用其中的数据,尤其是在SQL中,那么不仅要对输入进行清理。下面是一个带有mysqli\u real\u escape\u string
的示例,看起来如下所示:
$SubmittedBy=mysqli_real_escape_string($conn, $_POST['SubmittedBy']);
还有其他方法,如PDO::quote或使用准备好的语句,您可能也想看看这些方法
接下来,sql将插入不带引号的值:
$sql= "INSERT INTO `recipe`(`R_ID`, `Name`, `S_Description`, `L_Description`, `Nutritional_value`, `Cost`, `TypeOfMeal`, `SubmittedBy`) VALUES ('$RID','$Name','$S_Description','$L_Description','$Nutritional_value','$Cost','$TypeOfMeal','$SubmittedBy')";
编辑:感谢Funk Forty Niner指出缺少的$conn
您的代码易受SQL注入攻击,即使改用,也会受到黑客攻击。“我没有收到错误或任何东西”——您没有检查错误。如果查询失败,mysqli\u query()
将返回false
,您可以通过查看mysqli\u error()
的结果来获得有关其失败原因的更多信息。此外,为什么要在$\u POST
变量周围添加括号?“我没有收到错误或任何东西”在您的代码中,我没有看到启用了错误报告。您是否养成了获取解决方案并运行的习惯?因此,我使用了mysqli_error(),它向我显示了以下消息:-“字段列表”中的未知列“sid”我不明白它指的是什么。。我没有使用sid列。。甚至没有它mysqli\u real\u escape\u string
@MehdiBounya请告诉我如何破解我的sql,考虑到我与mysqli\u real\u escape\u string一起使用单引号,实际上@Paul escape函数根本不会运行;它缺少连接的参数。所以,你真的只有1/2是正确的。我和这里的每个人都同意使用一个事先准备好的声明。除了帮助避免sql注入之外,还有很多好处。以PDO为例;命名占位符更易于跟踪。请建议使用参数绑定,而不要随意使用mysqli\u real\u escape\u string()
。如果不知道这些列的类型,就无法知道该函数是否会执行正确的操作。因为我们在Mysql中,使用number=1
或number='1'
是相同的,所以即使该类型是数字,它也应该始终工作。。。给我看一个不起作用的案子我很好奇。看。可靠地防止SQL注入的唯一方法是使用参数绑定。顺便说一下,这两个语句在任何sane数据库中都不相同。MySQL并不健全;在Mysql中,使用NUMBER=1或NUMBER='1'是一样的……给我一个它不起作用的例子,我很好奇“好吧,你自找的。如果NUMBER是一个int数据类型并已编制索引,并且如果使用其中NUMBER='1'
MySQL无法使用列NUMBER上的索引。
$sql= "INSERT INTO `recipe`(`R_ID`, `Name`, `S_Description`, `L_Description`, `Nutritional_value`, `Cost`, `TypeOfMeal`, `SubmittedBy`) VALUES ('$RID','$Name','$S_Description','$L_Description','$Nutritional_value','$Cost','$TypeOfMeal','$SubmittedBy')";