正如标题所示,我正在尝试创建一个mysqli插入查询,以将表单中的数据插入表中。表结构分为4列,如下所示:
1)PO(自动递增int 主键)
2)工作名称(VARCHAR)
3)日期(VARCHAR)
4)地址(VARCHAR)
使用当前代码,我提交时没有错误,但是没有任何结果。我很困惑这部分内容不起作用并寻找一些洞察力。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?php
require 'classes/Mysql.php';
$conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die('There was a problem connecting to the database');
if($_POST && !empty($jobname) && !empty($date)){
$jobname = $_POST['jobname'];
$date = $_POST['date'];
$address = $_POST['address'];
$query = "INSERT INTO 'po_10152796'('Job Name', 'Date', 'Address') VALUES ('$jobname',' $date',' $address')";
mysqli_query($conn,$query);
}
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>New Job - Tradeflow</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h2>Your PO will be provided when the form is completed, fields marked with an asterix (*) are required and must be filled out in order to submit.</h2>
<form id="newJobForm" method="post" class="form-newJob" role="form" action="">
<div class = "relative">
<label>Job Name: </label>
<input class="blueinput" name="jobname" input type="text" placeholder="Job Name"/>
</div>
<div class="relative">
<label>Date: </label>
<input class="blueinput" name="date" input type="datetime" placeholder="" />
</div>
<div class="relative">
<label>Address: </label>
<input class="blueinput" name="address" input type="text" placeholder="Address" />
</div>
<input type="submit" class="bluebutton" aligh="left" value="Submit" />
</body>
</html>
答案 0 :(得分:2)
使用反引号
从查询中删除这些引号"INSERT INTO `po_10152796` (`Job Name`, `Date`, `Address`) VALUES ('$jobname',' $date',' $address')";
表名和列名包含在
backticks
内,并且不是强制性的,除非table name
或column name
不是Reserve Keyword
您还需要更新if
条件
if(!empty($_POST['jobname']) && !empty($_POST['date'])){
答案 1 :(得分:2)
您检查提交表单的条件是否错误。你的if条件会返回错误。试试这个:
if(!empty($_POST["jobname"]) && !empty($_POST["date"])){
对于您的查询,请不要使用单一刻度('
)作为您的表名和列名,而是使用反引号(`)。
"INSERT INTO `po_10152796` (`Job Name`, `Date`, `Address`) VALUES ('$jobname',' $date',' $address')";
注意:请不要在列名中使用空格。
您的查询也很容易SQL injections,因此我建议至少使用mysqli_real_escape_string()
函数。
$jobname = mysqli_real_escape_string($conn,$_POST["jobname"]);
为了更好的安全性,请使用mysqli_*
预准备语句或PDO。以下是mysqli_*
预备声明的示例:
if($stmt = $conn->prepare("INSERT INTO po_10152796 (Job_Name, Date, Address) VALUES(?,?,?)")){
$stmt->bind_param("sss",$_POST["jobname"],$_POST["date"],$_POST["address"]);
$stmt->execute();
$stmt->close();
}
答案 2 :(得分:1)
使用单引号转义列名和表名。那是错的。对于转义表名,您必须使用反引号。单引号仅适用于字符串文字
$query = "INSERT INTO `po_10152796`(`Job Name`, `Date`, `Address`) VALUES ('$jobname',' $date',' $address')";
此外,您还必须在每个sql语句后检查错误。 不要在列名中使用空格。 您应该了解有关防止sql注入的预准备语句。