Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

Код:

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

Странно, если вводить на русском к примеру в поле author выдает кракозябры если выводить базу в командной строке в MySQL, выдает просто знаки вопроса вместо русских символов.
usa-1450 вне форума   Ответить с цитированием
Старый 18.06.2018, 21:54   #3
ADSoft
Профессионал
 
Регистрация: 25.02.2007
Адрес: Татарстан
Сообщений: 3,203
Репутация: 896

icq: 303-206-418
skype: ad-soft.info
По умолчанию

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

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

Попробовал модернизировать код, в таблице которая была описана выше есть разные года в поле 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, 23:43   #5
Andkorol
Профессионал
 
Регистрация: 31.05.2010
Сообщений: 3,266
Репутация: 1064
По умолчанию

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

Цитата:
Сообщение от 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, 20:25   #7
usa-1450
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 25
Репутация: 10
По умолчанию

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

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

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

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

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

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, 20:53   #10
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,899
Репутация: 5228
По умолчанию

Код:

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

Serge_Bliznykov на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запросы к MySQL через PHP C# AlphaShaq C# (си шарп) 0 28.12.2017 10:23
Не записует в MySQL через PHP sporthpk Помощь студентам 0 21.08.2017 22: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 19:53


12:02.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru