Не вставляется запись в 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, время: 00:54. |