插入查询没有做任何事情

时间:2015-06-02 05:51:44

标签: php mysql sql mysqli

正如标题所示,我正在尝试创建一个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>

3 个答案:

答案 0 :(得分:2)

使用反引号

从查询中删除这些引号
"INSERT INTO `po_10152796` (`Job Name`, `Date`, `Address`) VALUES ('$jobname',' $date',' $address')";
  

表名和列名包含在backticks内,并且不是强制性的,除非table namecolumn 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注入的预准备语句。