Помогите разобраться с одной непонятной проблемой в PHP-MySQL

12
O
На сайте с 24.07.2011
Offline
1
1500

Совсем непонятная проблема возникла у меня давно при создании сайта, не могу решить её уже три недели, с такими проблемами не сталкивался ло этого. Сейчас объясню саму проблему:

есть скрипт, данные на него отправляются через форму. Данные отправляются! Проверяю через команду echo.

Затем формируется mysql запрос:

$text = "UPDATE items SET header='$_POST['header']', text='$_POST['text']', sait='$_POST['sait']', moderated='0' WHERE id='$_POST['id']';";

Выполняется:

$result = mysql_query($text) or die("Query failed: " . mysql_error());

Ошибок mysql нет, но в таблице в строке с id = $_POST['id'], старые данные стёрты, а на их месте пустые значения.

Формируемую строку запроса проверял через "echo $text". Выводит правильную запись, наподобие

UPDATE items SET header='Заголовок в форме', text='Текст в форме', sait='сайт в форме', moderated='0' WHERE id='2';

Но в mysql в строке с id=2 всё становится пустым.

Самый прикол:

когда вставляю вместо

$text = "UPDATE items SET header='$_POST['header']', text='$_POST['text']', sait='$_POST['sait']', moderated='0' WHERE id='$_POST['id']';";

такой запрос

$text = "UPDATE items SET header='Такой заголовок', text='$_POST['text']', sait='$_POST['sait']', moderated='0' WHERE id='$_POST['id']';";

и затем выполняю его - в таблице с указанным id поле header имеет значение 'Такой заголовок', а все остальные поля пусты, хотя при выводе переменной $text всё такой же правильный запрос:

UPDATE items SET header='Такой заголовок', text='Текст в форме', sait='сайт в форме', moderated='0' WHERE id='2';

Подскажите пожалуйста в чём может быть проблема???

Кстати этот код обновления записи обрамлён так:

ob_start();

тут формирование запроса и его выполнение, а также формирование ответа html

$result = ob_get_contents();

ob_end_clean();

return $result;

