Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.06.2018, 18:59
Аспирант
Отправить личное сообщение для usa-1450 Посмотреть профиль Найти все сообщения от usa-1450
 
Регистрация: 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);
	
?>


Вроде отправляется но в базу не записывается ничего
Ответить с цитированием
  #2 (permalink)  
Старый 18.06.2018, 19:11
Аспирант
Отправить личное сообщение для usa-1450 Посмотреть профиль Найти все сообщения от usa-1450
 
Регистрация: 10.01.2015
Сообщений: 31

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

Код:
$query = "INSERT INTO publications.classics(author,title,category,year,isbn) 
VALUES('".$author."','".$title."','".$category."','".$year."','".$isbn."')";
Странно, если вводить на русском к примеру в поле author выдает кракозябры если выводить базу в командной строке в MySQL, выдает просто знаки вопроса вместо русских символов.
Ответить с цитированием
  #3 (permalink)  
Старый 18.06.2018, 19:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

Кракозябры при выводе потому, что не указывается кодировка соединения.
Ответить с цитированием
  #4 (permalink)  
Старый 18.06.2018, 22:00
Аспирант
Отправить личное сообщение для usa-1450 Посмотреть профиль Найти все сообщения от usa-1450
 
Регистрация: 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);

	
?>
Данные отправляются но год который ввожу в поле, который совпадает с полем с таблицы не удаляется все поле почему то, вроде запрос правильный. Мне нужно чтобы удалилось все поле с таблицы которое соответствует году с таблицы с годом в поле в которое введу год.
Ответить с цитированием
  #5 (permalink)  
Старый 19.06.2018, 03:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

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

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

Изучая SQL, изучать его нужно вне отрыва от вопросов безопасности.
Ответить с цитированием
  #6 (permalink)  
Старый 24.06.2018, 19:22
Аспирант
Отправить личное сообщение для usa-1450 Посмотреть профиль Найти все сообщения от usa-1450
 
Регистрация: 10.01.2015
Сообщений: 31

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

if(isset($_POST['year'])){
$query = 'DELETE FROM publications.classics WHERE `year`=".$year."';
$result = mysqli_query($link,$query); 
}
Ответить с цитированием
  #7 (permalink)  
Старый 24.06.2018, 19:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

И сразу приучите себя не писать дырявый код.
Ответить с цитированием
  #8 (permalink)  
Старый 24.06.2018, 19:37
Аспирант
Отправить личное сообщение для usa-1450 Посмотреть профиль Найти все сообщения от usa-1450
 
Регистрация: 10.01.2015
Сообщений: 31

Так я ввожу это значение в поле и отправляю,а оно все равно не хочет удалять, детали на фото как отправляю форму и что ввожу.
Изображения:
Тип файла: png Снимок1.PNG (5.6 Кб, 1 просмотров)
Тип файла: jpg Снимок.jpg (17.0 Кб, 1 просмотров)

Последний раз редактировалось usa-1450, 24.06.2018 в 19:39.
Ответить с цитированием
  #9 (permalink)  
Старый 24.06.2018, 19:55
Аспирант
Отправить личное сообщение для usa-1450 Посмотреть профиль Найти все сообщения от usa-1450
 
Регистрация: 10.01.2015
Сообщений: 31

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

if(isset($_POST['year'])){
$query = 'DELETE FROM publications.classics WHERE `year` = "'.(int)$_POST['year'].'"';
$result = mysqli_query($link,$query); 
}
Ответить с цитированием
  #10 (permalink)  
Старый 24.06.2018, 20:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

if($year = (int)$_POST['year']) {
    $query = 'DELETE FROM publications.classics WHERE `year` = '.$year;
    ....
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax + PHP + MySQL MadChild AJAX и COMET 2 03.07.2013 17:14
PHP и MySQL добавление данных rudolfe Серверные языки и технологии 7 13.05.2013 14:18
Запуск php скрипта через ajax hagen3 AJAX и COMET 2 09.09.2011 03:51
JavaScript PHP MySQL массивы Володя Общие вопросы Javascript 4 13.02.2011 22:55
Как добавить элемент в XML через DOM используя PHP? bayah Серверные языки и технологии 6 11.08.2010 13:33