Не добавляются данные в БД

lospirata
На сайте с 24.12.2010
Offline
103
754

Соединяемся с БД.

Выбираем БД.

После чего код в одном файле:

<?php

if (@$submit) {
$result = mysql_query("INSERT INTO pages (name, title, description, keywords, text) VALUES ('".$_POST[name]."', '".$_POST[title]."', '".$_POST[description]."', '".$_POST[keywords]."', '".$_POST[text]."');");
}
?>

<form action="add_page.php" method="post">
<p>Название страницы:<br />
<input name="name" type="text" size="50" /></p>
<p>TITLE страницы:<br />
<input name="title" type="text" size="50" /></p>
<p>DESCRIPTION страницы:<br />
<input name="description" type="text" size="50" /></p>
<p>KEYWORDS страницы:<br />
<input name="keywords" type="text" size="50" /></p>
<p>Текст страницы:<br />
<textarea name="text" cols="80" rows="30" ></textarea></p>
<p><input name="submit" type="submit" value="Отправить" /></p>
</form>

При echo данные выводятся, а в базе ничего нет, почему?

It Can't Rain All the Time Блог вебмастера (https://lospirata.ru/)
ParserYa
На сайте с 04.10.2010
Offline
29
#1

Может кавычки просто надо для POST-параметров добавить:

$_POST['name']

Дмитрий
На сайте с 23.08.2006
Offline
199
#2

Попробуйте так:

if (isset($_POST['submit'])) {

$_POST = array_map('mysql_escape_string', $_POST);
$sql = sprintf('INSERT INTO `pages` (`name`, `title`, `description`, `keywords`, `text`) VALUES ("%s", "%s", "%s", "%s", "%s")', $_POST['name'], $_POST['title'], $_POST['description'], $_POST['keywords'], $_POST['text']);
$result = mysql_query($sql);
if (!$result) {
echo mysql_error();
}
}
Разрабатываю и автоматизирую на php http://jonnyb.ru/
lospirata
На сайте с 24.12.2010
Offline
103
#3
ParserYa:
Может кавычки просто надо для POST-параметров добавить:
$_POST['name']

Разные варианты пробовал, а так предпочитаю без кавычек, тоже вполне хорошо работает.

JonnyB:
Попробуйте так:
if (isset($_POST['submit'])) {
$_POST = array_map('mysql_escape_string', $_POST);
$sql = sprintf('INSERT INTO `pages` (`name`, `title`, `description`, `keywords`, `text`) VALUES ("%s", "%s", "%s", "%s", "%s")', $_POST['name'], $_POST['title'], $_POST['description'], $_POST['keywords'], $_POST['text']);
$result = mysql_query($sql);
if (!$result) {
echo mysql_error();
}
}

Спасибо, помогло, данные прекрасно записываются в базу. Не могли бы вы разъяснить причину, почему в исходном варианте не работало? Делал по этому примеру.

Дмитрий
На сайте с 23.08.2006
Offline
199
#4
lospirata:

Спасибо, помогло. Не могли бы вы разъяснить причину, почему в исходном варианте не работало? Делал по этому примеру.

Попробуйте закомментировать

$_POST = array_map('mysql_escape_string', $_POST);

Если перестанет добавляться, то дело в экранировании данных.

Если не перестанет - возможно name нужно было взять в `. По хорошему имена таблиц и столбцов нужно экранировать в апострофы.

LEOnidUKG
На сайте с 25.11.2006
Offline
1727
#5
✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Dreammaker
На сайте с 20.04.2006
Offline
570
#6
LEOnidUKG:
почитайте про взлом сайтов, через вашу форму

Статья, так сказать, классика http://phpfaq.ru/slashes

lospirata
На сайте с 24.12.2010
Offline
103
#7
JonnyB:
Попробуйте закомментировать

Да, так не работает. Выводит ошибку:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'content">

LEOnidUKG:
lospirata, почитайте про взлом сайтов, через вашу форму

Спасибо, почитаю.

LEOnidUKG
На сайте с 25.11.2006
Offline
1727
#8
lospirata:
Спасибо, почитаю.

Короче проще говоря, перед тем как, что-то пихать в базу, обязательно данные нужно обрабатывать:

1. Если данные только цифры должны быть то, например, убираем всё, кроме цифр:

$var=intval($_POST['textpole1']);

Ессесно для float значений, будет другое :)

2. Всё остальное проводим через функцию mysql_real_escape_string() т.е. пример:

$var2=mysql_real_escape_string($_POST['textpole2']);

И это обязательно, если хотите избежать проблем.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий