Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.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表单到SQL错误_Php_Mysql - Fatal编程技术网

PHP表单到SQL错误

PHP表单到SQL错误,php,mysql,Php,Mysql,我正在尝试从表单写入SQL数据库。这都是本地通过WAMP,如果这有区别的话 我收到的错误如下: Error: INSERT INTO customers (yard, full_address, business_name, business_status, first_name, last_name, landline_number, mobile_number, email_address) VALUES ('Dominic', '123 Fake Street', 'Dom's Busin

我正在尝试从表单写入SQL数据库。这都是本地通过WAMP,如果这有区别的话

我收到的错误如下:

Error: INSERT INTO customers (yard, full_address, business_name, business_status, first_name, last_name, landline_number, mobile_number, email_address) VALUES ('Dominic', '123 Fake Street', 'Dom's Business Name', '', 'Dominic', 'Fichera', 0123456789', '0123456789', '')
Erreur de syntaxe pr�s de 's Business Name', '', 'Dominic', 'Fichera', 0123456789', '0123456789', '')' � la ligne 2
我还在这里上传了一张图片:

我不确定此错误是否涉及代码中的问题、设置SQL表的方式问题或其他完全不同的问题

下面是我的代码的主要部分,所有操作都发生在这里:

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "login";


    if ($_SERVER["REQUEST_METHOD"] == "POST") {

   if (empty($_POST["yard"])) {
     $yard_error = "Yard is required";
   } else {
     $yard = test_input($_POST["yard"]);
   }

   if (empty($_POST["full_address"])) {
     $full_address_error = "Address is required";
   } else {
     $full_address = test_input($_POST["full_address"]);
   }

   if (empty($_POST["first_name"])) {
     $first_name_error = "First name is required";
   } else {
     $first_name = test_input($_POST["first_name"]);
   }

   if (empty($_POST["last_name"])) {
     $last_name_error = "Last name is required";
   } else {
     $last_name = test_input($_POST["last_name"]);
   }

   if ($_POST["business_status"] = "") {
     $business_status_error = "Business status is required";
   } else {
     $business_status = test_input($_POST["business_status"]);
   }

   $business_name = $_POST["business_name"];
    $landline_number = $_POST["landline_number"];
    $mobile_number = $_POST["mobile_number"];
    $email_address = $_POST["email_address"];

   // Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "INSERT INTO customers (yard, full_address, business_name,         business_status, first_name, last_name, landline_number, mobile_number,     email_address)
VALUES ('$yard', '$full_address', '$business_name', '$business_status',     '$first_name', '$last_name', $landline_number', '$mobile_number',     '$business_status')";

if ($conn->query($sql) === TRUE) {
    $yard_confirmation = $yard . "successfully saved.";
} else {
    $yard_confirmation = "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();

    }

    function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
$servername=“localhost”;
$username=“root”;
$password=“”;
$dbname=“login”;
如果($\服务器[“请求\方法”]=“发布”){
如果(空($_POST[“yard”])){
$yard\u error=“需要码”;
}否则{
$yard=测试输入($u POST[“yard”]);
}
如果(空($_POST[“完整地址”])){
$full\u address\u error=“地址是必需的”;
}否则{
$full_address=测试输入($_POST[“full_address”]);
}
if(空($\u POST[“first\u name”])){
$first\U name\U error=“需要名字”;
}否则{
$first_name=测试输入($_POST[“first_name”]);
}
if(空($_POST[“last_name”])){
$last\u name\u error=“姓氏是必需的”;
}否则{
$last_name=测试输入($_POST[“last_name”]);
}
如果($\u POST[“业务状态”]=“”){
$business\u status\u error=“需要业务状态”;
}否则{
$business_status=测试_输入($_POST[“business_status”]);
}
$business\u name=$\u POST[“business\u name”];
$landline\U number=$\U POST[“landline\U number”];
$mobile_number=$_POST[“mobile_number”];
$email\u address=$\u POST[“email\u address”];
//创建连接
$conn=newmysqli($servername、$username、$password、$dbname);
//检查连接
如果($conn->connect\u错误){
die(“连接失败:”.$conn->connect\U错误);
} 
$sql=“插入客户(码、完整地址、企业名称、企业状态、名字、姓氏、固定电话号码、手机号码、电子邮件地址)
值(“$yard”、“$full_address”、“$business_name”、“$business_status”、“$first_name”、“$last_name”、$landline_number”、“$mobile_number”、“$business_status”);
if($conn->query($sql)==TRUE){
$yard\u confirmation=$yard.“已成功保存。”;
}否则{
$yard\u confirmation=“Error:”.$sql。“
”$conn->错误; } $conn->close(); } 功能测试输入($data){ $data=修剪($data); $data=条带斜杠($data); $data=htmlspecialchars($data); 返回$data; }
“Dom的业务名称”无效,您需要转义:

'Dom\'s Business Name'

请考虑使用准备好的语句。

你SQL注入了你自己的数据库LOL。虽然你有一个函数添加了名为“代码> TestInEnter())的斜杠>代码>你忘记在某些地方使用它。改变这些:

$business_name = $_POST["business_name"];
$landline_number = $_POST["landline_number"];
$mobile_number = $_POST["mobile_number"];
$email_address = $_POST["email_address"];
对这些:

$business_name = test_input($_POST["business_name"]);
$landline_number = test_input($_POST["landline_number"]);
$mobile_number = test_input($_POST["mobile_number"]);
$email_address = test_input($_POST["email_address"]);

我鼓励阅读。

在您的查询中,您列出的值中,
“$landline\u number”
之前缺少一个引号

另外,由于您没有使用准备好的语句,我强烈建议您对所有用户提交的变量使用
mysqli\u real\u escape\u string()
,以防止注入。例如:

$variable = mysqli_real_escape_string($conn, $_POST['variable']);

考虑这个php函数,并在保存到数据库之前准备好字符串。

正如其他人所说,问题在于企业名称中的撇号,但可能是其他需要转义的字符。最糟糕的是,您的代码可能成为SQL注入的牺牲品

对于解决方案,行:

$business_name = $_POST["business_name"];
应通过以下方式进行更改:

if ($_POST["business_name"] = "") {
 $business_name_error = "Business name is required";
} else {
 $business_name = test_input($_POST["business_name"]);
}

以下三行应该以同样的方式进行更改。

我建议这样做:

function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
以及:

(对每个$u POST变量执行相同的行)

基本上,它是一行中的if/else语句(减少混乱)。如果$\u POST[“business\u name”]中有数据,那么$business\u name将通过test\u输入解析该值-如果它没有值,那么errors数组将获得一个新值

检查并解析所有值后,您可以执行以下操作:

if(empty($errors)) {
    //If there are no errors, continue inserting
    $conn = new mysqli($servername, $username, $password, $dbname);

    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 

    $sql = "INSERT INTO customers (yard, full_address, business_name, business_status, first_name, last_name, landline_number, mobile_number, email_address) VALUES ('$yard', '$full_address', '$business_name', '$business_status', '$first_name', '$last_name', $landline_number', '$mobile_number', '$business_status')";

    if ($conn->query($sql) === TRUE) {
        $yard_confirmation = $yard . "successfully saved.";
    } else {
        $yard_confirmation = "Error: " . $sql . "<br>" . $conn->error;
    }
} else {
    foreach($errors as $error) {
        echo $error."<br />";
    }
}
if(空($errors)){
//如果没有错误,请继续插入
$conn=newmysqli($servername、$username、$password、$dbname);
如果($conn->connect\u错误){
die(“连接失败:”.$conn->connect\U错误);
} 
$sql=“在客户(码、完整地址、业务名称、业务状态、名字、姓氏、固定电话号码、手机号码、电子邮件地址)中插入值(“$码”、“完整地址”、“业务名称”、“业务状态”、“第一名称”、“姓氏”、“固定电话号码”、“移动电话号码”、“业务状态”)”;
if($conn->query($sql)==TRUE){
$yard\u confirmation=$yard.“已成功保存。”;
}否则{
$yard\u confirmation=“Error:”.$sql。“
”$conn->错误; } }否则{ foreach($errors作为$error){ echo$错误。“
”; } }

不过,我绝对推荐使用PDO,它允许您将值绑定到查询

您需要转义用户输入。这就是为什么会出现错误“Dom的企业名称”
看到了吗?阅读有关数据转义的内容。很明显,“Dom的业务”中有一个撇号,通过
测试输入
转义您没有运行
$Business\u name
if(empty($errors)) {
    //If there are no errors, continue inserting
    $conn = new mysqli($servername, $username, $password, $dbname);

    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 

    $sql = "INSERT INTO customers (yard, full_address, business_name, business_status, first_name, last_name, landline_number, mobile_number, email_address) VALUES ('$yard', '$full_address', '$business_name', '$business_status', '$first_name', '$last_name', $landline_number', '$mobile_number', '$business_status')";

    if ($conn->query($sql) === TRUE) {
        $yard_confirmation = $yard . "successfully saved.";
    } else {
        $yard_confirmation = "Error: " . $sql . "<br>" . $conn->error;
    }
} else {
    foreach($errors as $error) {
        echo $error."<br />";
    }
}