Sahen
@Sahen
ох уж это программирование.....

Как вывести сообщение пользователю?

Здравствуйте.
Суть вот в чём, к примеру, если пользователь при заполнении полей формы не заполнил нужное поле или ввел туда что-то не то, сообщение об этом должно отображаться на странице для отображения сообщений.
за отправку сообщения отвечает функция:
function messageSend($messageType, $place){
    $messageArray = array(
        "Empty in ",
        "Set your password ",
        "Bad symbols in ",
        "Too short value in ",
        "Too long value in ",
        "Fill in the field ",
        "This page does not exist!",
        ""
    );
    $_SESSION['reportMessage'] = $messageArray[$messageType].$place ;
    header('Location: /report');
    exit();
}

За прием и отображение, функция:
function messageShow() {
    if ($_SESSION['reportMessage']){
        echo $_SESSION['reportMessage'];
        $_SESSION['reportMessage'] = array();
        exit();
    }
    else{
        header('Location:/');
        exit();
    }
}


Т. е. функция отправки сообщения редиректит на страницу вывода и страница вывода уже отображает само сообщение.
Зачем редирект(?) - если юзер ошибся случайно, то для исправления ошибки ему будет достаточно нажать в браузере кнопку "назад" и он попадет обратно на страницу с формой в полях которой уже будет введено все вместе с ошибкой. Ему будет достаточно только исправить ошибку и все ок. А если перезагрузить страницу с формой при выводе сообщения об ошибке то все поля формы обнуляться и юзеру прийдется вводить все заново.
Так то оно все работает, вот только если перезагрузить страницу вывода сообщений после вывода сообщения, то ругается мол - Warning: Cannot modify header information - headers already sent (что как-бы понятно).
Можно конечно сделать как-то так:
function messageShow() {
    if ($_SESSION['reportMessage']){
        echo $_SESSION['reportMessage'];
        $_SESSION['reportMessage'] = array();
        exit();
    }
    else{
        echo 
               'Привет, это страница для отображения сообщений о Ваших ошибках. ';
        exit();
    }
}

И все будет норм.. Но, хотелось бы что бы эту страницу вообще не возможно было открыть если нету никакого сообщения в сессии. Логичнее что-ли.
Подскажите, как это можно организовать что бы не ругалось?
Думал еще что можно значения полей записывать в $_SESSION, выводить сообщение на странице самой формы после перезагрузки страницы с формой и при этом вставлять в поля то что было записано в $_SESSION.. А после успешной обработки формы обнулять $_SESSION.
Но как то не охота ганять лишний раз непонятную инфу через сервер/скрипт(хотя, может и ничего страшного если юзать htmlentities и т.п.). Пока что все сводиться к тому что это единственный вариант(хоть он муторный и стремный).
В общем надеюсь на Ваш совет, может упустил что-то по запарке.
  • Вопрос задан
  • 796 просмотров
Пригласить эксперта
Ответы на вопрос 2
snipeer777
@snipeer777
Middle E-Commerce
А зачем так сложно, есть же required и фильтры ввода
15539914.png
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Есть такая картинка - чувак сует палку в колесо собственного велосипеда, лень гуглить ))
При ошибке ввода нужно не какое-то волшебное отображение ошибки, а сразу возврат на форму логина, все отправленные поля заполняются обратно тем что заполнил пользователь, кроме ошибочно заполненного, можно внизу, у субмита написать что он лох и пальцы кривые, и только в случае когда все ок - перекидывать на страничку логиненного пользователя. А то вы тут чешете левое ухо правой пяткой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы