powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Обработка формы в PHP
8 сообщений из 8, страница 1 из 1
Обработка формы в PHP
    #39759846
Stang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем здравия. Столкнулся с проблемой, не знаю как ее решить и где я туплю. Есть кусок из кода класса:
Код: 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.
echo "<div class=\"divA\">";
		if (isset($_POST['doQu']) && isset($_POST['doNe']) && isset($_POST['doId']))
    	{
    		$doNe = (int) $_POST['doNe'];
    		$doQu = (int) $_POST['doQu'];
    		$doId = (int) $_POST['doId'];
                $doAn = $_POST['doAn'];
    		var_dump($doQu);
    		var_dump($doId);
    		var_dump($doNe);
                var_dump($doAn);
    	}

    	?>

    		<form method="POST">

			<?php
    			foreach ($result as $answer) {
    				echo "<input type=\"hidden\" name=\"doId\" value=\"".$answer['id']."\">";
    				echo "<input type=\"hidden\" name=\"doQu\" value=\"".$answer['id_question']."\">";
    				echo "<input type=\"hidden\" name=\"doNe\" value=\"".$answer['id_next_question']."\">";
				echo "<input type=\"submit\" name=\"doAn\" value=\"".$answer['answer']."\">"."    ";

				}
			?>

			</form>

		<?php 
			
echo "</div>";


В форме переменное количество кнопок, которые берутся из БД. По нажатию кнопки я ожидаю, что передадутся переменные. Но, по сути передается только одна из кнопки $_POST['doAn'] (причем нормально по нажатию сменяются данные), остальные какой-то бред и не меняется по нажатию разных кнопок. А мне то не значение кнопки нужно, а получить значения из полей.
Что я не так делаю?
...
Рейтинг: 0 / 0
Обработка формы в PHP
    #39759894
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StangВ форме переменное количество кнопокЕсли количество кнопок ноль или одна - тогда вполне нормально.
Если более одной - то возникает конфликт. Любая кнопка сабмита, находящаяся внутри формы, отправляет форму целиком. Если цикл отработал два или более прохода, то в форме оказываются несколько элементов с одинаковыми именами. Разумеется, каждый следующий элемент будет переписывать "свою" переменную в $_POST.
В зависимости от логики работы в данном случае следует или использовать отдельные формы для каждого набора полей, или сделать имена полей уникальными, или объединить одноименные поля в массивы.
...
Рейтинг: 0 / 0
Обработка формы в PHP
    #39759903
Stang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, звучит логично и правильно. А почему же значение кнопки передается, а остальное нет?

Получается, мне нужно организовать еще один цикл, и названия полей делать различным для всех?
...
Рейтинг: 0 / 0
Обработка формы в PHP
    #39759919
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StangА почему же значение кнопки передается, а остальное нет?
Передаются значения всех полей формы и значение нажатой (одной) кнопки сабмита. Кнопок сабмита может быть множество, они могут быть запрограммированы на разные действия (например, "послать Маше", "послать Пете", "послать маме"). Поэтому передается только та кнопка, которая была нажата. Об этом можно почитать в спецификации по HTML или убедиться лично, если нажмете в ФФ F12 и посмотрите передаваемые браузером параметры - данные в Form data.

На стороне PHP принимаются все переданные браузером данные. В этом тоже очень легко убедиться, если прочитать php://input.

А вот раскладка принятых данных в элементы массивов POST, GET, REQUEST как раз и переписывает предыдущие значения следующими.

StangПолучается, мне нужно организовать еще один цикл, и названия полей делать различным для всех?Выше уже написал, что возможны разные варианты в зависимости от логики и условий решаемой задачи. Не зная задачи в деталях, невозможно определить, какой именно вариант подходит для Вашего конкретного случая.

Возможно, подойдет первый вариант, он же самый простой. Лично я не понимаю, зачем передавать множество комплектов полей, когда достаточно отправить лишь id вопроса и id ответа, а всё остальное на сервере и так легко можно вычислить. Но это мое видение решения задачи "вопросника", а не Ваше.

Или, может быть, Вы предпочтете прочитать из php://input принятые данные в чистом виде и разобрать их самостоятельно (например, "чтобы форму не переделывать").
...
Рейтинг: 0 / 0
Обработка формы в PHP
    #39759943
Stang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleStangА почему же значение кнопки передается, а остальное нет?
Передаются значения всех полей формы и значение нажатой (одной) кнопки сабмита. Кнопок сабмита может быть множество, они могут быть запрограммированы на разные действия (например, "послать Маше", "послать Пете", "послать маме"). Поэтому передается только та кнопка, которая была нажата. Об этом можно почитать в спецификации по HTML или убедиться лично, если нажмете в ФФ F12 и посмотрите передаваемые браузером параметры - данные в Form data.

На стороне PHP принимаются все переданные браузером данные. В этом тоже очень легко убедиться, если прочитать php://input.

