Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
DyadyaGe
11 / 8 / 3
Регистрация: 04.04.2019
Сообщений: 96
1

Добавить в textarea данные из нескольких форм последовательно

13.06.2019, 20:52. Просмотров 210. Ответов 12
Метки нет (Все метки)

Вроде и простая задача, но толи жара сказывается, толи жара - это жалкое оправдание...
Необходимо в textarea вставлять данные из нескольких форм последовательно. Просто проверка isset($_POST[]) и дальнейшая распечатка echo данных в textarea срабатывает, но перезатирает друг друга. А нужно, чтоб все данные из разных форм оставались друг за дружкой.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2019, 20:52
Ответы с готовыми решениями:

С помощью процедуры AddRightDigit(D, K) последовательно добавить к данному числу K справа данные цифры D1 и D2
Описать процедуру AddRightDigit(D, K), добавляющую к целому положительному числу K справа цифру D...

Заполнение нескольких форм используя данные из таблицы mysql
Есть форма, в ней несколько полей для ввода, куда можно вручную вводить данные. Также должна...

Как заполнять данные текущей записи в одну таблицу из нескольких форм
Добрый день, друзья! У меня стоит очень интересная задача, для кого-то может и легкая, но я не...

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

Отсылка форм на сервер из программы - проблема с TEXTAREA
Привет! Есть следующий код, котоpый должен заполнять на веб-сеpвеpе фоpму и отсылать ее обpатно...

12
Строитель
488 / 322 / 141
Регистрация: 09.07.2018
Сообщений: 862
13.06.2019, 21:57 2
DyadyaGe, вроде бы так (если что - подправите как вам нужно)
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 
session_start();
 
$view = &$_SESSION['view'] ?? null;
 
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    ! isset($_POST['clear']) ?: $view = null;
    $view = $view . $_POST['view'] . PHP_EOL;
    header('Location: ' . basename(__FILE__));
    exit;
}
 
?>
 
<form method="post">
    <textarea rows="10" cols="45" name="view"><?=$view?></textarea>
    <br><input type="submit" value="Добавить">
    <input type="submit" value="Очистить" name="clear">
</form>
1
DyadyaGe
11 / 8 / 3
Регистрация: 04.04.2019
Сообщений: 96
14.06.2019, 00:16  [ТС] 3
Цитата Сообщение от Строитель Посмотреть сообщение
вроде бы так (если что - подправите как вам нужно)
Честно говоря, даже не думал про сессии, да и не особо их изучал.
По идее в вашем примере нужно было прописать имя файла и добавить проверку на нажатие клавиши. Сделал так (ещё добавил имя для первого инпута):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
 
session_start();
 
$view = &$_SESSION['view'] ?? null;
 
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    ! isset($_POST['clear']) ?: $view = null;
    $view = $view . $_POST['view'] . PHP_EOL;
    header('Location: ' . basename('file.php'));  //лежит в корне, хотя рад интереса оставлял и так, как в вашем примере _FILE_
    exit;
}
 
if (isset($_POST['plus'])){echo $_POST['plus'];}
if (isset($_POST['clear'])){echo $_POST['clear'];}
?>
 
<form method="post">
    <textarea rows="10" cols="45" name="view"><?=$view?></textarea>
    <br><input type="submit" value="Добавить" name="plus">
    <input type="submit" value="Очистить" name="clear">
