PHP表单将空行写入MySQL DB

时间:2011-07-27 09:43:11

标签: php mysql forms

我正在使用一个简单的表单向我的数据库提交一行。我没有收到连接到数据库的错误,它确实插入了行,但它将所有值写入空白。

这是表格:

<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)
?>

我做错了什么?感谢

4 个答案:

答案 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)写入每个操作的日志文件,以查看实际发生的情况。