Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2018, 18:58   #1
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 70
По умолчанию Не вставляется запись в 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:16   #2
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 70
По умолчанию

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

Код:
$query = "INSERT INTO publications.classics(author,title,category,year,isbn) 
VALUES('".$author."','".$title."','".$category."','".$year."','".$isbn."')";
Странно, если вводить на русском к примеру в поле author выдает кракозябры если выводить базу в командной строке в MySQL, выдает просто знаки вопроса вместо русских символов.
usa-1450 вне форума Ответить с цитированием
Старый 18.06.2018, 20:54   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

а это милок - кодировка называется, поизучай, там много нюансов
ну и еще стандартные советы:
1) SQL Injection - нет защиты, ломается на раз-два, в любое поле введите например: Д'ртаньян
2) расширение mysql_ устарело, используйте хотя-бы mysqli_ или PDO
ADSoft вне форума Ответить с цитированием
Старый 18.06.2018, 22:03   #4
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 70
По умолчанию

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

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

	
?>
Данные отправляются но год который ввожу в поле, который совпадает с полем с таблицы не удаляется все поле почему то, вроде запрос правильный. Мне нужно чтобы удалилось все поле с таблицы которое соответствует году с таблицы с годом в поле в которое введу год.
usa-1450 вне форума Ответить с цитированием
Старый 18.06.2018, 22:43   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Как найти ошибку в своем коде?
Экранируй название поля обратными кавычками `year` – т.к. оно относится к keywords and reserved words in MySQL.
Andkorol вне форума Ответить с цитированием
Старый 18.06.2018, 22:45   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от usa-1450 Посмотреть сообщение
который совпадает с полем с таблицы не удаляется все поле почему то, вроде запрос правильный
так запрос же надо выполнить:
Код:
if(isset($_POST['year'])){
  $query = 'DELETE FROM publications.classics WHERE `year`=".$year."';
  $result = mysqli_query($link,$query); 
}
ну, конечно, поля из формы ОБЯЗАТЕЛЬНО нужно экранировать.
например:
Код:
if(isset($_POST['year'])){
  $year = mysqli_real_escape_string($link, $year);  
  $query = 'DELETE FROM publications.classics WHERE `year`=".$year."';
  $result = mysqli_query($link,$query); 
}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.06.2018, 19:25   #7
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 70
По умолчанию

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

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

usa-1450 вне форума Ответить с цитированием
Старый 24.06.2018, 19:32   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

PHP код:
$query 'DELETE FROM publications.classics WHERE `year` = "' . (int)$year '"'
Andkorol вне форума Ответить с цитированием
Старый 24.06.2018, 19:40   #9
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 70
По умолчанию

Если написать так:

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

Выдает:

Код:
Notice: Undefined variable: year in C:\Server\data\htdocs\virthosts\test.ru\form.php
usa-1450 вне форума Ответить с цитированием
Старый 24.06.2018, 19:53   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
if(isset($_POST['year'])){
$query = 'DELETE FROM publications.classics WHERE `year` = "'.(int)$_POST['year'].'"';
$result = mysqli_query($link,$query); 
}
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запросы к MySQL через PHP C# AlphaShaq C# (си шарп) 0 28.12.2017 09:23
Не записует в MySQL через PHP sporthpk Помощь студентам 0 21.08.2017 21:46
не записываются данные в mysql через php impeee PHP 8 08.04.2014 09:47
Добавить запись в MySQL. Apache. PHP. ViNcHeStEr PHP 3 11.08.2012 11:29
Запись из Delphi в БД MySQL через DirectMysqlObjects Demien БД в Delphi 1 21.01.2010 18:53