</form>
Но добавляются пустые строки, хотя по идее должно было бы печатать слова "Добавить" и "Очистить". Клавиша "Очистить" вообще не срабатывает вроде бы. По крайней мере из textarea пустые строки не удаляются. Приходится все выделять и удалять. Пробовал другие кнопки прикрутить с проверкой isset и без, но не помогает. Пробовал удалить и эту проверку
PHP
1
2
if (isset($_POST['plus'])){echo $_POST['plus'];}
if (isset($_POST['clear'])){echo $_POST['clear'];}
Но результат вроде бы тот же самый - добавляются пустые строки, естественно сразу после загрузки (обновления) страницы.
При проверке var_dump выдает следующее предупреждение (замечание, что функция уже работает)
PHP
1
2
Notice: session_start(): A session had already been started - ignoring 
bool(true)
0
DyadyaGe
11 / 8 / 3
Регистрация: 04.04.2019
Сообщений: 96
15.06.2019, 21:09  [ТС] 4
Цитата Сообщение от Строитель Посмотреть сообщение
вроде бы так (если что - подправите как вам нужно)
Не могу сказать, что полностью разобрался, но в общих чертах более-менее. Пример ваш работает, просто нужно было все имена под свои переделать, и было очень удивительно, что данные выводятся без привычных echo и print, и только потом обратил внимание, как переменная $view вызывается в форме. Пока работает в таком виде:
PHP
1
2
3
4
5
6
7
8
9
session_start();
$view = &$_SESSION['view'] ?? null;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    ! isset($_POST['clear']) ?: $view = null;
    $view = $view . $_POST['plus'] . $_POST['plus1']; //  PHP_EOL убрал, чтоб было в одну строку;
    header('Location: ' . basename('file.php'));  
    exit;
}
//session_destroy();
HTML5
1
2
3
4
5
6
7
<form method="post">
    <textarea rows="10" cols="45" name="dream"><?=$view?></textarea>
    <br><input type="submit" value="Добавить" name="plus">
<br><input type="submit" value="Напечатать" name="plus1">
    <input type="submit" value="Очистить" name="clear">
</form>
</p>
Но видимо нужно было сразу сказать о дополнительной хотелке. Хотелось, чтоб на ряду с данными из форм вводились и данные с клавиатуры. А в этом варианте они затираются. Если развивать направление с сессиями, то я пробовал перебирать массив
PHP
1
2
3
    foreach ($_POST AS $key => $value) {
    $_SESSION['post'][$key] = $value;
     }
Но при этом объединить в строку потом не получалось:
PHP
1
2
print_r($_SESSION);  // хотя вот тут печатало все данные и введенные с клавиатуры, и введенные из формы
echo implode(',',$_SESSION); // а вот тут выдает ошибку, нельзя преобразовать массив в строку
Предупреждение:
PHP
1
<b>Notice</b>:  Array to string conversion in
0
15.06.2019, 21:09
Строитель
488 / 322 / 141
Регистрация: 09.07.2018
Сообщений: 862
Вчера, 09:31 5
Цитата Сообщение от DyadyaGe Посмотреть сообщение
print_r($_SESSION); *// хотя вот тут печатало все данные и введенные с клавиатуры, и введенные из формы
echo implode(',',$_SESSION); // а вот тут выдает ошибку, нельзя преобразовать массив в строку
Распечатайте print_r($_SESSION); и опубликуйте здесь его вывод, что бы видеть структуру массива.
0
DyadyaGe
11 / 8 / 3
Регистрация: 04.04.2019
Сообщений: 96
Вчера, 15:55  [ТС] 6
Цитата Сообщение от Строитель Посмотреть сообщение
Распечатайте print_r($_SESSION); и опубликуйте здесь его вывод, что бы видеть структуру массива
вот:
PHP
1
2
3
4
5
Array ( [abrval] => Array ( [dream] =>
Notice: Array to string conversion  on line 12
Array это я пробую печатать с клавиатуры [plus] => Array ( [2] => Напечатать ) ) ) Array ( [abrval] => Array ( [dream] =>
Notice: Array to string conversion  12
Array это я пробую печатать с клавиатуры [plus] => Array ( [1] => Добавить ) ) )
вот сам код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
//теритй вариант
session_start();  
    foreach ($_POST AS $key => $value) {
    $_SESSION['abrval'][$key] = $value;
print_r($_SESSION);
     }
//session_destroy();
?>
 
<form method="post">
    <textarea rows="10" cols="45" name="dream"><?=implode(',',$_SESSION);?></textarea>
    <br><input type="submit" value="Добавить" name="plus[1]">
<br><input type="submit" value="Напечатать" name="plus[2]">
    <input type="submit" value="Очистить" name="clear">
