Проблема при UPDATE

4bia

Новичок
Здравствуйте! Возникла такая проблема:

Есть таблица discussions с полями id (int), discuss (text) и другими полями. Есть скрипт для изменения значения поля discuss, состоящий из формы, значение которой отправляется дальше по скрипту через POST, где выполняется sql-запрос.

Код выглядит так:

PHP:
$text = mysql_real_escape_string($_POST[text]);

$query = "UPDATE discussions SET `discuss`='$text' WHERE id=$_GET[id]";
$result = mysql_query($query) or die(mysql_error());
Что при этом происходит - $_POST[text] передаётся, соответственно, с $text всё в порядке, но поле discuss в таблице становится пустым, что не отправляй в форму. Если сделать $text = "test", всё работает как часы. Если сделать SET `text`='test', всё тоже работает как часы. Т.е., с базой данных всё в порядке, с переменными всё по-видимому тоже в порядке. В чём же тогда проблема?
 

4bia

Новичок
Выводится следующее:

PHP:
UPDATE discussions SET `discuss`='

test
' WHERE id=12
Видимо дело в переносе строки. Подскажите пожалуйста, как правильно воспользоваться trim(), чтобы избавиться от этого? Или тут нужна другая функция? Потому что просто trim($text) не помогает.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
И ошибок нигде нет?
Особенно от $_POST[text] и $_GET[id]?
 

4bia

Новичок
С переносом строки и trim() я сглупил - они тут не причем.

Но всё равно какая-то ерунда, как такое может быть, что если сделать $text = $_POST[text], то поле становится просто пустым, а если сделать $text = "test", то всё работает? =/
 

4bia

Новичок
В общем, решил всё костылём - сделал внешний скрипт, в котором тот же код работает без проблем, если не инклудить его через index.php. Дебаг ничего не дал, никаких конфликов, ошибок в переменных и т.п. не нашлось. Всем спасибо.
 

Фанат

oncle terrible
Команда форума
А что на самом деле должен был сделать послушный пионер
1. набрать в браузере адрес mysql_real_escape_string
2. Прочитать в открывшемся, ка по волшебству окошке
Если соединение не было найдено и не смогло быть создано, генерируется ошибка уровня E_WARNING.
Возвращает строку, в которой экранированы все необходимые символы, или FALSE в случае ошибки.
 

4bia

Новичок
А что на самом деле должен был сделать послушный пионер
1. набрать в браузере адрес mysql_real_escape_string
2. Прочитать в открывшемся, ка по волшебству окошке
mysql_real_escape_string тут не при чем, я проверял. Хоть с ним, хоть без него строка изменяется на пустую.
 

Фанат

oncle terrible
Команда форума
Как ты проверял - мы видели.
Вывести проблемный запрос на экран и посмотреть его глазами так и не осилил.
Что уж про остальные проверки говорить.
 

4bia

Новичок
Как ты проверял - мы видели.
Вывести проблемный запрос на экран и посмотреть его глазами так и не осилил.
Что уж про остальные проверки говорить.
Выводится следующее:

PHP:
UPDATE discussions SET `discuss`='

test
' WHERE id=12
Вполне осилил. Разницы между запросами нет.
 

Фанат

oncle terrible
Команда форума
этот запрос прекрасно записывает значение в базу.
 

Фанат

oncle terrible
Команда форума
Я ж указал
Вывести проблемный запрос на экран и посмотреть его глазами
Ключевое слово - проблемный.
Т. е. не какой-то левый запрос, а тот самый, который якобы ничего в базу не записывает.
 

4bia

Новичок
Я ж указал

Ключевое слово - проблемный.
Т. е. не какой-то левый запрос, а тот самый, который якобы ничего в базу не записывает.
Я сделал следующее - изменил в запросе SET `discuss`='$text' и вывел запрос, получил следующее:

PHP:
UPDATE discussions SET `discuss`='test' WHERE id=12
.

Затем изменил в запросе SET 'discuss`='test' и снова вывел запрос, получил тот же самый текст. Но при этом первый запрос оставил поле пустым, а второй сработал нормально.
 

Фанат

oncle terrible
Команда форума
Как видишь, запросы получаются одинаковые.
Поскольку одинаковые запросы не могут работать по-разному, то у тебя проблемы с логикой - что и требовалось доказать.
Плюс, получается, что из $_POST все добавляется прекрасно.

Попробуй, все-таки, собраться, и написать тест хоть один раз без ошибок.
И всякие "волшебные" исчезновения текста исчезнут сами.

После того, как с помощью логики ты убедишься, что все твои домыслы не имеют оснований - обрати внимание на правила использования mysql_real_escape_string
 
Сверху