PHP — База данных генерирует пустую строку при загрузке страницы

#php #sql #forms

#php #sql #формы

Вопрос:

У меня есть форма, которая будет отправлять информацию, которая вставляет строку в базу данных (сведения о компании). Отправка работает нормально, но я также обнаружил, что переход на страницу, содержащую форму, приведет к вставке пустой строки в базу данных. Есть идеи, почему это может быть? Приведенный ниже код:

 <?php
echo "<form action='addnew.php' method='post'>";
echo "<input type='text' name='categoryAdd' value='Travel'/><br/>";
echo "<input type='text' name='EstablishmentNameAdd' value='EstablishmentName'/><br/>";
echo "<input type='text' name='Address1Add' value='Address1'/><br/>";
echo "<input type='text' name='Address2Add' value='Address2'/><br/>";
echo "<input type='text' name='Address3Add' value='Address3'/><br/>";
echo "<input type='text' name='Address4Add' value='Address4'/><br/>";
echo "<input type='text' name='PostcodeAdd' value='Postcode'/><br/>";
echo "<input type='text' name='NearestStationAdd' value='NearestStation'/><br/>";
echo "<input type='text' name='TelAdd' value='Tel'/><br/>";
echo "<input type='text' name='FaxAdd' value='Fax'/><br/>";
echo "<input type='text' name='EmailAdd' value='Email'/><br/>";
echo "<input type='text' name='WebsiteAdd' value='Website'/><br/>";
echo "<input type='text' name='DescriptionAdd' value='Description'/><br/>";
echo "<input type='submit' value='test'/>";
echo "</form>"; 

$EstablishmentNameAdd = mysql_real_escape_string($_POST['EstablishmentNameAdd']);
$CategoryAdd = $_POST['categoryAdd'];
$Address1Add = mysql_real_escape_string($_POST['Address1Add']);
$Address2Add = mysql_real_escape_string($_POST['Address2Add']);
$Address3Add = mysql_real_escape_string($_POST['Address3Add']);
$Address4Add = mysql_real_escape_string($_POST['Address4Add']);
$PostcodeAdd = $_POST['PostcodeAdd'];
$NearestStationAdd = mysql_real_escape_string($_POST['NearestStationAdd']);
$TelAdd = $_POST['TelAdd'];
$FaxAdd = $_POST['FaxAdd'];
$EmailAdd = mysql_real_escape_string($_POST['EmailAdd']);
$WebsiteAdd = mysql_real_escape_string($_POST['WebsiteAdd']);
$DescriptionAdd = mysql_real_escape_string($_POST['DescriptionAdd']);

$result1 = mysql_query("INSERT into establishment_id (EstablishmentName) values ('$EstablishmentNameAdd')");
$result2 = mysql_query("SELECT * from establishment_id where EstablishmentName = '$EstablishmentNameAdd'");
while($row = mysql_fetch_array($result2))
  {
$ID = $row['EstablishmentID'];
$NAME = $row['EstablishmentName'];

};
$result3 = mysql_query("INSERT into establishmentdetails (EstablishmentID, EstablishmentName, category, Address1, Address2, Address3, Address4, Postcode, NearestStation, Tel, Fax,
Email, Website, Description) values('$ID', '$EstablishmentNameAdd', '$CategoryAdd', '$Address1Add', '$Address2Add', '$Address3Add', '$Address4Add', '$PostcodeAdd', '$NearestStationAdd', '$TelAdd', '$FaxAdd', '$EmailAdd',
 '$WebsiteAdd', '$DescriptionAdd')");

?>
  

Ответ №1:

Добавьте это после всех эхо-сигналов:

 if(!empty($_POST)){
...
}
  

Оберните в нее весь нижний код, так что вставка будет выполняться только при наличии post.

Комментарии:

1. Это плохой способ сделать это. if ($_SERVER['REQUEST_METHOD'] == 'POST') гарантированно работает. Ваш сбой произошел бы, если бы отправление было законно пустым.

2. @MarcB, да, верно, но OP не хочет вставлять в пустое сообщение, вот в чем проблема!

3. на самом деле, он выполняет вставку в GET, в чем вся проблема. Простое указание «not empty POST» не остановит заполнение пустых полей. Ему все равно придется добавить гораздо больше проверки на стороне сервера.

4. @MarcB нет, его форма является post , но да, потребуется дополнительная проверка, это только начало

5. ...but I also find that going to the page containing the form will... . Начальное попадание — GET, затем это post.

Ответ №2:

Это происходит потому, что вы повторяете форму .. и затем немедленно вставляете в свою базу данных вещи, которые еще не существуют.

Вы можете попробовать это:

 if(count($_POST) > 0 amp;amp; in_array('EstablishmentNameAdd',$_POST)) {
$EstablishmentNameAdd = mysql_real_escape_string($_POST['EstablishmentNameAdd']);
$CategoryAdd = $_POST['categoryAdd'];
$Address1Add = mysql_real_escape_string($_POST['Address1Add']);
$Address2Add = mysql_real_escape_string($_POST['Address2Add']);
$Address3Add = mysql_real_escape_string($_POST['Address3Add']);
$Address4Add = mysql_real_escape_string($_POST['Address4Add']);
$PostcodeAdd = $_POST['PostcodeAdd'];
$NearestStationAdd = mysql_real_escape_string($_POST['NearestStationAdd']);
$TelAdd = $_POST['TelAdd'];
$FaxAdd = $_POST['FaxAdd'];
$EmailAdd = mysql_real_escape_string($_POST['EmailAdd']);
$WebsiteAdd = mysql_real_escape_string($_POST['WebsiteAdd']);
$DescriptionAdd = mysql_real_escape_string($_POST['DescriptionAdd']);

$result1 = mysql_query("INSERT into establishment_id (EstablishmentName) values ('$EstablishmentNameAdd')");
$result2 = mysql_query("SELECT * from establishment_id where EstablishmentName = '$EstablishmentNameAdd'");
while($row = mysql_fetch_array($result2))
  {
$ID = $row['EstablishmentID'];
$NAME = $row['EstablishmentName'];

};
$result3 = mysql_query("INSERT into establishmentdetails (EstablishmentID, EstablishmentName, category, Address1, Address2, Address3, Address4, Postcode, NearestStation, Tel, Fax,
Email, Website, Description) values('$ID', '$EstablishmentNameAdd', '$CategoryAdd', '$Address1Add', '$Address2Add', '$Address3Add', '$Address4Add', '$PostcodeAdd', '$NearestStationAdd', '$TelAdd', '$FaxAdd', '$EmailAdd',
 '$WebsiteAdd', '$DescriptionAdd')");
}
  

Комментарии:

1. 😛 извините, это была опечатка.. Я вытащил!. Спасибо

2. почему вы выбрали EstablishmentNameAdd в качестве предостережения для публикации?

3. Это был просто пример.. Я выбрал это из других, потому что это казалось наиболее вероятным необходимым. Например, у вас может быть бизнес, но нет веб-сайта. Или, может быть, вы находитесь в процессе настройки своего заведения .. так что у вас пока нет номера телефона. Однако у всех заведений будет название. И в любое время все, кто связан с этим учреждением, будут знать это имя.

4. Я только что объяснил, почему я выбрал это. Если у OP есть проблема с этим полем, он может изменить его.

5. Действительно ценю помощь, ребята, но по какой-то причине она все еще не работает. Одна вещь, о которой я забыл упомянуть, заключалась в том, что в таблице establishment_id есть поле автоматического увеличения для уникального идентификатора. Это вообще актуально? Интересно, что когда я обновляю страницу, она не генерирует пустую строку.