</form>
</p>
Добавлено через 3 минуты
Да, ещё пробовал в вашем варианте и одном своем (похожем) назначать переменную таким образом:
PHP
1
$view = &$_SESSION['abrval'] ?? $_POST['plus'] ?? $_POST['dream'] ?? null;
Но все равно с клавиатуры не работает
0
Строитель
488 / 322 / 141
Регистрация: 09.07.2018
Сообщений: 862
Вчера, 15:55 7
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Array ( [abrval] => Array ( [dream] =>
Notice: Array to string conversion *on line 12
Array это я пробую печатать с клавиатуры [plus] => Array ( [2] => Напечатать ) ) ) Array ( [abrval] => Array ( [dream] =>
Notice: Array to string conversion *12
Array это я пробую печатать с клавиатуры [plus] => Array ( [1] => Добавить ) ) )
Сделайте нормальный дамп массива, без нотисов и т.п. дописываний.
0
DyadyaGe
11 / 8 / 3
Регистрация: 04.04.2019
Сообщений: 96
Вчера, 15:59  [ТС] 8
Цитата Сообщение от Строитель Посмотреть сообщение
Сделайте нормальный дамп массива, без нотисов и т.п. дописываний.
PHP
1
Array ( [abrval] => Array ( [dream] => "это не дописывания, это я ввел текст с клавиатуры" [plus] => Array ( [2] => Напечатать ) ) ) Array ( [abrval] => Array ( [dream] => "это не дописывания, это я ввел текст с клавиатуры" [plus] => Array ( [1] => Добавить ) ) )
0
Строитель
488 / 322 / 141
Регистрация: 09.07.2018
Сообщений: 862
Вчера, 16:11 9
DyadyaGe, тут два массива, внутри которых в свою очередь так же есть массивы, ассоциативные. Если структура массивов всегда одинакова,то можно обработать двумя (или тремя) циклами. Если структура не известна - тогда рекурсией. Вот пример с циклами
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$arr = Array (
    'abrval' => Array (
        'dream' => "это не дописывания, это я ввел текст с клавиатуры",
        'plus' => Array (
            2 => 'Напечатать'
        )
    )
);
 
foreach ($arr as $arr_1) {
    foreach ($arr_1 as $item) {
        if (is_array($item)) {
            foreach ($item as $element) {
                echo "$element<br>";
            }
        } else {
            echo "$item<br>";
        }
    }
}
1
DyadyaGe
11 / 8 / 3
Регистрация: 04.04.2019
Сообщений: 96
Вчера, 18:10  [ТС] 10
Цитата Сообщение от Строитель Посмотреть сообщение
тут два массива, внутри которых в свою очередь так же есть массивы, ассоциативные. Если структура массивов всегда одинакова,то можно обработать двумя (или тремя) циклами. Если структура не известна - тогда рекурсией. Вот пример с циклами
А правильное ли вообще направление выбрал? Если бы это был один массив, то значения шли бы последовательно. А так оно соединяет сперва значения одного массива, потом другого...
Может правильней двигаться в направлении, что я написал выше? Добавить каким-то образом в вашу переменную view данные ввода $_POST['dream']?

Добавлено через 1 час 17 минут
Цитата Сообщение от Строитель Посмотреть сообщение
вроде бы так (если что - подправите как вам нужно)
Если меняю в вашем примере строку
PHP
1
    $view = $view . $_POST['plus'] . $_POST['plus1'];
на
PHP
1
    $view = $view . $_POST['plus'] . $_POST['plus1'] . $_POST['dream'];
То начинает двоить, троить... выводить заново все что было до того, плюс последний ввод. Правда и ввод с клавиатуры тоже выводит.
0
Строитель
488 / 322 / 141
Регистрация: 09.07.2018
Сообщений: 862
Сегодня, 00:05 11
Цитата Сообщение от DyadyaGe Посмотреть сообщение
А правильное ли вообще направление выбрал?
Как по мне, дак вы слишком усложняете код. В моём примере изначально всё собиралось в переменную, при этом данные имели строчный тип.
0
DyadyaGe
11 / 8 / 3
Регистрация: 04.04.2019
Сообщений: 96
Сегодня, 00:28  [ТС] 12
Цитата Сообщение от Строитель Посмотреть сообщение
Как по мне, дак вы слишком усложняете код. В моём примере изначально всё собиралось в переменную, при этом данные имели строчный тип.
Только закончил упрощать )))) обошелся даже без сессий )) но с imploid.
Вот код, в нем сразу две формы почти одинаковых, только выводятся чуток по разному, и в одной для лучшего понимания проверка var_dump, а в другой prin_r
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
 
$view='';
 
