PHP/MySQL -无法获得PHP脚本将数据放入MySQL数据库


PHP/MySQL - Cannot get PHP script to put data into MySQL Database

我花了大部分时间试图从一个表单到MySQL数据库的数据,我所尝试的一切到目前为止都没有工作,有人能找出什么是错的吗?数据库连接正常,只是不能向mysql数据库中添加任何数据(当前错误在底部)

编辑:更新了下面的代码(仍然不能工作!)

<?php
$host = "localhost"; // Host name
$username = "root"; // Mysql username
$password = ""; // Mysql password
$db_name = "report"; // Database name
$tbl_name = "tbl_nonconformance"; // Table name
// Connect to server and select database.
mysql_connect($host, $username, $password) or die("cannot connect");
mysql_select_db("$db_name") or die("cannot select DB");
echo "Database Connected    ";
$name = $_POST['name'];
$email = $_POST['email'];
$supplier = $_POST['supplier'];
$PONum = $_POST['PONum'];
$Part = $_POST['Part'];
$Serial = $_POST['Serial'];
$tsf = $_POST['tsf'];
$Quantity = $_POST['Quantity'];
$probclass = $_POST['probclass'];
$desc = $_POST['desc'];
$sql="INSERT INTO tbl_nonconformance (sno, Date, Name, Email, Supplier, PONum, Part, Serial, TSF, Quantity, probclass, desc)
VALUES
('$sno', '$date', '$name', '$email', '$supplier', '$PONum', '$Part', '$Serial', '$TSF', '$Quantity', '$probclass', '$desc')";
$result = mysql_query($sql);
// if successfully insert data into database, displays message "Successful".
if($result){
header('Location: ../thankyou.php');
}
else {
echo "ERROR";
}
// close mysql
mysql_close();
?>

首先要修改

 mysql_connect("$host", "$username", "$password") or die("cannot connect"); 

:

 $con = mysql_connect($host, $username, $password) or die("cannot connect");

您正在调用$con,但您从未定义它。你想要保存你的MySQL连接(con)为$con,因为你在这里试图做的。

你也应该考虑升级到MySQLi,因为MySQL已经被PHP弃用了,很可能会从未来的版本中删除。这里有一个资源可以帮助你开始。http://www.php.net/manual/en/book.mysqli.php

编辑2014年7月9日:你更新了你的代码,我不记得你的原始代码是什么。但是,如果它不能"工作",最好描述它不能工作的原因。调用$result后,这样做:

if( !$result || !mysql_affected_rows() ) 
   die( mysql_error() );
header('Location: ../thankyou.php'); //this will only occur if there are no SQL errors and the result actually inserted something
mysql_close(); 
echo "We couldn't forward you automatically. Click here to proceed {insert HTML/JS here}"; 

这将返回MySQL错误信息,这将有助于您的调试。

你的参数解析错了。

$name = mysql_real_escape_string($con, $_POST['name']);

$con首先没有定义。

其次,你试图逃离$_POST['name']

mysql_real_escape_string需要2个参数,第一个是强制性的,第二个是可选的。第一个参数是你想要转义的字符串,第二个参数指定一个mysql连接(可选的,因为你可能已经打开了一个)。

所以你的语句需要看起来像

$name = mysql_real_escape_string($_POST['name']);
也许$con是你的mysql连接?如果是这样的话,你可能想要

$con = mysql_connect ........等等

你也在使用不安全的折旧方法。你应该研究PDO对象。它将变量从您的查询中分离出来,因此它们不会同时发送。它还能显著地清理代码。我在他的代码中看到了一些问题…你传入$sno, $date,但是它们在你的代码中不存在。$tsf在实例化中有不同的情况,然后你在查询中使用。你使用的单引号不能插入数据(将值放在变量名所在的位置)。双引号可以…

嗯…

看看这个

<?php
$host = "localhost"; // Host name
$username = "root"; // Mysql username
$password = ""; // Mysql password
$db_port = "3306" // Mysql port
$db_name = "report"; // Database name
$dsn = "mysql:dbhost=$host;dbport=$db_port;dbname=$db_name";
//add sno variable declaration here.
$name = $_POST['name'];
$email = $_POST['email'];
$supplier = $_POST['supplier'];
$PONum = $_POST['PONum'];
$Part = $_POST['Part'];
$Serial = $_POST['Serial'];
$TSF = $_POST['tsf']; 
$Quantity = $_POST['Quantity'];
$probclass = $_POST['probclass'];
$desc = $_POST['desc'];
$date = date('d-m-Y');
// Connect to server and select database.
$dbConnect = new PDO($dsn, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$sqlStatement = $dbConnect->prepare("INSERT INTO tbl_nonconformance (sno, Date, Name, Email, Supplier, PONum, Part, Serial, TSF, Quantity, probclass, desc)VALUES('?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?')");
try{
 $sqlStatement->execute(array($sno, $date, $name, $email, $supplier, $PONum, $Part, $Serial, $TSF, $Quantity, $probclass, $desc));
 header('Location: ../thankyou.php');
}catch('PDOException $e){ 
echo 'Error: Could not connect to db.';
}
?>

PDO对象非常简单。create $dbConnect = new PDO()你们看到这里的争论了吧。Dsn,用户名,密码。最后一个参数只是一个关联数组,用常量设置PDO的错误模式。这允许我们使用try catch块进行错误处理。如果PDO不能连接,我们让捕获块着火…否则,try块是我们的数据被发送到数据库的地方…我们有一个变量叫做$sqlStatement..这是通过$dbConnect->prepare()实现的。这个函数接受语句…注意,问号排除变量。在try块中,我们从语句中调用execute…它接受一个值数组,该数组将按顺序替换问号。

记得创建一个变量。我给你加了日期。还要确保所有的大小写和拼写都是正确的。查询字符串中的一个字母,无论拼写错误,甚至只是大小写错误,都将导致失败。

如果有任何错误或问题,请告诉我。jeremybenson11@gmail.com