从PHP添加到数据库会插入NULL


Adding to database from PHP inserts NULL

丢失的_是堆栈溢出的一个类型,我正在测试

我正试图使用以下两个文件将一个值插入到我的数据库中:

添加记录:

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

目前,它在没有错误的情况下将添加到字段venue_cability,但是它总是在venue_name字段中添加NULL。容量字段是INT,名称字段是VARCHAR。

我不知道它为什么这么做,它们和名字是一样的,我已经仔细检查了一遍。有人有什么想法吗?

您正在使用一个新查询重置$sql,而不首先执行它。

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

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

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

您在name="venuename" 中错过了一个_

你是说在同一条记录上?

你必须将它们插入相同的语句中,如下所示:

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

请使用事先准备好的报表。目前,您的代码极易受到SQL注入的影响,因为您只需从POST变量中读取值,而不需要进行任何检查。

试试这个:

添加记录:

<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());
}
?>

EDIT(解释上述更改)您在输入"venu_name"时出现了拼写错误,并且使用了两个不同的SQL字符串(如果它们实际执行,则会将数据插入两个不同字段,具体取决于表的配置)。第二个查询字符串覆盖了第一个,因此它从未被执行。

此外,一件非常重要的事情是,你没有以任何方式净化你的数据!也许你打算使用JavaScript?如果你不检查你的输入,你将很容易受到很多恶意攻击。

第一件事:

如何做到这一点:$venue_name = $_POST['venue_name']; ?

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

->您忘记了输入名称代码中的小_

第二件事:

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

试试看:

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