2012-02-15 2 views
0

У меня есть сайт PHP (с CodeIgniter), который включает регистрационную форму. У меня есть страница с некоторыми подробностями, которая ссылается на форму на отдельной странице. Форма отправляется на третий URL-адрес, который обрабатывает и перенаправляет обратно на первую страницу, если это успешно (или на странице формы, если нет).Как показать сообщение 'success' в форме submit без изменения URL?

В настоящее время я добавляю параметр для достижения успеха: example.com/page?success=1 который показывает сообщение об успешном завершении. Проблема в том, что некоторые люди делились этим URL-адресом (и нажимали кнопку Facebook Like), поэтому, когда другой пользователь открывает этот URL-адрес, они видят сообщение «спасибо за регистрацию!». которые они, очевидно, еще не сделали.

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

+0

Взгляните на Ajax – Fredrik

+0

Связанный: http://stackoverflow.com/questions/7120746/codeigniter-reusable-message-library – DanMan

ответ

2

Обычно вы должны установить свой флаг для успеха в работе сессии, чтобы отобразить это сообщение, когда следующая страница загружается. Это обычно называют Flash Message. Затем вы проверите значение/существование этого флага сеанса и покажете свое сообщение или нет. В большинстве фреймворков есть встроенная функциональность для этого, которая включает очистку флага при следующем запросе, чтобы сообщение отображалось непосредственно после того, как оно было выполнено.

С CI Sessions Documentation:

CodeIgniter поддерживает «flashdata», или данные сеанса, которые будут только для следующего запроса сервера, а затем автоматически очищается. Они могут быть очень полезными и обычно используются для информационных сообщений или сообщений о статусе (например: «запись 2 удалена»).

Примечание: Flash-переменные предваряются «flash_», поэтому избегайте этого префикса в ваших собственных именах сеансов.

Чтобы добавить flashdata:

$this->session->set_flashdata('item', 'value'); 

Вы также можете передать массив set_flashdata(), таким же образом, как set_userdata().

Чтобы прочитать flashdata переменным:

$this->session->flashdata('item'); 

Если вы обнаружили, что вам нужно сохранить flashdata переменного через дополнительного запроса, вы можете сделать это с помощью функции keep_flashdata().

$this->session->keep_flashdata('item'); 
3

У вас есть три способа сделать это

  • Путь, который вы используете
  • Не на самом деле перенаправляет но отправив запрос (ы) с помощью AJAX
  • SESSION (или, в случае края, печенье)

При выборе использовать SESSION, вы можете просто присвоить переменной сеанса к истинному

$_SESSION['registered'] = true; 

и проверить его на первой странице

if (isset($_SESSION['registered'])) { 
     unset($_SESSION['registered']); 
     // shot the message 
} 
-1

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

т.е.

<?php 
if (isset($_POST['submit'])) 
    { 
    // process the form 
    } 
else 
    { 
    //redirect to the form itself 
    header('Location: http://www.yourform.com') ; 
    } 
?> 
0

Вы должны иметь некоторые проверки проверки в коде, который обрабатывает обработку данных формы, чтобы убедиться, что обязательные поля заполнены. В противном случае вы должны перенаправить на свою первую страницу, чтобы пользователь заполнил форму.

Кроме того, это может быть обработан с помощью AJAX, но это будет второй шаг, имеющий надлежащую проверку на вашей странице форма обработки

0

HTML:

<form method="post"> 
    <input type="text"> 
    <input name="submitted" type="submit"> 
</form> 

PHP:

if($_POST['submitted']{ 
    //post was submitted process it 

    if(/*whatever you're doing to the form succeeds*/){ 
     //show success 
    } 
} 

POST не отображает переменные в URL-адресе.

+0

Для моей пользы ... почему это не используется? –

+0

Мне хотелось бы знать то же самое, чтобы я мог учиться - я подозреваю, что это некоторая прихоть Codeigniter от чтения вышеупомянутых ответов. – davidjwest

+0

@ChrisSobolewski, потому что он не отвечает на вопрос удаленно. Проблема заключается не в том, как читать postdata. – DisgruntledGoat

Смежные вопросы