我正在处理从表单提交到数据库的数据,但是,每当我提交时,没有错误,我的数据从未出现在我的数据库中。任何人都可以帮我提供一些关于我可能做错了什么的信息吗?我正在使用phpMyAdmin来查看我的表格。 谢谢, 斯蒂芬
<?php
$user= $_POST["txtUser"];
$fName= $_POST["txtFname"];
$lName= $_POST["txtLname"];
$email= $_POST["txtEmail"];
$date= date("r");
$dbh=mysql_connect('webdb.uvm.edu','swakita','MYPASSWORD');
if (!$dbh)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("SWAKITA", $dbh);
if (isset($_POST['butSubmit'])) {
mysql_query("INSERT INTO tblWhere (pk_Username, fldFirstName, fldLastName, fldAdminLevel, fldTotalPosts, fldDateJoined, fldEmail) VALUES (" . $user . "," . $fName . "," . $Lname . ", '4', '0', $date, $email)");
mysql_close();
print $user;
}
?>
修改 抛出此错误: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的''附近使用正确的语法
这是我目前的代码:
<?php
$user= $_POST["txtUser"];
$fName= $_POST["txtFname"];
$lName= $_POST["txtLname"];
$email= $_POST["txtEmail"];
$date= date("r");
$dbh=mysql_connect('webdb.uvm.edu','swakita','efaemaey');
if (!$dbh)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db('SWAKITA', $dbh);
if (isset($_POST['butSubmit'])) {
mysql_query("INSERT INTO tblWhere (pk_Username, fldFirstName, fldLastName, fldAdminLevel, fldTotalPosts, fldDateJoined, fldEmail) VALUES (' mysql_real_escape_string($user)', 'mysql_real_escape_string($fName)', 'mysql_real_escape_string($Lname)', '4', '0', 'mysql_real_escape_string($date)', 'mysql_real_escape_string($email)'");
if (mysql_errno()) {
echo $sql . "<br/>\n" . mysql_error();
}
mysql_close();
print $user;
}
?>
编辑编辑 我在'mysql_real_escape_string($ email)'之后错过了一个括号,但现在它发布的是“mysql_real_escape_string(示例名字)”,而不仅仅是值。我的括号现在做错了什么?
答案 0 :(得分:3)
如果您直接在查询中使用来自POST请求的字段,则您很容易受到SQL injection的攻击,请先将其转义。
$user = mysql_real_escape_string($_POST["txtUser"]);
...
要查看问题,请检查mysql_query
的结果mysql_query(...);
if (mysql_errno()) {
echo $sql . "<br/>\n" . mysql_error();
}
我认为问题在于你没有在像user这样的字段中加引号。
VALUES (" . $user . "," . $fName . ", ...
应该是:
VALUES ('" . $user . "', '" . $fName . "', ...
或更简单:
VALUES('$user', '$fName', ...
如果你用双引号引用你的字符串“,你可以在字符串中使用$ variable并且它们将被评估,而如果你使用用单引号分隔的字符串',它将字面上打印$ variable。
答案 1 :(得分:1)
mysql_query("INSERT INTO tblWhere (pk_Username, fldFirstName, fldLastName, fldAdminLevel, fldTotalPosts, fldDateJoined, fldEmail) VALUES ('" . mysql_real_escape_string($user) . "','" . mysql_real_escape_string($fName) . "','" . mysql_real_escape_string($Lname) . "', '4', '0', '".mysql_real_escape_string($date)."', '".mysql_real_escape_string($email')."'");
你需要用'单引号包装字符串。请妥善逃脱或被黑客攻击。 mysql_real_escape_string()会有所帮助。