Matimor
22.08.2009, 21:31:36
Witam
Tworzyłem rejestracje na kilka etapów w osobnych plikach lecz teraz pojawia się taki problem, że można ominąć np. pytania do rejestracji wpisując adres www.adres/step2.php. Moje pytanie polega na tym, jak zrobić aby cała rejestracja odbywała się od kroku 1 do 4 po kolei czyli jak wpisze www.adres/step2.php to przekieruje mnie na step1 a jeżeli wejdę ze step1 na step2 to będzie normalnie. Lub można też zamaskować link, czego nie potrafię.
Proszę o pomoc
Wicepsik
22.08.2009, 21:34:43
Zrób w jednym pliku i na sesjach najlepiej.
bikerszymek
22.08.2009, 21:36:06
Moze ktos ma inny pomysl ale ja bym ustalil jakas zmienna sesyjna po kazdym z etapow i bez niej nie mozna by bylo przystapic do kolejnego (automatycznie przekierowanie do wymaganego). pzdr
edit: Zostalem uprzedzony
f1xer
22.08.2009, 21:38:37
//zawartość pliku step1.php
<form action="step2.php" method="post">
//tutaj dajesz formularz
<input type="hidden" name="next_step" value="2" />
</form>
//zawartość pliku step2.php
if ($_POST['next_step']!=2){
echo ('Próbujesz mnie oszukać'); }
?>
<form action="step3.php" method="post">
//tutaj dajesz formularz
<input type="hidden" name="next_step" value="3" />
</form>
tak na szybko reszta analogicznie czyli w step3.php next_step ustawiasz na 4
Solimo
22.08.2009, 21:39:01
Aby nic nie przepisywać chyba najszybciej przekazywać w ukrytych polach form'a dane z poprzednich kroków. Jeżeli step2 nie otrzyma odpowiednich danych w _POST to przekieruje do step1. Nie zapomnij po ostatnim kroku/etapie przewalidować wszystkich danych, ponieważ moża podmienić _POST np. za pomocą JavaScript.
Matimor
22.08.2009, 21:39:51
Możecie mi pokazać jak to mniej więcej ma wyglądać, nie wiem za dużo na temat sesji. Ale mi się wydaję, że ten pomysł na zmienne będzie lepszy, ponieważ budowa w jednym pliku mi nie odpowiada.
Solimo
22.08.2009, 21:42:25
To zrób ze zmiennymi skoro tak Ci bardziej pasuje. Pamietaj o walidacji po ostatnim kroku.
f1xer
22.08.2009, 21:45:15
a i jeszcze wypadałoby abyś przy każdym kroku badał $_SERVER['HTTP_REFERER']; i badał czy user dostał się tutaj z poprzedniego kroku
Matimor
23.08.2009, 09:12:07
Cytat(f1xer @ 22.08.2009, 22:38:37 )

//zawartość pliku step1.php
<form action="step2.php" method="post">
//tutaj dajesz formularz
<input type="hidden" name="next_step" value="2" />
</form>
//zawartość pliku step2.php
if ($_POST['next_step']!=2){
echo ('Próbujesz mnie oszukać'); }
?>
<form action="step3.php" method="post">
//tutaj dajesz formularz
<input type="hidden" name="next_step" value="3" />
</form>
tak na szybko reszta analogicznie czyli w step3.php next_step ustawiasz na 4
To co mi podałeś to ukrywa sumbity i nie można w ogóle przejść na kolejny etap.
f1xer
23.08.2009, 09:15:57
w jaki sposób może Ci to ukryć submit? podaj swój kod.
Fifi209
23.08.2009, 09:16:07
Jak na moje oko tam w ogóle nie ma submitu...
Zrób na sesjach, bo pomysł z ukrytym polem jest dobry na laików. Wystarczy firebug i zmienię wartość tego pola.
Matimor
23.08.2009, 09:26:03
echo' <form action="step2.php">'; require "regulamin.txt"; /* Regulamin z Pliku */
echo"<center><input type='hidden' name='next_step' value='$lang[akceptuj]'/></center>";
Jak dam za hidden submit to jest normalnie.
Quantum
23.08.2009, 09:32:39
Cytat(f1xer)
a i jeszcze wypadałoby abyś przy każdym kroku badał $_SERVER['HTTP_REFERER']; i badał czy user dostał się tutaj z poprzedniego kroku
a słyszał o CURLOPT_REFERER ? co do hidden, CURLOPT_POSTFIELDS.. sesje.. tylko i wyłącznie
Matimor
23.08.2009, 09:34:20
Jak ma to wyglądać z sesjami, nie orientuję się za bardzo w tym dziale.
PS: Czytałem gdzieś kiedyś na kurshtml.boo.pl jak robi się etapy ale nie mogę teraz tego znaleźć.
Quantum
23.08.2009, 09:37:22
http://pl.php.net/manual/pl/book.session.phpprzy przejściu do następnego etapu dajesz np $_SESSION['etap']++;
Matimor
23.08.2009, 09:51:18
echo' <form action="step2.php">'; require "regulamin.txt";
echo"<center><input type='submit' name='next_step' value='$lang[akceptuj]'/></center>"; $_SESSION['etap']++;
Formularz 2
if(empty($_SESSION["etap"])) {
echo '<meta http-equiv="Refresh" content="0; URL=step1.php"; />'; }
echo' <form action="step3.php">'; require "regulamin.txt";
echo"<center><input type='submit' name='next_step' value='$lang[akceptuj]'/></center>"; $_SESSION['etap']++;
Namieszałem raczej
Quantum
23.08.2009, 09:57:32
ja bym to zrobił na switch, dużo prościej
<?
switch($_SESSION['etap'])
{
case 1:
//instrukcje w etapie 1
if(poprawnie_wypelniony) $_SESSION['etap']++;
break;
case 2:
//instrukcje w etapie 2
if(poprawnie_wypelniony) $_SESSION['etap']++;
break;
default:
//instrukcje na start
if(poprawnie_wypelniony) $_SESSION['etap']++;
break;
}
?>
Matimor
23.08.2009, 10:00:44
Tam gdzie instrukcja dodać treść formularza?
A nie lepiej by było zrobić całą rejestracje na action w 1 pliku ?
Quantum
23.08.2009, 10:08:09
mówiąc instrukcje miałem na myśli i formularz i kod, który sprawdza jego poprawność jeśli jest poprawny przechodzi do następnego etapu, wszystko byłoby wtedy w jednym pliku, a action zostaw puste lub wogóle nie dodawaj go do <form>..ale nie jestem zwolennikiem mieszania logiki z widokiem, MVC FTW.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.