for ($k=0; $k<=9; $k++){
$key=$k;
$p_val[$key]='';
}
 if (isset($_POST['plus']))
{
   foreach ($_POST['plus'] as $key=>$val)
   {
      if (isset($p_val[$key])) {$p_val[$key]=$val;}
   }
    $view=array($_POST['dream'],$p_val[$key]);
    $view=implode('',$view);
    echo $view;
}
 if (isset($_POST['clear'])) {$view = null;}
 
function add_tab()
{ 
   $nam='plus';
   $dob=array('text0','text1','text2','text3','text4','text5','text6','text7','text8','text9' ) ; 
   ob_start(); for ($k=0; $k<=9; $k++) { ?>
       <input type="submit" value="<?=$dob[$k]?>" name="<?=$nam.'['.$k.']'?>">
    <?php }  return ob_get_contents(); 
}
?>
<h1> Форма №1 </h1>
<form method="post">
    <textarea rows="10" cols="45" name="dream"><?php print_r($view);?></textarea></br>
        <?php add_tab(); ?>
    <br><input type="submit" value="Очистить" name="clear">
</form>
</p>
 
<h1> Форма №2 </h1>
<form method="post">
    <textarea rows="10" cols="45" name="dream"><?php var_dump($view);?></textarea></br>
        <?php $nam='plus';
       $dob=array('text0','text1','text2','text3','text4','text5','text6','text7','text8','text9' ) ; 
       ob_start(); for ($k=0; $k<=9; $k++) { ?>
           <input type="submit" value="<?=$dob[$k]?>" name="<?=$nam.'['.$k.']'?>">
       <?php } ?> <?php  ob_get_contents(); ?> 
          <br><input type="submit" value="Очистить" name="clear">
</form>
</p>
0
Jewbacabra
Эксперт PHP
3969 / 3263 / 1416
Регистрация: 24.04.2014
Сообщений: 9,873
Сегодня, 01:02 13
DyadyaGe, а зачем тут ob_*. Если убрать все функции работы с буфером, то результат ожидаемо не поменяется
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
 
$view='';
 
for ($k=0; $k<=9; $k++){
$key=$k;
$p_val[$key]='';
}
 if (isset($_POST['plus']))
{
   foreach ($_POST['plus'] as $key=>$val)
   {
      if (isset($p_val[$key])) {$p_val[$key]=$val;}
   }
    $view=array($_POST['dream'],$p_val[$key]);
    $view=implode('',$view);
    echo $view;
}
 if (isset($_POST['clear'])) {$view = null;}
 
function add_tab()
{
   $nam='plus';
   $dob=array('text0','text1','text2','text3','text4','text5','text6','text7','text8','text9' ) ;
   /*ob_start();*/ for ($k=0; $k<=9; $k++) { ?>
       <input type="submit" value="<?=$dob[$k]?>" name="<?=$nam.'['.$k.']'?>">
    <?php }  /*return ob_get_contents();*/
}
?>
<h1> Форма №1 </h1>
<form method="post">
    <textarea rows="10" cols="45" name="dream"><?php print_r($view);?></textarea></br>
        <?php add_tab(); ?>
    <br><input type="submit" value="Очистить" name="clear">
</form>
</p>
 
<h1> Форма №2 </h1>
<form method="post">
    <textarea rows="10" cols="45" name="dream"><?php var_dump($view);?></textarea></br>
        <?php $nam='plus';
       $dob=array('text0','text1','text2','text3','text4','text5','text6','text7','text8','text9' ) ;
       /*ob_start();*/ for ($k=0; $k<=9; $k++) { ?>
           <input type="submit" value="<?=$dob[$k]?>" name="<?=$nam.'['.$k.']'?>">
       <?php } ?> <?php  /*ob_get_contents();*/ ?>
          <br><input type="submit" value="Очистить" name="clear">
</form>
</p>


А еще можно в форму добавить текст: </textarea><script>alert('hacked');</script>
0
Сегодня, 01:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
Сегодня, 01:02

Запуск нескольких приложений последовательно
Необходимо запустить несколько приложений .У меня запускается только 1-е приложение а второе с...

Проверка последовательно нескольких регулярных выражений
Добрый день. Можно ли в JS каким-либо образом записать несколько разных регулярных выражений в...

Вывод нескольких матриц в консоль последовательно
Добрый день получаю строку такого вида...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru