Хранить или передавать ошибки

for_i_0

Новичок
Хранить или передавать ошибки

Доброе время суток!

Есть форма которая отправляет данные на сервер. PHP обрабатывает данные.

тут собственно вопрос:

1. создавать массив ошибок и отправлять массив в сериализированном виде через _GET назад?
2. Хранить ошибки в _SESSION?

не знаю есть, ли еще варианты.
Если, можно пожалуйста ответьте сразу на вопрос почему именно так?

заранее, благодарю,
Умед.
 

zerkms

TDD infected
Команда форума
вывести их сразу через echo и нигде не хранить.
 

for_i_0

Новичок
Спасибо за вариант.

Только, он в моем случае не подойдет.

Форма у меня в одном файле а обработка в другом.
После обработки мне нужно отображать ошибку в файле где находится форма.

иначе, говоря я перенаправляю пользователя обратно на страницу формы.
 

zerkms

TDD infected
Команда форума
значит сессии. только непонятно, как ты отличаешь формы друг от друга: что будет если рядом с формой с ошибкой в соседнем табе браузера открыть ещё раз страницу с формой?
 

for_i_0

Новичок
в случае с сессиями можно их удалять после вывода ошибок. Если я правильно понял вопрос.

если можно прокомментируй почему именно сессии а не сериализация массива и передача его по _GET?

Умед.
 

zerkms

TDD infected
Команда форума
потому что, имхо, урл не средство передачи результатов.
 

Фанат

oncle terrible
Команда форума
сделать в "одном файле" не проблема.
но с сессией будет идеологически правильнее. даже если форма и обработчик будут по одному адресу.
 

zerkms

TDD infected
Команда форума
*****
зачем лишний слой? проверил - выдал ошибку - забыл.
 

Фанат

oncle terrible
Команда форума
Браузер не может отобразить страницу. Повторить отправку данных?
 

Gorynych

Посетитель PHP-Клуба
присоединяюсь.

массив ошибок, относящихся к одной форме стоит хранить в сессий - во-первых ошибки имеют смысл именно в этом сеансе (в этом смысле GET не верен, GET - это потенциально сохраняемый пользователем url, зачем сохранять url с ошибками?), во вторых - вряд ли возможно продолжение обработки форму без исправления ошибок. В итоге - скорее всего мы должны отрисовать ту же форму + диагностику.

в третьих - стоит хранить это по ключу, идентифицирующему request-uri + идентификатор формы, чтобы выдавать диагностику ошибок именно для нужной формы.
 

Фанат

oncle terrible
Команда форума
Gorynych
да ладно. мне кажется, можно не запариваться.
не нажмет же он одновременно два сабмита? там же доли секунды - записал, получил, стер.
 

whirlwind

TDD infected, paranoid
Предлагаю хранить ошибки в базе данных. set_error_handler и вперед. А потом, когда ошибок накопится под несколько петабайт, можно будет открыть музей и брать деньги за показ этого шедевра дизайнерской мысли.
 

Gorynych

Посетитель PHP-Клуба
*****

я скорее с точки зрения к какой форме (блоку / контролу и т.п.) при формировании вывода относить полученную диагностику ошибок.

тупой пример: на странице форма авторизации и голосования, и там и там плейсхолдер для сообщения об ошибке и надо понять, куда выводим полученное сообщение.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
мой ответ!
запрос ajax-ом, ответ json-ом, вывод ошибок под каждым полем без перегрузки страницы, при успехе обработки - редирект
пишется быстрее, чем "туда-сюда-обратно" с сессиями
 

zerkms

TDD infected
Команда форума
Браузер не может отобразить страницу. Повторить отправку данных?
постоянное хранение в сессии приведёт к тому, что придётся формы отличать по какому-то токену и постоянно с ними носиться. в то же время, как ф5 тут привносит вполне ожидаемое поведение - повторить отправку формы.
если же ты не будешь хранить тексты ошибок и введённые данные в сессии, как говоришь тут:
не нажмет же он одновременно два сабмита? там же доли секунды - записал, получил, стер.
тогда после нажатия ф5 мало того, что мы потеряем все ошибки - так ещё и полезные данные.
 

Фанат

oncle terrible
Команда форума
Gorynych
не, ну это несерьезно. мы же знаем, к какому модулю относятся получаемые данные. сюда и форма привязана. Хотя врать не буду, с такими сложными вариантами не работал.

zerkms
А зачем полезные данные-то стирать?
И при чем здесь постоянное хранение, если оно доли секунды?
по Ф5, после того, как ты походил по сайту, а потом понажимал назад - не ожидаемое.
А для случая, когда больше одной формы на странице, как тут правильно указали - тем более.
Не. Поста в истории быть не должно. Аксиома.
Сразу вывести - это послабление, которое мы себе делаем, а не правильный подход
 

Фанат

oncle terrible
Команда форума
ты всегда его таскаешь. этот токен называется ключ массива $_SESSION
не вижу никакой проблемы добавить в массив элемент и удалить элемент.

во всей операции целиком геморроя да - больше. но я ж и говорю, что два варианта - какой правильнее и какой легче
 

zerkms

TDD infected
Команда форума
*****
не таскаю я его всегда - у меня в формах данные приходят из $_POST и нигде не сохраняются, если была ошибка.
 
Сверху