Добавление в базу данных из PHP вставки NULL - PullRequest
1 голос
/ 10 марта 2012

ПРОПУСТИТЬ _ БЫЛО ТИПО НА 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();
?>

В данный момент без ошибок добавляет в поле venue_capacity.Однако он всегда добавляет NULL в поле venue_name.Поле емкости - INT, а поле имени - VARCHAR.

Я понятия не имею, почему он это делает, они одинаковые патчи из имен, которые я проверил дважды и трижды.У кого-нибудь есть идеи?

Ответы [ 5 ]

4 голосов
/ 10 марта 2012

Вы сбрасываете $sql с новым запросом, не выполнив его сначала.

Вы должны объединить два запроса в один:

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

Ваша форма также должна иметь полеимя venue_name вместо venuename.

4 голосов
/ 10 марта 2012

Вы пропустили _ в name="venuename"

2 голосов
/ 10 марта 2012

Вы имеете в виду на одной записи?

Вы должны вставить их в то же утверждение, как это:

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

И, пожалуйста, используйте подготовленные заявления. На данный момент ваш код чрезвычайно уязвим для SQL-инъекций, потому что вы просто читаете значения из POST-переменных без каких-либо проверок.

1 голос
/ 10 марта 2012

Попробуйте это:

Добавить запись:

<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» и также использовали 2 разные строки SQL (которые, если бы они действительно выполнялись, вставили данные в 2 разных поля, в зависимости от конфигурации вашей таблицы).Вторая строка запроса перезаписала первую, поэтому она никогда не выполнялась.

Кроме того, очень важно то, что вы никоим образом не очищали свои данные!Возможно, вы намеревались использовать JavaScript для этого?Если вы не проверите свой ввод, вы будете уязвимы для множества неприятных атак.

0 голосов
/ 10 марта 2012

Первым делом:

Как вы можете сделать это: $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')";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...