我有一个HTML表单,它向以下PHP文件提交值,将它们插入到MySQL数据库中:
<?php
$con = mysql_connect("*","*","*");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("*", $con);
$sql="INSERT INTO scores (hometeam, awayteam, result)
VALUES
('" . mysql_real_escape_string($_POST['hometeam']) . "',
'" . mysql_real_escape_string($_POST['awayteam']) . "',
'" . mysql_real_escape_string($_POST['result']) . "')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con);
?>
有时HTML表单中的输入字段将为空白,在这种情况下,我不希望任何内容插入到数据库中。我希望这个值保持为空。当我像这样填写我的表格时:
主队:蓝队
客场:空白
结果: Won
在我的数据库中插入了以下内容:
主队:蓝队
客队:“”
结果: Won
我想插入/不插入的是:
主队:蓝队
客队:零
结果: Won
我已经找了好几个小时来找解决办法了。有人能帮忙吗?谢谢。
发布于 2012-06-30 14:04:36
好的,它只会插入最后的值,因为您正在执行$sql,而$sql的最后一个值是"INSERT INTO scores (result) VALUES ('$_POST[result]')";
,您要通过放置相同的变量名来覆盖前面的值。
此外,如果字段有时是空的,(!empty($_POST[hometeam]))
将删除!空。
发布于 2012-06-30 14:05:15
每次都要覆盖SQL语句。表示您的“结果”字段不是空白,而是将SQL语句设置为:
"INSERT INTO scores (result) VALUES ('$_POST[result]')"
这是唯一正在执行的语句--您的其他值将被忽略,因为它们不是该语句的一部分。
您需要做的是首先设置变量:
$hometeam = isset($_POST['hometeam']) ? $_POST['hometeam'] : NULL;
$awayteam = isset($_POST['awayteam']) ? $_POST['awayteam'] : NULL;
$result = isset($_POST['result']) ? $_POST['result'] : NULL;
然后,您可以进行数据库交互:
$sql = "INSERT INTO scores hometeam, awayteam, result VALUES $hometeam, $awayteam, $result";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con);
我应该说,我没有在这方面包含任何安全性--您应该查看PDO或准备好的语句,以确保数据库不对SQL注入开放。
希望这能有所帮助!
发布于 2012-06-30 14:03:02
我认为在html表单中声明输入字段的名称有一些问题。请确保$_POSThometeam必须是表单中相同的输入名称。
例句:以你的形式
<input type="text" name="hometeam" value="" />
在PHP中
if (!empty($_POST[hometeam])) {
$sql="INSERT INTO scores (hometeam) VALUES ('$_POST[hometeam]')";
}
此外,在将其添加到数据库之前,请在post值中使用附加斜杠或mysql_real_escape_string。
请查看下面的链接:
http://php.net/manual/en/function.addslashes.php
http://php.net/manual/en/function.mysql-real-escape-string.php
https://stackoverflow.com/questions/11274561
复制相似问题