18.06.2018, 18:59
|
Аспирант
|
|
Регистрация: 10.01.2015
Сообщений: 31
|
|
Не вставляется запись в Mysql через php
Есть таблица в базе данных MySQL.
Код:
|
| author varchar(128)
| title varchar(128)
| category varchar(16)
| year smallint(6)
| isbn char(13) |
Данные отправляются с формы но не вставляются почему то в базу данных, не знаю почему.
Данные отправляю с 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);
?>
Вроде отправляется но в базу не записывается ничего
|
|
18.06.2018, 19:11
|
Аспирант
|
|
Регистрация: 10.01.2015
Сообщений: 31
|
|
Все, понял ошибку, не то поле указал в запросе Insert, нужно так:
Код:
|
$query = "INSERT INTO publications.classics(author,title,category,year,isbn)
VALUES('".$author."','".$title."','".$category."','".$year."','".$isbn."')"; |
Странно, если вводить на русском к примеру в поле author выдает кракозябры если выводить базу в командной строке в MySQL, выдает просто знаки вопроса вместо русских символов.
|
|
18.06.2018, 19:21
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Данные пришедшие извне нужно фильтровать, а запись в базу предполагает экранирование.
Кракозябры при выводе потому, что не указывается кодировка соединения.
|
|
18.06.2018, 22:00
|
Аспирант
|
|
Регистрация: 10.01.2015
Сообщений: 31
|
|
С вставкой в базу данных вроде разобрался, вот с удалением как-то не идет.
Попробовал модернизировать код, в таблице которая была описана выше есть разные года в поле year. Мне нужно чтобы удалилось то поле которое я введу в строке ввода которое соответствует тому году который есть в таблице.
Создал
index.php
Код:
|
<!DOCTYPE html>
<html lang="ru">
<head>
<title>Админ-панель</title>
</head>
<body>
<?php
echo <<<_END2
<form action="form.php" method="post">
<input type="text" name="year">
<input type="submit" value="DELETE RECORD"></form>
_END2;
?>
</body>
</html> |
Файл в который отправляем форму 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['year'])){
$query = 'DELETE FROM publications.classics WHERE year=".$year."';
}
// Закрываем соединение
mysqli_close($link);
?> |
Данные отправляются но год который ввожу в поле, который совпадает с полем с таблицы не удаляется все поле почему то, вроде запрос правильный. Мне нужно чтобы удалилось все поле с таблицы которое соответствует году с таблицы с годом в поле в которое введу год.
|
|
19.06.2018, 03:56
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
$_POST['year'] не является $year.
Удалена будет не та запись, значение которой равно указанному, а все записи с таким значением. Для удаления конкретной записи работают с уникальными значениями.
Только строковые значения обрамляются кавычками, обрамление типов INT лишено всякого смысла. Вообще же в SQL существует несколько типов данных для работы с датой/временем.
Изучая SQL, изучать его нужно вне отрыва от вопросов безопасности.
|
|
24.06.2018, 19:22
|
Аспирант
|
|
Регистрация: 10.01.2015
Сообщений: 31
|
|
Попробовал вот здесь исправить, все равно не удаляет запись , ошибок не выдает
if(isset($_POST['year'])){
$query = 'DELETE FROM publications.classics WHERE `year`=".$year."';
$result = mysqli_query($link,$query);
}
|
|
24.06.2018, 19:29
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Если не удаляет по условию `year`=".$year."', то что это означает? Наверное же, что такого значения в базе не найдено. if(isset($_POST['year'])) - это пришедшее POST запросом, а $year, это что?
И сразу приучите себя не писать дырявый код.
|
|
24.06.2018, 19:37
|
Аспирант
|
|
Регистрация: 10.01.2015
Сообщений: 31
|
|
Так я ввожу это значение в поле и отправляю,а оно все равно не хочет удалять, детали на фото как отправляю форму и что ввожу.
Последний раз редактировалось usa-1450, 24.06.2018 в 19:39.
|
|
24.06.2018, 19:55
|
Аспирант
|
|
Регистрация: 10.01.2015
Сообщений: 31
|
|
Только вот так заработало.
if(isset($_POST['year'])){
$query = 'DELETE FROM publications.classics WHERE `year` = "'.(int)$_POST['year'].'"';
$result = mysqli_query($link,$query);
}
|
|
24.06.2018, 20:27
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
А только так и будет работать, ибо иначе подставляется в запрос несуществующее значение. И коли скрипт обработчик именно запроса на удаление, то:
if($year = (int)$_POST['year']) {
$query = 'DELETE FROM publications.classics WHERE `year` = '.$year;
....
}
|
|
|
|