За последние 24 часа нас посетил 22341 программист и 1022 робота. Сейчас ищут 620 программистов ...

Как после отправки данных из формы выдать сообщение НАД формой?

Тема в разделе "PHP для новичков", создана пользователем oldnomad, 12 сен 2019.

Метки:
  1. oldnomad

    oldnomad Новичок

    С нами с:
    31 авг 2019
    Сообщения:
    11
    Симпатии:
    0
    Есть функция, которая проверят введенные данные из формы и если допустим введен запрещенный e-mail, то функция отправляет false на страницу формы, если true, то открывается другая страница (но это уже не важно).
    Задача в том, чтобы использовать пришедший FALSE к форме - чтобы до отправки информации на странице этой формы были только поля, а после отправки, если пришел false, выше формы вывести сообщение что введены не корректные данные и ниже все та же форма с пустыми полями для повторной отправки данных.
    Помогите, плиз с данной реализацией.
     
  2. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @oldnomad, тут несколько вариантов, но суть одна. Необходимо передать на страницу сообщение об ошибке. Чаще всего это можно сделать по средствам сессионной переменной (таких переменных может быть несколько об ошибке, об успешном сохранении чего либо и тд). Можно передать GET параметр или установить кукисы. Естественно после вывода сообщения его надо "сбросить" (удалить сессионную переменную или кукис, либо изъять переменную из GET)
    Т.е в скрипте необходимо проверять наличие этой переменной и выводить сообщение если она есть (кстати это может быть массив в сессии и сообщения можно собирать для вывода по средствам implode())
    Никто не запрещает использовать все три способа передачи сообщения одновременно (только необходимо определиться с приоритетом, что бы они не дублировались)
     
  3. oldnomad

    oldnomad Новичок

    С нами с:
    31 авг 2019
    Сообщения:
    11
    Симпатии:
    0
    Я же написал с самого начала - "Есть функция, которая проверят введенные данные из формы и если допустим введен запрещенный e-mail, то функция отправляет false на страницу формы". Т.е. на страницу формы приходит переменная с false (см. скриншот)
    Осталось ее использовать для отображения сообщения "Ваши данные не корректны!", только вот как? Не могу докумекать.
     

    Вложения:

  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @oldnomad, замени твое сообщение на норм. (выводимое по условию).
    --- Добавлено ---
    Вообще же тебе суть описывают, т.к. ХЗ, что конкретно у тебя под капотом. Проще всего без сессий/кук. Добавляете какой-то модификатор к адресу страницы с формой и учитывайте его при выводе формы. Это если без AJAX.
     
  5. oldnomad

    oldnomad Новичок

    С нами с:
    31 авг 2019
    Сообщения:
    11
    Симпатии:
    0
    В смысле?
     
  6. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    тут и кумекать то нечего
    if ($success === false) {
    echo 'Ваши данные не корректны!';
    }

    $success - это твоя переменная
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    В прямом. Выложи весь код или не выделывайся, код тебе дают пояснения в общем. У тебя походу AJAX, судя по этому (т.е. еще и клиентский код плюс разметка может понадобиться):
    Или ты не используешь POST-Redirect-GET, что неправильно.
     
  8. oldnomad

    oldnomad Новичок

    С нами с:
    31 авг 2019
    Сообщения:
    11
    Симпатии:
    0
    Да не вопрос:
    Вот функция, которая после проверки поля e-mail принимает решение:
    Код (Text):
    1.  
    2. public function form(Request $request)
    3.     {
    4.         {
    5.             if ($request->isMethod('get')) {
    6.                 return view('test.form');
    7.             }
    8.             if ($request->isMethod('post')) {
    9.                 $email = $request->input('email');
    10.  
    11.                 if (!preg_match('|^[-0-9A-Za-z_\.]+@[-0-9A-Za-z^\.]+\.[a-z]{2,6}$|i',$email)) {
    12.                     $war = false;
    13.                     return view('test.form', ['war' => $war]);
    14.  
    15.                 } else {
    16.                     return redirect('test/info')->withInput();
    17.                 }
    18.             }
    19.         }
    А вот сама форма, на которую приходит переменная $war

    Код (Text):
    1. <!DOCTYPE html>
    2. <html lang="ru">
    3. <head>
    4.     <title>My form</title>
    5. </head>
    6. <body>
    7.  
    8. @if ($war === true)
    9.     @php
    10.         echo 'Ваши данные не корректны!';
    11.     @endphp
    12. @endif
    13. <br>
    14. <hr>
    15. <form action="" method="post">{{ csrf_field() }}
    16.     <input type="email" name="email">
    17.     <input type="submit">
    18. </form>
    19.  
    20. </body>
    21. </html>
    И вот здесь ошибка! Хоть сюда и приходит переменная $war с данными false, но php ругается на $war типа не знаю что это такое. Если перед условием поставлю $war = NULL, то сообщение появляется с самого начала, а не по ситуации.
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Ну, я был прав: нет POST-Redirect-GET. Исправляй. А по сабжу см., как в твоем шаблонизаторе вставить во вьюшку ветвление, обратиться в его условии к переданной переменной и т.п.
    --- Добавлено ---
    http://laravel.su/docs/5.3/blade#control-structures
     
    #9 miketomlin, 12 сен 2019
    Последнее редактирование: 12 сен 2019
  10. oldnomad

    oldnomad Новичок

    С нами с:
    31 авг 2019
    Сообщения:
    11
    Симпатии:
    0
    То, о чем вы говорите фразой "POST-Redirect-GET" называется раут (паттерн MVC) и для формы он имеет такой вид:
    Route::match(['GET', 'POST'], '/test/form', 'ShowController@form');
    В методе паттерна, который я написал выше, имеется условие, которое и перенаправляет на нужный метод формы:
    Код (Text):
    1. if ($request->isMethod('get')) {
    2.                 return view('test.form');
    3.             }
    4.             if ($request->isMethod('post')) {
    5.                 $email = $request->input('email');
    Так что говорить с такой уверенностью "исправляйТЕ" рановато!
    --- Добавлено ---
    Какую-то фигню написали, не относящуюсю к делу.....
     
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Ты в своем рОуте указал, что принимаешь запросы обоими методами, и разруливаешь их в экшине вручную.
     
  12. oldnomad

    oldnomad Новичок

    С нами с:
    31 авг 2019
    Сообщения:
    11
    Симпатии:
    0
    Какую-то фигню написали, не относящуюсю к делу
    А мне другого и не надо
     
  13. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Это на случай, если вообще не в теме, как работать со своим шаблоном. Там выше есть пример с isset. Можешь в условии использовать эту ф-цию и вообще не анализировать значение переменной. Для твоего кривого варианта в самый раз. Успехов.