Из формы в базу записываю некую строку с апостофом
использую mysql_real_escape_string($_POST['NAME'])
Из базы вывожу и присваиваю значение в другую форму
Проверяю ХТМЛ, вижу лишние кавачки, форма естественно не работает.
Спустя 2 часа, 34 минуты, 59 секунд (22.03.2011 - 07:55) Белый Тигр написал(а):
Перед выводом в форме или перед записью в БД
htmlspecialchars($str, ENT_QUOTES)
Спустя 1 час, 13 минут, 47 секунд (22.03.2011 - 09:09) Trianon написал(а):
sebastjan
проверьте значение сразу после получения из первой формы.
Скорее всего у Вас включен режим magic_quotes_gpc, искажающий данные уже на входе php.
Сравните значения до mysql_real_escape_string и после извлечения из БД. Наверняка они окажутся одинаковыми. А значит начиная от вызова mysql_real_escape_string() и завершая получением данных от MySQL-серера - логика обработки нигде не нарушена.
проверьте значение сразу после получения из первой формы.
Скорее всего у Вас включен режим magic_quotes_gpc, искажающий данные уже на входе php.
Сравните значения до mysql_real_escape_string и после извлечения из БД. Наверняка они окажутся одинаковыми. А значит начиная от вызова mysql_real_escape_string() и завершая получением данных от MySQL-серера - логика обработки нигде не нарушена.
Спустя 1 час, 33 минуты, 10 секунд (22.03.2011 - 10:42) sebastjan написал(а):
Цитата (Trianon @ 22.03.2011 - 06:09) |
sebastjan проверьте значение сразу после получения из первой формы. Скорее всего у Вас включен режим magic_quotes_gpc, искажающий данные уже на входе php. Сравните значения до mysql_real_escape_string и после извлечения из БД. Наверняка они окажутся одинаковыми. А значит начиная от вызова mysql_real_escape_string() и завершая получением данных от MySQL-серера - логика обработки нигде не нарушена. |
В файле РНР.ini стоит magic_quotes_gpc=Off
Буду смотреть что на входе и на выходе
Спустя 18 минут, 17 секунд (22.03.2011 - 11:00) sebastjan написал(а):
Проверяю что на выходе из базы , всё нормально если просто echo
Проверяю что в форме, а там двойные кавычки value="" mmmmmmm'=""
Поставил перед выводом в форму htmlspecialchars
Ничего не изменилось.
В чём проблемма не пойму?
Проверяю что в форме, а там двойные кавычки value="" mmmmmmm'=""
Поставил перед выводом в форму htmlspecialchars
Ничего не изменилось.
В чём проблемма не пойму?
Спустя 5 минут, 57 секунд (22.03.2011 - 11:06) Trianon написал(а):
Цитата |
Проверяю что на выходе из базы , всё нормально если просто echo |
Значит дело не в БД?
Цитата |
Проверяю что в форме, а там двойные кавычки value="" mmmmmmm'="" |
Исправляйте код, который форму генерирует.
Спустя 1 час, 1 минута, 56 секунд (22.03.2011 - 12:08) sebastjan написал(а):
Не нахожу ошибку?
Вот код
Проверял ,когда без апострофа в ХТМЛ всё коректно, стоит ввести апостроф, появляються двойные кавычки
Может я как то неправильно форму генерирую?
Вот код
echo "
<form action='{$_SERVER['HTTP_REFERER']}' method='post'>
<div class='zag-art'><input name='zagol' type='hidden' value='".($row['name'])."'>".htmlspecialchars($row['name'])."</div>
</form>";
Проверял ,когда без апострофа в ХТМЛ всё коректно, стоит ввести апостроф, появляються двойные кавычки
Может я как то неправильно форму генерирую?
Спустя 6 минут, 52 секунды (22.03.2011 - 12:15) Michael написал(а):
htmlspecialchars надо также к тому где value=, к первому у тебя.
Спустя 11 минут, 13 секунд (22.03.2011 - 12:26) sebastjan написал(а):
Цитата (Michael @ 22.03.2011 - 09:15) |
htmlspecialchars надо также к тому где value=, к первому у тебя. |
Извеняюсь, вот точный код
Не получаеться исправить, где то ошибка а где не пойму.
echo "
<form action='{$_SERVER['HTTP_REFERER']}' method='post'>
<div class='zag-art'><input name='zagol' value='".htmlspecialchars($row['name'])."'>".htmlspecialchars($row['name'])."</div>
<input name='delet' type='submit' value='delet'>
</form>";
Спустя 1 час, 10 минут, 13 секунд (22.03.2011 - 13:36) inpost написал(а):
sebastjan
И что вывелось? Покажи исходный код страницы (этот участок).
И что вывелось? Покажи исходный код страницы (этот участок).
Спустя 27 минут, 54 секунды (22.03.2011 - 14:04) Белый Тигр написал(а):
mysql_real_escape_string() только экранирует кавычки перед помещением в БД. В самой БД они уже в чистом виде лежат. Естественно вы их извлекаете и получаете конфликт в html-коде. Кто их для html то обрабатывать будет? Почитайте пожалуйста внимательно http://www.php.ru/manual/function.htmlspecialchars.html (это типа тонкий намёк об ознакомлении с ENT_QUOTES)
P.S. Написал ведь всё в первом сообщении, что помешало проверить?
P.S. Написал ведь всё в первом сообщении, что помешало проверить?
Спустя 53 минуты, 43 секунды (22.03.2011 - 14:58) sebastjan написал(а):
Проблемму решил,только как то горбато и не понятно про одинарные и двойные кавычки
Вот так не работало
А вот так работает
При генерации формы все элементы в одинарных кавычках
старый код
Новый код
Вот так не работало
value=' ".htmlspecialchars($row['name'])." '
А вот так работает
value=\"".htmlspecialchars($row['name'])."\"
При генерации формы все элементы в одинарных кавычках
старый код
echo "
<form action='{$_SERVER['HTTP_REFERER']}' method='post'>
<div class='zag-art'><input name='zagol' value='".htmlspecialchars($row['name'])."'>".htmlspecialchars($row['name'])."</div>
<input name='delet' type='submit' value='delet'>
</form>";
Новый код
<form action='".$_SERVER['HTTP_REFERER']."' method='post'>
<input name='kategorija' type='hidden' value='".$_GET['artikel']."'>
<input name='zagol' value=\"".htmlspecialchars($row['name'])."\"><div class='zag-art'>".htmlspecialchars($row['name'])."</div>
<input name='delet' type='submit' value='delet'>
</form>
Спустя 3 минуты, 59 секунд (22.03.2011 - 15:02) Michael написал(а):
Цитата (sebastjan) |
При генерации формы все элементы в одинарных кавычках |
из-за этого все и проблемы у тебя, т.к. по умолчанию htmlspecialchars($s) одинарные не обрабатывает, нужно:
htmlspecialchars($s, ENV_QUOTES)
Спустя 1 минута, 11 секунд (22.03.2011 - 15:03) sebastjan написал(а):
Да мне всёж не очень то понятно, выше я привёл два варианта, как я понял дело одинарной и двойной кавычке при генерации формы.
Наткнулся чисто методом тыка.
Но не очень понимаю разницу.
Всё остальное типа магических кавычек не при чём, проверил ,магические кавычки отключенны.
Наткнулся чисто методом тыка.
Но не очень понимаю разницу.
Всё остальное типа магических кавычек не при чём, проверил ,магические кавычки отключенны.
Спустя 4 минуты, 15 секунд (22.03.2011 - 15:07) sebastjan написал(а):
Спасибо Michael, внимательно прочёл, теперь поняитно
Спустя 19 минут, 55 секунд (22.03.2011 - 15:27) inpost написал(а):
sebastjan
Заглянул бы ко мне в подписи, то увидел, что я рекомендую выводить так:
Заглянул бы ко мне в подписи, то увидел, что я рекомендую выводить так:
echo ' // одинарные!
<input type="text" value="" /> - а тут уже двойные
<input type="text" value="'.htmlspecialchars($var).'" /> - а вот так переменную вставляем =)
';
Спустя 1 день, 1 час, 18 минут, 25 секунд (23.03.2011 - 16:46) sebastjan написал(а):
Цитата (inpost @ 22.03.2011 - 12:27) |
sebastjan Заглянул бы ко мне в подписи, то увидел, что я рекомендую выводить так: echo ' // одинарные! |
Если не затруднит поясни в двух словах какая разница?
Ты рекомендуешь ставить первыую и последнею кавычку одинарную, а почему тогда не всё в двойную, какая в этом разница?
Спустя 41 минута, 43 секунды (23.03.2011 - 17:27) inpost написал(а):
sebastjan
w3c стандарты требуют использования двойных для свойств тегов HTML, если делаешь двойную, тогда тебе прийдется внутри каждую кавычку экранизировать, так проблем не будет вообще. Кстати, вот из-за того, что ты использовал в самом начале неправильные кавычки для свойств тега и была проблема, как видишь, w3c стандарты не ошибаются.
Разница в коде, читай:
Есть единственная проблема, что переносы \n\r необходимо писать в двойных, поэтому как альтернативу предлагаю:
Но так как переносы очень редко когда кто ставит при выведении данных через PHP, поэтому это так не существенно.
Вывести форму, если почитаешь внимательнее последнюю мою ссылку можно куда более простым способом, это способствует не только удобству восприятия, но и лучшей производительности и разделения логики на PHP и представления на HTML (модель MVC). Показываю на примере с условием:
w3c стандарты требуют использования двойных для свойств тегов HTML, если делаешь двойную, тогда тебе прийдется внутри каждую кавычку экранизировать, так проблем не будет вообще. Кстати, вот из-за того, что ты использовал в самом начале неправильные кавычки для свойств тега и была проблема, как видишь, w3c стандарты не ошибаются.
Разница в коде, читай:
echo '<input type="submit" value="submit" />';
echo "<input type=\"submit\" value=\"submit\" />"; // заметь, без экранизации всё выглядет удобнее.
Есть единственная проблема, что переносы \n\r необходимо писать в двойных, поэтому как альтернативу предлагаю:
$n = "\n\r";
echo '<input type="submit" value="submit" />'.$n;
echo '<input type="submit" value="submit" />'."\r\n";
Но так как переносы очень редко когда кто ставит при выведении данных через PHP, поэтому это так не существенно.
Вывести форму, если почитаешь внимательнее последнюю мою ссылку можно куда более простым способом, это способствует не только удобству восприятия, но и лучшей производительности и разделения логики на PHP и представления на HTML (модель MVC). Показываю на примере с условием:
<?php if($a = $b) { ?>
<form action="" method="post">
<input type="text" value="<?php echo htmlspecialchars($text); ?>" />
</form>
<?php } else { ?>
<form action="lalala.php" method="get">
TRALALA
</form>
<?php } ?>
Спустя 18 минут, 29 секунд (23.03.2011 - 17:46) sebastjan написал(а):
Спасибо за разяснение, стало понятно.
По поводу разделения логики и ХТМЛ ,всё переделываю у себя.
По поводу разделения логики и ХТМЛ ,всё переделываю у себя.