我正在使用一个简单的表单向我的数据库提交一行。我没有收到连接到数据库的错误,它确实插入了行,但它将所有值写入空白。
这是表格:
<form action="insert.php" method="post">
Título: <input type="text" name="title" />
Privacidad: <select type="text" name="privacy" />
<option value="public">Publico</option>
<option value="private">Privado</option>
</select><br/>
<input type="submit" />
</form>
这是insert.php文件:
<?
$con = mysql_connect("removed","removed","removed");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("copoetry", $con);
$sql="INSERT INTO Poems (Title, Privacy)
VALUES
('$_POST[title]','$_POST[privacy]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con)
?>
我做错了什么?感谢
答案 0 :(得分:3)
只需分配$ _POST变量,而不是尝试将它们内联到语句中。您还必须转义POST数据中可能出现的任何引号。所以,这样做:
$title = mysql_real_escape_string($_POST['title']);
$privacy = mysql_real_escape_string($_POST['privacy']);
$sql="INSERT INTO Poems (Title, Privacy)
VALUES
('$title','$privacy')";
此外,将内容更改为“'$_POST['title']','$_POST['privacy']'
”至少不会起作用,因为要将字符串内联到字符串,您必须使用{}
之类的$correct_string = "Hello {$_POST['world']}"
答案 1 :(得分:0)
是的,您应该将$ _POST [title]和$ _POST [隐私]更改为$ _POST ['title']和$ _POST ['privacy']。
并且还要更改:<select type="text" name="privacy" />
到<select name="privacy" >
答案 2 :(得分:0)
你可以这样做:
$sql="INSERT INTO Poems (Title, Privacy)
VALUES
('".$_POST['title']."','".$_POST['privacy']."')";
或:
$sql="INSERT INTO Poems (Title, Privacy)
VALUES
('{$_POST['title']}','{$_POST['privacy']}')";
应该工作,你的问题来自引号。找到一种绕过它们的方法,你就完成了。
答案 3 :(得分:0)
不考虑SQL注入/格式错误的SQL的问题,只要值不包含任何单引号,这就应该有效。
尝试将$ sql和var_export($ _ POST,true)写入每个操作的日志文件,以查看实际发生的情况。