Построчная запись в БД из textarea

12
elitedesign
На сайте с 25.10.2012
Offline
69
1172

Друзья, переработал похоже, мозг не может простейший вопрос решить))

У меня в форме, отправляемой методом POST находится textarea. Задача, построчно прочесть $_POST['textarea'] и каждую строчку отдельно записать в БД.

Перед тем как записать в БД, на всякий случай хочу вывести на экран строчки чтобы убедиться что я все верно делаю:

$textarea = explode(PHP_EOL, trim($_POST['textarea']));
foreach($textarea as $line)
{
echo $line.'<br />';
}

Но на экране вместо нескольких строчек появляется все в одну строку. Пример: 11111111\r\n222222222\r\n333333333

Подскажите пожалуйста, где я затупил.

LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#1

$textarea = explode("\n", $_POST['textarea']);

foreach($textarea as $line)

{

echo trim($line).'<br />';

}

ещё лучше, если вам просто вывод:

$textarea=nl2br($_POST['textarea']);

echo $textarea;

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
elitedesign
На сайте с 25.10.2012
Offline
69
#2
LEOnidUKG:
$textarea = explode("\n", $_POST['textarea']);
foreach($textarea as $line)
{
echo trim($line).'<br />';
}

Спасибо! Сам понимаю что конструкция рабочая и также пробовал ее ранее. По прежнему вместо построчного вывода выдает результат:

111\r\n2222\r\n3333\r\n4444\r\n5555\r\n

Версия PHP 5.4.

LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#3

Чудес не бывает. Вы вообще физически не должны видеть: \n

Поэтому скорее всего там идёт обработка какая-то. Посмотрите исходный код страницы.

elitedesign
На сайте с 25.10.2012
Offline
69
#4
LEOnidUKG:
Чудес не бывает. Вы вообще физически не должны видеть: \n

Поэтому скорее всего там идёт обработка какая-то. Посмотрите исходный код страницы.

Полностью с Вами согласен. Нашел причину. Оказывается что предварительно все POST и GET переменные обрабатываются командой real_escape_string, после чего результат записывался в эти же самые переменные (надеюсь смог внятно объяснить).

Решил вопрос вот так:


$textarea = str_replace('\r\n', ',', $_POST['textarea']);
$textarea = explode(",", $textarea);
foreach($textarea as $line)
{
echo trim($line).'<br />';
}

Сразу все стало выводиться построчно

Sly32
На сайте с 29.03.2012
Offline
302
#5

elitedesign, А если в тексте попадется запятая?

LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#6
Оказывается что предварительно все POST и GET переменные обрабатываются командой real_escape_string,

Зачем?!

Перед добавлением и обрабатывайте каждую строчку. Обрабатывать POST и GET т.е. их менять это вообще неправильно.

S
На сайте с 30.09.2016
Offline
469
#7

Это на некоторых хостингах "безопасность" такая. 😂

Они по-другому не умеют, и думают, что так - супер.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#8
Sitealert:
Это на некоторых хостингах "безопасность" такая. 😂
Они по-другому не умеют, и думают, что так - супер.

Серьёзно такое есть на хостингах? Это же по сути может ломает CMS.

S
На сайте с 30.09.2016
Offline
469
#9
LEOnidUKG:
Серьёзно такое есть на хостингах?

Ну, не совсем такое. :) Я просто допустил, что ТС не совсем точно угадал насчёт причины экранирования, и на самом деле там работает magic_quotes_qpc.

MK
На сайте с 18.08.2005
Offline
126
#10
LEOnidUKG:
Серьёзно такое есть на хостингах? Это же по сути может ломает CMS.

Не про CMS. Но, как могут, защищаются. Например YII так.

/**

* Normalizes the request data.
* This method strips off slashes in request data if get_magic_quotes_gpc() returns true.
* It also performs CSRF validation if {@link enableCsrfValidation} is true.
*/
protected function normalizeRequest()
{
// normalize request
if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
{
if(isset($_GET))
$_GET=$this->stripSlashes($_GET);
if(isset($_POST))
$_POST=$this->stripSlashes($_POST);
if(isset($_REQUEST))
$_REQUEST=$this->stripSlashes($_REQUEST);
if(isset($_COOKIE))
$_COOKIE=$this->stripSlashes($_COOKIE);
}
if($this->enableCsrfValidation)
Yii::app()->attachEventHandler('onBeginRequest',array($this,'validateCsrfToken'));
}

имеет смысл юзать у себя

Про real_escape_string (если это не про get_magic_quotes_gpc) , это скорее всего где то выше mysqli объявили и сконнектились и заодно входящие данные зачистили. Так что не к хостингу вопрос.

нет
12

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