2016-09-16 4 views
0

Это, наверное, действительно глупо, но я пытаюсь сохранить контент из texarea в MySQL с PHP. Обычно новые строки сохраняются в базе данных. Но внезапно их удаляют.PHP сохранить контент из textarea с помощью новой строки

Я использую JQuery, чтобы отправить значения в PHP с AJAX, а затем я делаю это в PHP:.

$var = strip_tags($_POST["var"]); 
$db->query("UPDATE table SET var='$var' WHERE id=$id") 

Как-то переводы строк теряются на пути в случае, если я nl2br на вар, то они переведены на <br/>, поэтому $ var содержит новую строку вплоть до запуска запроса.

Обновление, чтобы добавить к странности. Если я действительно запускаю nl2br на $ var, а затем заменяю br-теги на новую строку, перед обновлением таблицы все хорошо, что происходит?!?

Это работает просто отлично:

$var = strip_tags($_POST["var"]); 
$var = nl2br($var);  
$var = preg_replace('#<br\s*/?>#i', "\n", $var); 
$db->query("UPDATE table SET var='$var' WHERE id=$id"); 
+0

ли вам:. http://php.net/manual/en/mysqli.real-escape-string.php

что означает, удаляются следующие см. новые строки в самой базе данных? Может быть, вы должны использовать nl2br на стороне рендеринга. –

+0

use nl2br. like $ var = nl2br (strip_tags ($ _POST ["var"])); –

+0

Нет Я не вижу новые строки в базе данных. И если я запустил nl2br на стороне рендеринга, то не появятся
. – johnohod

ответ

0

У меня был еще один взгляд на Zebra (исходный код на этот раз), и, как упоминалось в предыдущем комментарии, именно поэтому новые строки удаляются. Метод побег из пакета Zebra использует: NUL (ASCII 0), \ п, \ г, \,»,» и Control-Z

0

Вы могли бы попытаться добавить вход в систему:

<pre></pre> 

Это позволит сохранить введенные данные, как предварительно отформатированный текст в базе данных.

Ссылка: https://www.w3.org/wiki/HTML/Elements/pre

nl2br является хорошим решением тоже использование какой вы предпочитаете. Также убедитесь, что вы используете правильную конфигурацию для столбца базы данных. Это должен быть VARCHAR или TEXT.

+0

Это не решит проблему. Моя проблема в том, что \ n удаляется при сохранении. Я не хочу сохранять html вместе с текстом. – johnohod

0

Я думаю, ваша проблема в том, что новые строки удаляются перед тем, как их передать на сервер.

Вы упомянули, что его отправляют с помощью jQuery, поэтому перед отправкой на сервер убедитесь, что на клиентской стороне нет никакой обработки на стороне клиента.

+0

Странным является то, что если я выполняю nl2br ($ var) перед запуском запроса, тогда я получаю
-tags. Так что мне интересно, удаляются ли новые строки, когда я действительно запускаю запрос? Я использую оболочку Zebra_database. Если я, например. перейдите в PhpMyAdmin и отредактируйте текст, затем символы новой строки сохраняются. Таким образом, нет ничего плохого в базе данных или типе данных. – johnohod

+0

Я быстро просмотрел документы Zebra, и кажется, что метод update() вызывает escape(), который: «Escapes специальные символы в строке, которая должна использоваться в инструкции SQL, чтобы предотвратить инъекции SQL. Этот метод также включает заданную строку в одинарные кавычки! " http://stefangabos.ro/wp-content/docs/Zebra_Database/Zebra_Database/Zebra_Database.html#methodescape Так вот почему ваши новые строки удаляются. –

+0

Ага, у меня было ощущение, что это будет проблемой, не так давно я переключился на Zebra_database. Интересно, что такое лучшая практика, чтобы перенести разрывы строк? – johnohod

0

Если вы ОК с помощью команды SQL, которая распространяется на несколько строк, то предложение Оэдо является самым простым:

INSERT INTO mytable (myfield) VALUES ('hi this is some text 
and this is a linefeed. 
and another'); 

Я просто была ситуация, когда это было желательно иметь заявление SQL все на одном , поэтому я обнаружил, что для меня работала комбинация CONCAT_WS() и CHAR().

INSERT INTO mytable (myfield) VALUES (CONCAT_WS(CHAR(10 using utf8), 'hi this is some text', 'and this is a linefeed.', 'and another')); 
+0

Пожалуйста, прочитайте сообщение. У меня нет проблем с отображением \ n, проблема связана с хранением их как \ n в базе данных. – johnohod

+0

Извините за недоразумение, пожалуйста, проверьте вышеуказанное решение. –

 Смежные вопросы

  • Нет связанных вопросов^_^