从PHP添加到数据库插入NULL

时间:2012-03-09 20:27:29

标签: php mysql database post null

缺少_在STACKOVERFLOW上有一个类型,我正在测试。

我正在尝试使用以下两个文件向我的数据库插入一个值:

添加记录:

 <form action="AddVenue.php" method="post" />
<p>Venue Name: <input type="text" name="venue_name" /></p>
<p>Venue Capacity: <input type="text" name="venue_capacity" /></p>
<input type="submit" value="Submit" />
</form>

AddVenue.php

<?php
require("dbconnection.php"); // Connect to Database

// Select Database

$db= 'database';  
mysql_select_db($db) or die("Could not select database");


$venue_name = $_POST['venue_name'];
$venue_capacity = $_POST['venue_capacity'];

$sql = "INSERT INTO Venues (venue_name) VALUES ('$venue_name')";
$sql = "INSERT INTO Venues (venue_capacity) VALUES ('$venue_capacity')";

if (!mysql_query($sql))
{
       die('Error: ' . mysql_error());
}



mysql_close();
?>

目前,它将field_capacity字段添加到没有错误的字段,但它总是向venue_name字段添加NULL。 capacity字段是INT,名称字段是VARCHAR。

我不知道它为什么这样做,它们与名字相同,我有双重和三重检查。有没有人有任何想法?

5 个答案:

答案 0 :(得分:4)

您错过了_

中的name="venuename"

答案 1 :(得分:4)

您正在使用新查询重置$sql而不先执行此操作。

您应该将两个查询合并为一个:

INSERT INTO Venues (venue_name, venue_capacity) VALUES ('$venue_name', '$venue_capacity');

您的表单还需要包含名为venue_name的字段,而不是venuename

答案 2 :(得分:2)

你的意思是在同一张唱片上?

你必须在同一个语句中插入它们:

$sql = "INSERT INTO Venues (venue_name, venue_capacity) VALUES ('$venue_name', '$venue_capacity')";

请使用准备好的陈述。目前,您的代码极易受到SQL注入的影响,因为您只需从POST-Variables中读取值而不进行任何检查。

答案 3 :(得分:1)

试试这个:

添加记录:

<form action="AddVenue.php" method="post" />
  <p>Venue Name: <input type="text" name="venue_name" /></p>
  <p>Venue Capacity: <input type="text" name="venue_capacity" /></p>
  <input type="submit" value="Submit" />
</form>

<强> AddVenue.php

<?php

$venue_name = mysql_real_escape_string($_POST['venue_name']);
$venue_capacity = mysql_real_escape_string($_POST['venue_capacity']);

$sql = "INSERT INTO Venues (venue_name,venue_capacity) VALUES ('$venue_name','$venue_capacity')";

if (!mysql_query($sql))
{
       die('Error: ' . mysql_error());
}

?>

编辑(解释上述变化) 您输入的“venu_name”中有一个拼写错误,并且还使用了两个不同的SQL字符串(如果它们实际执行,则会将数据插入2个不同的字段,具体取决于您的表的配置)。第二个查询字符串覆盖了第一个查询字符串,因此从未执行过。

另外,一个非常重要的事情是您没有以任何方式清理数据!也许您打算使用JavaScript?如果你不检查你的输入,你将容易受到许多讨厌的攻击。<​​/ p>

答案 4 :(得分:0)

第一件事:

你怎么能这样做:$venue_name = $_POST['venue_name']; ?

当您使用之前执行此操作时:<input type="text" name="venuename" /></p>

- &GT;您忘记了输入名称代码中的小_

第二件事:

如果你这样做,你将为$ sql设置一个新值而不执行第一个。

尝试改为:

$sql = "INSERT INTO Venues (venue_name, venue_capacity) VALUES ('$venue_name', '$venue_capacity')";