我正在为我的雇主编写一些内部CMS的脚本,它只是基础,但摆脱了大量令人讨厌的excel电子表格,它提供了更多的灵活性和选项。
我今天遇到的问题是我有一个脚本根据用户表单输入写入数据库。
我已成功完成了一个名为customers的表,但我正在尝试创建一个名为ncr的表,但由于某种原因,脚本运行但没有信息输入到数据库中。
NCR: input type="text" name="NCR"
Project: input type="text" name = "Project"
Raised By: input type="text" name = "Raised"
Date: input type="text" name = "Date"
Pasts Affected: input type="text" name = "Parts"
Description: input type="text" name = "Description"
Corrective Action Taken: input type="text" name = "Action
Components Returned to Spec: input type="text" name = "Rtn_Spec"
Concession Applied For: input type="text" name = "Concession"
Corrective Action Approved By: input type="text" name = "CR_By"
Reviewed For Preventative Actions By: <input type="text" name = "Review_By"
Preventative Actions Taken: input type="text" name = "Actions_tk"
Preventative Actions Approved By: <input type="text" name = "Actions_Apr"
NCR Closed Out?: input type="text" name = "Closed"
Date Closed: input type="text" name = "Date_Clsd"
Closed Out By: input type="text" name = "Clsd_By"
$NCR=$_POST['NCR'];
$Project=$_POST['Project'];
$Raised=$_POST['Raised'];
$Date=$_POST['Date'];
$Parts=$_POST['Parts'];
$Descr=$_POST['Descr'];
$Action=$_POST['Action'];
$Rtn_Spec=$_POST['Rtn_Spec'];
$Concession=$_POST['Concession'];
$CR_By=$_POST['CR_By'];
$Review_By=$_POST['Review_By'];
$Actions_tk=$_POST['Actions_tk'];
$Actions_Apr=$_POST['Actions_Apr'];
$Closed=$_POST['Closed'];
$Date_Clsd=$_POST['Date_Clsd'];
$Clsd_By=$_POST['Clsd_By'];
// (database connection details go here)
mysql_query(
"INSERT INTO 'ncr'
VALUES ('$NCR', '$Project', '$Raised',
'$Date','$Parts', '$Descr',
'$Action', '$Rtn_Spec', '$Concession',
'$CR_By', '$Review_By', '$Actions_tk',
'$Actions_Apr', '$Closed', '$Date_Clsd',
'$Clsd_By')
");
Print "Your information has been successfully added to the database.";
任何帮助将不胜感激
答案 0 :(得分:2)
mysql_query("INSERT INTO 'ncr' VALUES ('$NCR', [..snip..]
^^^^^
您引用了表名,将其转换为字符串 - 不再是表名。要么使用反引号,要么根本没有引号 - ncr
不是mysql中的保留字,所以引用它绝对没有意义:
mysql_query("INSERT INTO `ncr` VALUES ('$NCR', [..snip..]
mysql_query("INSERT INTO ncr VALUES ('$NCR', [..snip..]
这两个都是可以接受的。并注意上面的评论。这应该可以解决您的问题,但仍然会给您留下大量其他更大的问题。
答案 1 :(得分:0)
首先,我们需要使用mysql_
以外的库,例如mysqli_
或pdo
。
对于此示例,我们将使用mysqli_
,因为它可能是mysql_
到mysqli_
之间更平滑的过渡。
$mysql = new mysqli('host', 'username', 'password', 'database');
这对你来说应该是非常熟悉的,给出它所有与你当前连接相同的信息,但数据库除外,它作为参数传递。
接下来,您对'ncr'
表的查询中出现错误,您已将其转换为字符串。鉴于这是一个表名,ncr
应该出现'
封装。此外,唯一一次你应该使用反引号封装,它是自己保留的单词,是否有特殊字符,或者是否有空格。
现在让我们进入查询:
$stmt = $mysqli->prepare("INSERT INTO ncr VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
每个?
表示我们必须稍后bind
反对的变量的位置。请注意:
$stmt->bind_param('ssssssssssssssss', $NCR, $Project, $Raised,$Date,$Parts, $Descr, $Action, $Rtn_Spec, $Concession, $CR_By, $Review_By, $Actions_tk, $Actions_Apr, $Closed, $Date_Clsd, $Clsd_By);
在上文中,我们确定了我们希望绑定的16个变量。 s
代表string
,以便引擎知道如何处理数据。必须对我们绑定的每个变量重复此操作,如果它们是整数,我们将使用i
代替。
现在我们已经绑定了参数,我们可以执行查询:
$stmt->execute();
现在数据已存储在数据库中。