Не вставляется запись в Mysql через php
Есть таблица в базе данных MySQL.
Код:
| author varchar(128) Данные отправляю с index.php <!DOCTYPE html> <html lang="ru"> <head> <title>Админ-панель</title> </head> <body> <?php echo <<<_END <form action="form.php" method="post"><pre> Author <input type="text" name="author"> Title <input type="text" name="title"> Category <input type="text" name="category"> Year <input type="text" name="year"> ISBN <input type="text" name="isbn"> <input type="submit" value="ADD RECORD"> </pre></form> _END; ?> </body> </html> Через метод POST в form.php <?php $host="test.ru"; $user="root"; $pass=""; //Установленный вами пароль $db_name="publications"; $link = mysqli_connect($host,$user,$pass,$db_name); if (!$link) { die("Database connection failed: " . mysqli_connect_error()); } if (isset($_POST['author']) && isset($_POST['title']) && isset($_POST['category']) && isset($_POST['year']) && isset($_POST['isbn'])) { $author = $_POST['author']; $title = $_POST ['title']; $category = $_POST ['category']; $year = $_POST ['year']; $isbn = $_POST['isbn']; // Выполняем SQL-запрос $query = "INSERT INTO publications.classics(author,title,type,year,isbn) VALUES('".$author."','".$title."','".$category."','".$year."','".$isbn."')"; $result = mysqli_query($link,$query); } // Закрываем соединение mysqli_close($link); ?> Вроде отправляется но в базу не записывается ничего |
Все, понял ошибку, не то поле указал в запросе Insert, нужно так:
Код:
$query = "INSERT INTO publications.classics(author,title,category,year,isbn) |
Данные пришедшие извне нужно фильтровать, а запись в базу предполагает экранирование.
Кракозябры при выводе потому, что не указывается кодировка соединения. |
С вставкой в базу данных вроде разобрался, вот с удалением как-то не идет.
Попробовал модернизировать код, в таблице которая была описана выше есть разные года в поле year. Мне нужно чтобы удалилось то поле которое я введу в строке ввода которое соответствует тому году который есть в таблице. Создал index.php Код:
<!DOCTYPE html> Код:
<?php |
$_POST['year'] не является $year.
Удалена будет не та запись, значение которой равно указанному, а все записи с таким значением. Для удаления конкретной записи работают с уникальными значениями. Только строковые значения обрамляются кавычками, обрамление типов INT лишено всякого смысла. Вообще же в SQL существует несколько типов данных для работы с датой/временем. Изучая SQL, изучать его нужно вне отрыва от вопросов безопасности. |
Попробовал вот здесь исправить, все равно не удаляет запись , ошибок не выдает
if(isset($_POST['year'])){ $query = 'DELETE FROM publications.classics WHERE `year`=".$year."'; $result = mysqli_query($link,$query); } |
Если не удаляет по условию `year`=".$year."', то что это означает? Наверное же, что такого значения в базе не найдено. if(isset($_POST['year'])) - это пришедшее POST запросом, а $year, это что?
И сразу приучите себя не писать дырявый код. |
Вложений: 2
Так я ввожу это значение в поле и отправляю,а оно все равно не хочет удалять, детали на фото как отправляю форму и что ввожу.
|
Только вот так заработало.
if(isset($_POST['year'])){ $query = 'DELETE FROM publications.classics WHERE `year` = "'.(int)$_POST['year'].'"'; $result = mysqli_query($link,$query); } |
А только так и будет работать, ибо иначе подставляется в запрос несуществующее значение. И коли скрипт обработчик именно запроса на удаление, то:
if($year = (int)$_POST['year']) { $query = 'DELETE FROM publications.classics WHERE `year` = '.$year; .... } |
Часовой пояс GMT +3, время: 05:39. |