Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php/mysql:数据不是';不要插入表格_Php_Mysql_Sql - Fatal编程技术网

Php/mysql:数据不是';不要插入表格

Php/mysql:数据不是';不要插入表格,php,mysql,sql,Php,Mysql,Sql,因此,我试图创建此表单,但是,我无法将数据输入表中。每当我点击“继续”按钮时,实际上什么也没发生。我没有发现任何错误。当我检查我的数据库时,这些值还没有被添加。Idk它是如何发生的。我花了几个小时试图了解问题是什么,但我无法确定它,它到了我感到绝望的地步,并决定张贴这个问题,所以请帮助我。这是我的密码: <?php $conn = new mysqli("localhost", "root", "", "KFC"); if(isset($_POST['Submit_btn'])) {

因此,我试图创建此表单,但是,我无法将数据输入表中。每当我点击“继续”按钮时,实际上什么也没发生。我没有发现任何错误。当我检查我的数据库时,这些值还没有被添加。Idk它是如何发生的。我花了几个小时试图了解问题是什么,但我无法确定它,它到了我感到绝望的地步,并决定张贴这个问题,所以请帮助我。这是我的密码:

<?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')";