У меня есть форма на странице, где у пользователя есть вкладки для редактирования XML-файла, действие для формы – отправить его на отдельный PHP-скрипт, где редактирование происходит после того, как они попали в submit. Сценарий будет либо успешным, либо неудачным, так как я перенаправляю его обратно на страницу формы через заголовок. Есть ли простой способ передать сообщение подтверждения или отказа на страницу формы? Я могу сделать это в URL-адресе, но я предпочитаю сохранить этот чистый вид.
Способ, которым я его видел (и я лично использую), – это просто сеансы.
// process something if($success) { flash_message('success','Did whatever successfully.'); } else { flash_message('error','Oops, something went wrong.'); } header('Location: whatever.php');
Затем где-то еще, в вашей библиотеке или файле функции или что-то еще:
function flash_message($type, $message) { // start session if not started $_SESSION['message'] = array('type' => $type, 'message' => $message); }
Затем на странице просмотра / страницы вы можете:
if(isset($_SESSION['message'])) { printf("<div class='message %s'>%s</div>", $_SESSION['message']['type'], $_SESSION['message']['message']); unset($_SESSION['message']); }
сif(isset($_SESSION['message'])) { printf("<div class='message %s'>%s</div>", $_SESSION['message']['type'], $_SESSION['message']['message']); unset($_SESSION['message']); }
Это довольно просто, но вы можете расширить его оттуда, если хотите несколько сообщений и так далее. Суть в том, что я считаю, что сеансы лучше всего подходят для этого.
Я предпочитаю ставить код обработки формы и код формы на той же странице. Если вы действительно хотите отделить его, вы можете переместить код в другой файл и включить этот файл из файла формы, но с клиентской стороны он будет похож на тот же PHP-файл.
Затем всегда отправляйте форму и проверяйте свою ошибку вверху, прежде чем отображать форму. Если есть сообщение для отображения, вы просто визуализируете форму и показываете сообщение вместе с данными пользователей, чтобы они могли исправить эту проблему. Они могут снова отправляться, и вы можете снова проверить ошибки. Если они будут успешно отправлены, вы можете перенаправить их в другое место или просто показать вместо этого сообщение «Успех».