Поток URL при написании мастера на PHP - PullRequest
0 голосов
/ 13 мая 2010

Я пишу простой мастер для своего веб-сайта. У него будет 4 шага, и у каждого должен быть свой собственный URL. Каждый шаг должен сначала проверить форму, прежде чем двигаться дальше.

Если форма для данного шага не проходит проверку, я не хочу, чтобы URL-адрес изменился. Но если это пройдет, я хочу, чтобы это продолжалось.

Какой предпочтительный способ написать это? Использование только javascript для проверки недостаточно безопасно. Пока у меня есть 2 идеи, но я тоже не люблю:

1) Разместите форму в том же скрипте и используйте перенаправление header () на следующий шаг, если оно прошло.
2) Отправьте сообщение ajax для проверки, а затем используйте location.href, чтобы отправить пользователя на следующий шаг, если он пройдет.

Есть ли лучший способ сделать это?

Спасибо, Брайан

Ответы [ 4 ]

3 голосов
/ 13 мая 2010

Я бы предпочел вариант № 1, поскольку он не требует JavaScript.

Однако вы также захотите подумать о том, что происходит, когда кто-то делает закладки или переходит непосредственно к неправильному шагу.

2 голосов
/ 13 мая 2010

Ваш вариант № 1 - именно то, что я бы сделал.

1 голос
/ 13 мая 2010

Другим вариантом будет иметь всю логику проверки (между этими шагами) на одной странице PHP (которая затем всегда получает POST ed).

При обратной передаче выполните проверку текущего шага и (только если действительный) перейдите к следующему шагу. Вам также необходимо сохранить «предыдущие» проверки между сообщениями.

Вы все еще можете иметь different URL-адреса в смысле myform.php?step=1 и myform.php?step=2 и ... С некоторой простой перепиской URL, которая может быть myform/step1, myform/step2, ...

1 голос
/ 13 мая 2010

Имейте в виду, что вы можете объединить эти два подхода так:

  1. Если у пользователя включен JS, он получает более плавную работу (без перезагрузки страницы)
  2. Если они этого не делают, функциональность не теряется

Вы бы сделали это, используя стандартный трюк:

<form name="foo" action="bar.php" method="post">
    <input type="submit" value="Submit Form" onclick="ajax_handler(); return false;" />
</form>

Это потребует некоторого грамотного проектирования, чтобы ajax_handler() мог использовать тот же код, что и bar.php, для обработки данных формы. Кроме того, вы должны обратить особое внимание на путь AJAX, чтобы такие вещи, как кнопка возврата, продолжали работать так, как ожидает пользователь.

...