|
Обработка формы в PHP
|
|||
---|---|---|---|
#18+
Доброго всем здравия. Столкнулся с проблемой, не знаю как ее решить и где я туплю. Есть кусок из кода класса: Код: 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.
В форме переменное количество кнопок, которые берутся из БД. По нажатию кнопки я ожидаю, что передадутся переменные. Но, по сути передается только одна из кнопки $_POST['doAn'] (причем нормально по нажатию сменяются данные), остальные какой-то бред и не меняется по нажатию разных кнопок. А мне то не значение кнопки нужно, а получить значения из полей. Что я не так делаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 15:46 |
|
Обработка формы в PHP
|
|||
---|---|---|---|
#18+
StangВ форме переменное количество кнопокЕсли количество кнопок ноль или одна - тогда вполне нормально. Если более одной - то возникает конфликт. Любая кнопка сабмита, находящаяся внутри формы, отправляет форму целиком. Если цикл отработал два или более прохода, то в форме оказываются несколько элементов с одинаковыми именами. Разумеется, каждый следующий элемент будет переписывать "свою" переменную в $_POST. В зависимости от логики работы в данном случае следует или использовать отдельные формы для каждого набора полей, или сделать имена полей уникальными, или объединить одноименные поля в массивы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 16:53 |
|
Обработка формы в PHP
|
|||
---|---|---|---|
#18+
vkle, звучит логично и правильно. А почему же значение кнопки передается, а остальное нет? Получается, мне нужно организовать еще один цикл, и названия полей делать различным для всех? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 17:04 |
|
Обработка формы в PHP
|
|||
---|---|---|---|
#18+
StangА почему же значение кнопки передается, а остальное нет? Передаются значения всех полей формы и значение нажатой (одной) кнопки сабмита. Кнопок сабмита может быть множество, они могут быть запрограммированы на разные действия (например, "послать Маше", "послать Пете", "послать маме"). Поэтому передается только та кнопка, которая была нажата. Об этом можно почитать в спецификации по HTML или убедиться лично, если нажмете в ФФ F12 и посмотрите передаваемые браузером параметры - данные в Form data. На стороне PHP принимаются все переданные браузером данные. В этом тоже очень легко убедиться, если прочитать php://input. А вот раскладка принятых данных в элементы массивов POST, GET, REQUEST как раз и переписывает предыдущие значения следующими. StangПолучается, мне нужно организовать еще один цикл, и названия полей делать различным для всех?Выше уже написал, что возможны разные варианты в зависимости от логики и условий решаемой задачи. Не зная задачи в деталях, невозможно определить, какой именно вариант подходит для Вашего конкретного случая. Возможно, подойдет первый вариант, он же самый простой. Лично я не понимаю, зачем передавать множество комплектов полей, когда достаточно отправить лишь id вопроса и id ответа, а всё остальное на сервере и так легко можно вычислить. Но это мое видение решения задачи "вопросника", а не Ваше. Или, может быть, Вы предпочтете прочитать из php://input принятые данные в чистом виде и разобрать их самостоятельно (например, "чтобы форму не переделывать"). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 17:35 |
|
Обработка формы в PHP
|
|||
---|---|---|---|
#18+
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.
Кнопки, это у меня по сути варианты ответов, и мне нужно вычислить какой будет следующий вопрос, который напрямую зависит от ответа. Не вычислять же мне его делая запрос из базы по тексту? Тобишь, к примеру, у меня форма выведет "да" и "нет" кнопки. Что, делать запрос в таблицу на поиск именно "да" или "нет"? А текст кнопки может быть очень большой, и таблица тоже.... Уникальные поля ничего не дают, все равно реально отправляется одна. Сейчас может реально попробую для каждой кнопки форму создавать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 18:00 |
|
Обработка формы в PHP
|
|||
---|---|---|---|
#18+
vkle, огромный плюс вам в карму! С отдельными формами, под каждую кнопку, все заработало так, как мне надо! Благодарю. Век живи, век учись. Правда, я только начал. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 18:12 |
|
Обработка формы в PHP
|
|||
---|---|---|---|
#18+
Stangмне нужно вычислить какой будет следующий вопрос, который напрямую зависит от ответа. Не вычислять же мне его делая запрос из базы по тексту?Полностью согласен, вычислять по тексту ответа - как минимум, затратно. По ID ответа вычислять гораздо проще. Да и база не особо нужна. Как один из возможных вариантов можно запилить такой примерно алгоритм. Берем из базы очередной вопрос (id и текст) и варианты ответов на него (id, текст, действие на следующий шаг). На веб-страницу отправляем id вопроса и ответов (для возвращения значений через форму) и тексты (исключительно для отображения на веб-странице). На стороне сервера сохраняем в сессии id вопроса и массив соответствий вида "id ответа" -> "действие на следующий шаг". При приеме формы берем сохраненное в сессии, проверяем соответствие id вопроса. Если сохраненное и присланное значения id не совпадают - отвечающий сильно жульничает с попытками понажимать кнопки вперед/назад в браузере. При совпадении id вопроса берем из соответствующего значения массива действие следующего шага. А там варианты примерно такого, например, вида: целое положительное число - id следующего вопроса, -1 - плановое завершение опроса, -2 - досрочное завершение, -3 - задать вопрос повторно и т.п. Если пришел id ответа, которого нет в массиве - отвечающий жульничает. Ну это так, вкратце. Что с клиента передается в таком случае? Всего два целых положительных числа. Они компактные сами по себе, легко проверяются на корректность или допустимость значений. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 19:58 |
|
Обработка формы в PHP
|
|||
---|---|---|---|
#18+
vkle, я так и собирался делать, мне нужно хранить весь этап пути пользователя, для дальнейшего анализа. Но это будет следующий этап моего развития, пока не дошел еще уровнем знаний, как по мне. Тут на таком простом голову сломал. Но огромное спасибо, по крайней мере начну закладывать фундамент под дальнейшую разработку. Не зря же я в ООП полез, пока все что я делаю, можно было и без него обходиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2019, 09:52 |
|
|
start [/forum/topic.php?fid=23&msg=39759894&tid=1460030]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 251ms |
total: | 364ms |
0 / 0 |