А вот раскладка принятых данных в элементы массивов POST, GET, REQUEST как раз и переписывает предыдущие значения следующими.

StangПолучается, мне нужно организовать еще один цикл, и названия полей делать различным для всех?
Выше уже написал, что возможны разные варианты в зависимости от логики и условий решаемой задачи. Не зная задачи в деталях, невозможно определить, какой именно вариант подходит для Вашего конкретного случая.

Возможно, подойдет первый вариант, он же самый простой. Лично я не понимаю, зачем передавать множество комплектов полей, когда достаточно отправить лишь id вопроса и id ответа, а всё остальное на сервере и так легко можно вычислить. Но это мое видение решения задачи "вопросника", а не Ваше.

Или, может быть, Вы предпочтете прочитать из php://input принятые данные в чистом виде и разобрать их самостоятельно (например, "чтобы форму не переделывать").
На самом деле мне нужно два значения, но хорошо, согласен, можно обойтись и одним. Остальные я начал городить, проверяя.
Можно было бы и так, но все равно не работает:
Код: 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.
/* выводим форму с кнопками */
		echo "<div class=\"divA\">";

		if($_SERVER["REQUEST_METHOD"]=="POST"){
        print_r($_POST);
		if (isset($_POST['doQu']) && isset($_POST['doNe']) && isset($_POST['doId']))
    	{
    		$doNe = (int) $_POST['doNe'];
    		print_r($doNe);
    	}
    	}

    	?>

    		<form method="POST">

			<?php
    			foreach ($result as $answer) {
    				$i=0; $i++;
	    					echo "<input type=\"hidden\" name=\"doNe".$i."\" value=\"".$answer['id_next_question']."\">";
						echo "<input type=\"submit\" value=\"".$answer['answer']."\">"."&nbsp;&nbsp;&nbsp;&nbsp;";
						echo "{$answer['id_next_question']}";
					
				}
			?>

			</form>

		<?php 
			
		echo "</div>";
		/* Конец формы*/


Кнопки, это у меня по сути варианты ответов, и мне нужно вычислить какой будет следующий вопрос, который напрямую зависит от ответа. Не вычислять же мне его делая запрос из базы по тексту? Тобишь, к примеру, у меня форма выведет "да" и "нет" кнопки. Что, делать запрос в таблицу на поиск именно "да" или "нет"? А текст кнопки может быть очень большой, и таблица тоже.... Уникальные поля ничего не дают, все равно реально отправляется одна. Сейчас может реально попробую для каждой кнопки форму создавать.
...
Рейтинг: 0 / 0
Обработка формы в PHP
    #39759949
Stang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, огромный плюс вам в карму! С отдельными формами, под каждую кнопку, все заработало так, как мне надо! Благодарю. Век живи, век учись. Правда, я только начал.
...
Рейтинг: 0 / 0
Обработка формы в PHP
    #39759984
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stangмне нужно вычислить какой будет следующий вопрос, который напрямую зависит от ответа. Не вычислять же мне его делая запрос из базы по тексту?Полностью согласен, вычислять по тексту ответа - как минимум, затратно. По ID ответа вычислять гораздо проще. Да и база не особо нужна.
Как один из возможных вариантов можно запилить такой примерно алгоритм.
Берем из базы очередной вопрос (id и текст) и варианты ответов на него (id, текст, действие на следующий шаг). На веб-страницу отправляем id вопроса и ответов (для возвращения значений через форму) и тексты (исключительно для отображения на веб-странице). На стороне сервера сохраняем в сессии id вопроса и массив соответствий вида "id ответа" -> "действие на следующий шаг". При приеме формы берем сохраненное в сессии, проверяем соответствие id вопроса. Если сохраненное и присланное значения id не совпадают - отвечающий сильно жульничает с попытками понажимать кнопки вперед/назад в браузере. При совпадении id вопроса берем из соответствующего значения массива действие следующего шага. А там варианты примерно такого, например, вида: целое положительное число - id следующего вопроса, -1 - плановое завершение опроса, -2 - досрочное завершение, -3 - задать вопрос повторно и т.п. Если пришел id ответа, которого нет в массиве - отвечающий жульничает. Ну это так, вкратце.

Что с клиента передается в таком случае? Всего два целых положительных числа. Они компактные сами по себе, легко проверяются на корректность или допустимость значений.
...
Рейтинг: 0 / 0
Обработка формы в PHP
    #39760137
Stang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, я так и собирался делать, мне нужно хранить весь этап пути пользователя, для дальнейшего анализа. Но это будет следующий этап моего развития, пока не дошел еще уровнем знаний, как по мне. Тут на таком простом голову сломал. Но огромное спасибо, по крайней мере начну закладывать фундамент под дальнейшую разработку. Не зря же я в ООП полез, пока все что я делаю, можно было и без него обходиться.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Обработка формы в PHP
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]