www.job2biz.ru (http://www.job2biz.ru)
M
На сайте с 24.07.2011
Offline
0
#1
ochenbogatiy:


$text = "UPDATE items SET header='$_POST['header']', text='$_POST['text']', sait='$_POST['sait']', moderated='0' WHERE id='$_POST['id']';";

попроюуйте так (бОльшее внимание уделяйте ковычкам):

$text = "UPDATE `items` SET `header`='$_POST[header]', `text`='$_POST[text]', `sait`='$_POST[sait]', `moderated`='0' WHERE `id`='$_POST[id]' ";

сами ячейки обрамляйте апострофами, а переменные одинарными ковычками. Если Вы пытаетесь выполнить sait='$_POST['sait']', то ячейке sait задается значение '$_POST['

O
На сайте с 24.07.2011
Offline
1
#2
morgannn:
попроюуйте так (бОльшее внимание уделяйте ковычкам):

$text = "UPDATE `items` SET `header`='$_POST[header]', `text`='$_POST[text]', `sait`='$_POST[sait]', `moderated`='0' WHERE `id`='$_POST[id]' ";

сами ячейки обрамляйте апострофами, а переменные одинарными ковычками. Если Вы пытаетесь выполнить sait='$_POST['sait']', то ячейке sait задается значение '$_POST['

Обрамил я в кавычки ` - в итоге результат один и тот же.

Насчёт '$_POST[' - в переменную $text заносится значение в двойных кавычках "" поэтому такого не происходит, формируется правильная строка запроса с данными, отправленными через форму.

Кстати, ещё один может быть не маловажный момент. После отправки данных потом при нажатии кнопки обновить в браузере формируется всё тот же sql запрос, но на этот раз данные заносятся в таблицу. Почему же не заносятся с первого раза из переменных?

[umka]
На сайте с 25.05.2008
Offline
456
#3

$text = "UPDATE items SET header='".$_POST['header']."', text='".$_POST['text']."', sait='".$_POST['sait']."', moderated='0' WHERE id='".$_POST['id']."';";

Лог в помощь!
O
На сайте с 24.07.2011
Offline
1
#4

Спасибо за ответы, но вы ищете ошибку не там.

mysql запрос который присваивается переменной $text, формируется правильно. Я это проверяю через "echo $text", запрос правильный и никаких ошибок не возникает. здесь дело в чём то другом.

ещё раз акцентирую внимание. при нажатии кнопки обновить в браузере формируется тот же запрос, но данные в БД сохраняются! Ещё напомню, что включена буферизация

M
На сайте с 24.07.2011
Offline
0
#5
ochenbogatiy:

Насчёт '$_POST[' - в переменную $text заносится значение в двойных кавычках "" поэтому такого не происходит, формируется правильная строка запроса с данными, отправленными через форму.

как же она правильная если Вы пишете text='$_POST['text']' =)

morgannn добавил 24.07.2011 в 12:28

ochenbogatiy:
Спасибо за ответы, но вы ищете ошибку не там.

mysql запрос который присваивается переменной $text, формируется правильно. Я это проверяю через "echo $text", запрос правильный и никаких ошибок не возникает. здесь дело в чём то другом.

ещё раз акцентирую внимание. при нажатии кнопки обновить в браузере формируется тот же запрос, но данные в БД сохраняются! Ещё напомню, что включена буферизация

ну тогда сделайте так:

$text=$_POST[text];

...."UPDATE items SET text='$text'"...

и не заморачивайтесь!

O
На сайте с 24.07.2011
Offline
1
#6
как же она правильная если Вы пишете text='$_POST['text']' =)

Я такого не писал =)

ну тогда сделайте так:
$text=$_POST[text];

...."UPDATE items SET text='$text'"...

и не заморачивайтесь!

тоже делал - разницы никакой!

тем более что при обновлении страницы мой код уже работает. я думаю тут дело в чём-то другом

LovelAss
На сайте с 05.06.2009
Offline
96
#7
ochenbogatiy:
тем более что при обновлении страницы мой код уже работает. я думаю тут дело в чём-то другом

Вы бы весь код сюда выложили и не парили людям мозги. Гадание на кофейной гуще здесь вряд ли поможет.

Ragnarok
На сайте с 25.06.2010
Offline
239
#8

!!!111

Почему никто до сих пор не сказал об опасносте вставки неэкранированного $_POST в mysql запрос ??

$text = "UPDATE items SET header='".mysql_real_escape_string($_POST['header'])."', text='".mysql_real_escape_string($_POST['text'])."', sait='".mysql_real_escape_string($_POST['sait'])."', moderated='0' WHERE id='".(int)$_POST['id']."';";

//TODO: перестать откладывать на потом
O
На сайте с 24.07.2011
Offline
1
#9

собственно код

файл index.php

<?

include('functions.php');

if ($_GET['write'])

$result = writerecord();

?>

<html>

<head>

...

</head>

<body>

<?=$result ?>

<form action="<? echo $_SERVER['PHP_SELF'];?>?write=1&id=2" method="post">

Заголовок:<input type="text" name="header" value="" size="80">

Текст:<textarea cols=50 rows=15 name="text"></textarea>

Сайт:<input type="text" name="sait" size="30" value="">

<input type="submit" name="change" value="Сохранить"></form>

</body>

</html>

файл functions.php

<?

function writerecord()

{

ob_start();

$header = $_POST['header'];

$txt = mysql_escape_string($_POST["text"]);

$sait = mysql_escape_string($_POST['sait']);

$id = intval($_POST['id']);

$text = "UPATE `saits` SET `header`='$header', `text`='$txt', `sait`='$sait' WHERE `id`='$id';";

$r = mysql_query($text) or die("Query failed: " . mysql_error());

$result = ob_get_contents();

ob_end_clean();

return $result;

}

?>

LovelAss
На сайте с 05.06.2009
Offline
96
#10

Файл index.php

<?

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

include_once('functions.php');
$result = writerecord();

}
?>
<html>
<head>
<title>Скрипт</title>
</head>
<body>
<?=$result;?>

<form action="" method="post">
<input type="hidden" name="write" value="1">
<input type="hidden" name="id" value="2">
<p>Заголовок:<br> <input type="text" name="header" value="" size="80"></p>
<p>Текст:<br> <textarea cols=50 rows=15 name="text"></textarea></p>
<p>Сайт:<br> <input type="text" name="sait" size="30" value=""></p>
<p><input type="submit" value="Сохранить"></p>
</form>

</body>
</html>

Файл functions.php

<?

function writerecord() {

$header = $_POST['header'];
$txt = mysql_escape_string($_POST["text"]);
$sait = mysql_escape_string($_POST['sait']);
$id = intval($_POST['id']);

$query = "UPDATE `saits` SET `header`='$header', `text`='$txt', `sait`='$sait' WHERE `id`='$id';";
$result = mysql_query($query);

if (!$result) $result = "<p><span style='color:red;'>Ошибка: ".mysql_error()."</span><br><b>Запрос: ".$query."</b></p>";

return $result;

}
?>
12

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