Я пытаюсь вставить данные в 2 таблицы, используя одну форму.
Это моя форма
<form action="don.php" method="post"> <tr><td> <p> <label for="nume">Nume:</label></td> <td><input type="text" name="nume" id="nume" autocomplete="off"></td> </p> </tr> <tr><td> <p> <label for="prenume">Prenume:</label></td> <td> <input type="text" name="prenume" id="prenume" autocomplete="off"></td> </p></tr> <tr><td> <p> <label for="grupa">Numar telefon:</label></td> <td><input type="text" name="numar" id="numar" autocomplete="off"></td> </p></tr> <tr><td> <p> <label for="grupa">Suma:</label></td> <td><input type="text" name="suma" id="suma" autocomplete="off"></td> </p></tr> <tr><td> <p> <label for="grupa">Data:</label></td> <td><input type="text" name="data" id="data" autocomplete="off"></td> </p></tr> <tr><td> <p> <label for="grupa">IBAN:</label></td> <td><input type="text" name="iban" id="iban" autocomplete="off"></td> </p></tr> <tr><td><input type="submit" name="submit" value="Donează" onclick="alert('Operatiune finalizata cu succes. Va multumim!')"></td> </form>
И это мой PHP-код
<?php if(isset($_POST['submit'])){ $con=mysql_connect("localhost","root",""); if(!$con) { die("Nu se poate face conexiunea la baza de date" . mysql_error()); } mysql_select_db("laborator",$con); $sql="INSERT INTO donator (nume, prenume, numar_telefon) VALUES ('$_POST[nume]','$_POST[prenume]','$_POST[numar]')"; $sql="INSERT INTO donatie (suma, data_donatie, IBAN) VALUES ('$_POST[suma]','$_POST[data]','$_POST[iban]')"; mysql_query($sql,$con); mysql_close($con); } ?>
Когда я нажимаю кнопку отправки, он показывает мне предупреждение о том, что мои даты были вставлены, но работает только второй INSERT. Таблица «Донор» пуста. Что мне делать, чтобы исправить эту проблему?
Вы должны вызвать mysql_query()
для каждого запроса.
$sql1 = "INSERT INTO donator ..."; $sql2 = "INSERT INTO donatie ..."; mysql_query($sql1, $con); mysql_query($sql2, $con);
Важный
mysql_query()
устарел! Используйте mysqli_query()
http://php.net/manual/de/book.mysqli.php
Вы также можете использовать mysqli_multi_query()
http://php.net/manual/de/mysqli.multi-query.php
$query = "INSERT INTO donator ...; INSERT INTO donatie ...;"; mysqli_multi_query($link, $query);
Вы запускаете свои запросы с той же переменной $sql
. Вы должны называть их по-другому и называть их потом.
$sql="INSERT INTO donator (nume, prenume, numar_telefon) VALUES ('mysql_real_escape_string($_POST[nume])','mysql_real_escape_string($_POST[prenume])','mysql_real_escape_string($_POST[numar])')"; $sql2="INSERT INTO donatie (suma, data_donatie, IBAN) VALUES ('mysql_real_escape_string($_POST[suma])','mysql_real_escape_string($_POST[data])','mysql_real_escape_string($_POST[iban])')";
В противном случае вы должны изменить свои значения сообщений, защитив их. См. Здесь
Затем вам нужно переключиться на новый синтаксис mysql для PHP, например mysqli или PDO. Синтаксис mysql, который вы используете, устарел.
Вы переписываете переменную $ sql. Сохраните их как отдельные переменные или запустите первый запрос перед объявлением второго.
Тем не менее, вы должны ДЕЙСТВИТЕЛЬНО рассмотреть возможность переключения двух PDO или mysqli для ваших запросов, а не расширения mysql, а также поиска готовых инструкций и правильной очистки строк, потому что вы очень уязвимы для SQL-инъекций.