Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Не вставляется запись в Mysql через php (https://javascript.ru/forum/server/74158-ne-vstavlyaetsya-zapis-v-mysql-cherez-php.html)

usa-1450 18.06.2018 18:59

Не вставляется запись в 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);
	
?>


Вроде отправляется но в базу не записывается ничего

usa-1450 18.06.2018 19:11

Все, понял ошибку, не то поле указал в запросе Insert, нужно так:

Код:

$query = "INSERT INTO publications.classics(author,title,category,year,isbn)
VALUES('".$author."','".$title."','".$category."','".$year."','".$isbn."')";

Странно, если вводить на русском к примеру в поле author выдает кракозябры если выводить базу в командной строке в MySQL, выдает просто знаки вопроса вместо русских символов.

laimas 18.06.2018 19:21

Данные пришедшие извне нужно фильтровать, а запись в базу предполагает экранирование.

Кракозябры при выводе потому, что не указывается кодировка соединения.

usa-1450 18.06.2018 22:00

С вставкой в базу данных вроде разобрался, вот с удалением как-то не идет.

Попробовал модернизировать код, в таблице которая была описана выше есть разные года в поле 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);

       
?>

Данные отправляются но год который ввожу в поле, который совпадает с полем с таблицы не удаляется все поле почему то, вроде запрос правильный. Мне нужно чтобы удалилось все поле с таблицы которое соответствует году с таблицы с годом в поле в которое введу год.

laimas 19.06.2018 03:56

$_POST['year'] не является $year.

Удалена будет не та запись, значение которой равно указанному, а все записи с таким значением. Для удаления конкретной записи работают с уникальными значениями.

Только строковые значения обрамляются кавычками, обрамление типов INT лишено всякого смысла. Вообще же в SQL существует несколько типов данных для работы с датой/временем.

Изучая SQL, изучать его нужно вне отрыва от вопросов безопасности.

usa-1450 24.06.2018 19:22

Попробовал вот здесь исправить, все равно не удаляет запись , ошибок не выдает

if(isset($_POST['year'])){
$query = 'DELETE FROM publications.classics WHERE `year`=".$year."';
$result = mysqli_query($link,$query); 
}

laimas 24.06.2018 19:29

Если не удаляет по условию `year`=".$year."', то что это означает? Наверное же, что такого значения в базе не найдено. if(isset($_POST['year'])) - это пришедшее POST запросом, а $year, это что?

И сразу приучите себя не писать дырявый код.

usa-1450 24.06.2018 19:37

Вложений: 2
Так я ввожу это значение в поле и отправляю,а оно все равно не хочет удалять, детали на фото как отправляю форму и что ввожу.

usa-1450 24.06.2018 19:55

Только вот так заработало.

if(isset($_POST['year'])){
$query = 'DELETE FROM publications.classics WHERE `year` = "'.(int)$_POST['year'].'"';
$result = mysqli_query($link,$query); 
}

laimas 24.06.2018 20:27

А только так и будет работать, ибо иначе подставляется в запрос несуществующее значение. И коли скрипт обработчик именно запроса на удаление, то:

if($year = (int)$_POST['year']) {
    $query = 'DELETE FROM publications.classics WHERE `year` = '.$year;
    ....
}


Часовой пояс GMT +3, время: 05:39.