[PHP]Formularz wielopoziomowy

0

Witam.
Po raz kolejny piszę formularz wielopoziomowy tym razem jest pięć poziomów. Dwa pierwsze poziomy działają, lecz przechodząc do następnego pokazuje się właśnie on ale nad nim pokazuje się jeszcze raz regulamin...

KOD:

<h2>Rejestracja</h2>
<?php
include('include/db.php');
if(!isset($_POST['akcept']))
{
	$regulamin = "SELECT * FROM `regulamin`";
	$idregulamin = mysql_query($regulamin);
	while($wiersz = mysql_fetch_array($idregulamin))
	{
		echo ''.stripslashes(bbc($wiersz['tresc'])).'';
	}
	echo '<form action="index.php?page=rejestracja" method="post">
	<br /><input type="submit" name="akcept" value="Akceptuj regulamin" /><br /><br />
	</form>';
}
elseif(isset($_POST['akcept']))
{
	$info = "SELECT * FROM `info`";
	$idinfo = mysql_query($info);
	while($wiersz = mysql_fetch_array($idinfo))
	{
		echo ''.stripslashes(bbc($wiersz['tresc'])).'';
	}
	echo '<form action="index.php?page=rejestracja" method="post">
	<input type="hidden" value="akcept" name="1" />
	<br /><input type="submit" name="dalej" value="Przejdź dalej" />
	</form>';
}
if(isset($_POST['dalej']))
{
	$quiz = "SELECT * FROM `quiz`";
	$idquiz = mysql_query($quiz);
	while($wiersz = mysql_fetch_array($idquiz))
	{
		echo ''.stripslashes(bbc($wiersz['pytanie'])).'';
		echo '<textarea name="tresc" cols="50" rows="10" id="textarea" id="textarea"></textarea>';
	}
	echo '<form action="index.php?page=rejestracja" method="post">
	<input type="hidden" value="dalej" name="1" />
	<br /><input type="submit" name="quiz" value="Wyślij" />
	</form>';
}
if(isset($_POST['quiz']))
{
	echo '<form action="index.php?page=rejestracja" method="post">
	<input type="hidden" value="quiz" name="1" />
	Login: <br /><input type="text" name="login" value="Podaj tu swój nick OOC. Swoją postać stworzysz w panelu." /><br />
	Hasło: <br /><input type="password" name="haslo1" /><br />
	Powtórz hasło: <br /><input type="password" name="haslo2" /><br />
	Email: <br /><input type="text" name="email1" /><br />
	Powtórz email: <br /><input type="text" name="email2" /><br />
	Płeć: <br /><select name="plec" id="id_plec">
	<option value="0">Wybierz...</option>
	<option value="1">Mężczyzna</option>
	<option value="2">Kobieta</option>
	</select><br /><br />
	<input type="submit" name="rejestracja" value="Zarejestruj się" />
	</form>';
}
if(isset($_POST['rejestracja']))
{
	$info = "SELECT * FROM `koniec`";
	$idinfo = mysql_query($info);
	while($wiersz = mysql_fetch_array($idinfo))
	{
		echo ''.stripslashes(bbc($wiersz['tresc'])).'';
	}
	echo '<form action="index.php?page=rejestracja" method="post">
	<input type="hidden" value="rejestracja" name="1" />
	<br /><input type="submit" name="koniec" value="Zakończ rejestracje" />
	</form>';
}
if(isset($_POST['koniec']))
{
	echo '<form action="index.php?page=logowanie" method="post">
	<input type="hidden" value="koniec" name="1" />
	Login: <br /><input type="text" name="login" /><br />
	Hasło: <br /><input type="password" name="haslo" />
	<br /><br /><input type="submit" name="loguj" value="Zaloguj się" />
	</form>';
}
mysql_close($connect);
?>
0

Lubie spagetii ale nie w takim wydaniu... ;)

  1. okey, a więc, popatrz:
if(!isset($_POST['akcept']))
  • odpalasz skrypt, warunek jest spełniony ponieważ tablica $_POST jest pusta, wyświetla się button akceptacji regulaminu
  • przechodzisz dalej, teraz w tablicy $_POST jest już indeks "akcept" czyli warunek powyżej nie jest spełniony, jest ok
elseif(isset($_POST['akcept']))
  • jest indeks, więc wchodzimy w ten blok
  • znowu przechodzisz dalej ale tym razem w poście nie ma już "akcept" więc pierwszy warunek znowu jest spełniony
  1. Moim zdaniem bardziej elegancko będzie jeśli do formularza dodasz sobie ukryte pole o stałej nazwie (powiedzmy "akcja").
    Poźniej, w kolejnych formularzach będziesz zmieniał tylko jego wartość (value).
    Choć najwygodniej było by zrobić to na metodzie GET.

  2. Jeśli skorzystasz z pkt. 2 będziesz mógł wykorzystać switch (+1 dla czytelności)

  3. Dobrym zwyczajem jest nie używać w zapytaniach SQL gwiazdki

  4. Ja zamiast pisać:

echo 'bardzo dlugi 
tekst na
pare linijek';

wolę taki zapis:

echo 'bardzo dlugi';
echo 'tekst na';
echo 'pare linijek';
0

Nie mogę zrobić GET ponieważ chcę, żeby użytkownik przeszedł przez wszystkie kroki, a tak to wpisze sobie index.php?page=formularz czy coś innego i będzie po quizie.

W każdym kroku mam takie coś

<input type="hidden" value="akcept" name="1" />

i nie pomaga.

piochu napisał(a)

Lubie spagetii ale nie w takim wydaniu... ;)

  1. Moim zdaniem bardziej elegancko będzie jeśli do formularza dodasz sobie ukryte pole o stałej nazwie (powiedzmy "akcja").
    Poźniej, w kolejnych formularzach będziesz zmieniał tylko jego wartość (value).

Jak ma wyglądać ten hidden ze zmienianą wartością?

0
nansss napisał(a)

W każdym kroku mam takie coś

<input type="hidden" value="akcept" name="1" />

i nie pomaga.

[...]

Jak ma wyglądać ten hidden ze zmienianą wartością?

Bo nigdzie tego nie wykorzystujesz.
Po prostu... w kolejnych formularzach dodajesz to ukryte pole o takiej samej nazwie ale jako wartość ustawiasz nawę kolejnej akcji. Później w kodzie php piszesz: switch ($_POST['akcja']) aaa dalej sobie już poradzisz

poza tym

<input type="hidden" value="akcept" name="1" />

Dlaczego tak?

nansss napisał(a)

Nie mogę zrobić GET ponieważ chcę, żeby użytkownik przeszedł przez wszystkie kroki, a tak to wpisze sobie index.php?page=formularz czy coś innego i będzie po quizie.

Można się przed tym zabezpieczyć np. dzięki sesji.

0

Dodaje.

Cały kod:

<h2>Rejestracja</h2>
<?php
include('include/db.php');
if(isset($_POST['login']))
{
	$login = strip_tags(htmlspecialchars(mysql_real_escape_string($_POST['login'])));
	$haslo = strip_tags(htmlspecialchars(mysql_real_escape_string(md5(sha1($_POST['haslo']))))); 
	$haslo2 = strip_tags(htmlspecialchars(mysql_real_escape_string(md5(sha1($_POST['haslo2'])))));
	$email = strip_tags(htmlspecialchars(mysql_real_escape_string($_POST['email'])));
	$email2 = strip_tags(htmlspecialchars(mysql_real_escape_string($_POST['email2'])));
	if(isset($_POST['organizacja']))
	{
		$organizacja = strip_tags(htmlspecialchars(mysql_real_escape_string($_POST['organizacja'])));
	}
	$plec = strip_tags(htmlspecialchars(mysql_real_escape_string($_POST['plec'])));
	if(isset($_POST['0']))
	{
		$funkcja = strip_tags(htmlspecialchars(mysql_real_escape_string($_POST['0'])));
	}
	$szukajlogin = "SELECT COUNT(*) FROM user WHERE login='$login'";
	$idszukajlogin = mysql_query($szukajlogin);
	$zajetylogin[1] = mysql_fetch_row($idszukajlogin);
	$szukajemail = "SELECT COUNT(*) FROM user WHERE email='$email'";
	$idszukajemial = mysql_query($szukajemail);
	$zajetyemail[2] = mysql_fetch_row($idszukajemial);
}
if(!isset($_POST['akcept']))
{
	$regulamin = "SELECT * FROM `regulamin`";
	$idregulamin = mysql_query($regulamin);
	while($wiersz = mysql_fetch_array($idregulamin))
	{
		echo ''.stripslashes(bbc($wiersz['tresc'])).'';
	}
	echo '<form action="index.php?page=rejestracja" method="post">
	<br /><input type="submit" name="akcept" value="Akceptuj regulamin" /><br /><br />
	</form>';
}
elseif(isset($_POST['akcept']))
{
	$info = "SELECT * FROM `info`";
	$idinfo = mysql_query($info);
	while($wiersz = mysql_fetch_array($idinfo))
	{
		echo ''.stripslashes(bbc($wiersz['tresc'])).'';
	}
	echo '<form action="index.php?page=rejestracja" method="post">
	<input type="hidden" value="akcept" name="1" />
	<br /><input type="submit" name="dalej" value="Przejdź dalej" />
	</form>';
}
if(isset($_POST['dalej']))
{
	$quiz = "SELECT * FROM `quiz`";
	$idquiz = mysql_query($quiz);
	while($wiersz = mysql_fetch_array($idquiz))
	{
		echo ''.stripslashes(bbc($wiersz['pytanie'])).'';
		echo '<textarea name="tresc" cols="50" rows="10" id="textarea" id="textarea"></textarea>';
	}
	echo '<form action="index.php?page=rejestracja" method="post">
	<input type="hidden" value="dalej" name="1" />
	<input type="hidden" value="akcept" name="1" />
	<br /><input type="submit" name="quiz" value="Wyślij" />
	</form>';
}
if(isset($_POST['quiz']))
{
	echo '<form action="index.php?page=rejestracja" method="post">
	<input type="hidden" value="quiz" name="1" />
	<input type="hidden" value="akcept" name="1" />
	Login: <br /><input type="text" name="login" value="Podaj tu swój nick OOC. Swoją postać stworzysz w panelu." /><br />
	Hasło: <br /><input type="password" name="haslo" /><br />
	Powtórz hasło: <br /><input type="password" name="haslo2" /><br />
	Email: <br /><input type="text" name="email" /><br />
	Powtórz email: <br /><input type="text" name="email2" /><br />
	Płeć: <br /><select name="plec" id="plec">
	<option value="0">Wybierz...</option>
	<option value="1">Mężczyzna</option>
	<option value="2">Kobieta</option>
	</select><br /><br />
	<input type="submit" name="rejestracja" value="Zarejestruj się" />
	</form>';
	$error = '';
	$funkcja = '';
	if(isset($_POST['rejestracja']))
	{
		if(empty($_POST["login"]) or empty($_POST["haslo"]) or empty($_POST["haslo2"]) or empty($_POST["email"]) and !isset($_GET["active"]) and isset($_POST['login']))
		{
			$error .= '<font color="red">Nie wypełniono wszystkich pól.</font><br />';
		}
		if($zajetylogin[1][0]!=0)
		{
			$error .= '<font color="red">Podana nazwa użytkownika jest już zajęta.</font><br />';
		}
		if($zajetyemail[2][0]!=0)
		{
			$error .= '<font color="red">Podany email jest zajęty przez innego użytkownika.</font><br />';
		}
		if(!$_POST["email"] || !preg_match("/^[-0-9a-zA-Z_\.]+@([-0-9a-zA-Z_\.]+\.)+([0-9a-zA-Z]){2,4}$/i", $_POST["email"]))
		{
			$error .= '<font color="red">Podany email jest nieprawidłowy.</font><br />';
		}
		if($_POST['haslo']!=$_POST['haslo2'])
		{
			$error .= '<font color="red">Podane hasła nie są identyczne.</font><br />';
		}
		if(!empty($error))
		{
			echo $error;
		}
		else
		{
			$rejestracja = "INSERT INTO `user` (`login`, `haslo`, `email`, `organizacja`, `plec`, `funkcja`) VALUES ('".$login."', '".$haslo."', '".$email."', '".$organizacja."', '".$plec."', '".$funkcja."')";
			$idrejestracja = mysql_query($rejestracja);
			$emailik = "SELECT `email` FROM `user` ORDER BY `id` DESC";
			$idemailik = mysql_query($emailik);
			$naglowki = "From: [email protected]".PHP_EOL."Reply-To: [email protected]".PHP_EOL."Content-type: text/html; charset=utf-8";
			$wiersz = mysql_fetch_row($idemailik);
			$kod = str_shuffle("qwertyuiopasdfghjklzxcvbnm1234567890");
			mail($email, 'Aktywacja konta na nportfolio.pl', '<br /><b>Witaj na nportfolio.pl!</b><br /><br /><br />Konto <b>'.$login.'</b> zostało zarejestrowane na podany adres e-mail.<br />W celu potwierdzenia rejestracji konta kliknij w poniższy odnośnik:<br /><a href="http://nportfolio.pl/potwierdz/active/'.$kod.'.html">http://nportfolio.pl/potwierdz/active/'.$kod.'.html</a><br /><br />Jeśli nie rejestrowałeś konta o nazwie <b>'.$login.'</b> po prostu zignoruj tego maila.<br /><br /><br />------<br />Wiadomość wygenerowana automatycznie<br />przez serwis nportfolio.pl', $naglowki);
			$klucz = "UPDATE admin SET klucz = ('".$kod."') WHERE funkcja = 0";
			$idklucz = mysql_query($klucz);
		}
	}
}
if(isset($_POST['rejestracja']))
{
	$info = "SELECT * FROM `koniec`";
	$idinfo = mysql_query($info);
	while($wiersz = mysql_fetch_array($idinfo))
	{
		echo ''.stripslashes(bbc($wiersz['tresc'])).'';
	}
	echo '<form action="index.php?page=rejestracja" method="post">
	<input type="hidden" value="rejestracja" name="1" />
	<input type="hidden" value="akcept" name="1" />
	<br /><input type="submit" name="koniec" value="Zakończ rejestracje" />
	</form>';
}
if(isset($_POST['koniec']))
{
	echo '<form action="index.php?page=logowanie" method="post">
	<input type="hidden" value="koniec" name="1" />
	<input type="hidden" value="akcept" name="1" />
	Login: <br /><input type="text" name="login" /><br />
	Hasło: <br /><input type="password" name="haslo" />
	<br /><br /><input type="submit" name="loguj" value="Zaloguj się" />
	</form>';
}
mysql_close($connect);
?>

1 użytkowników online, w tym zalogowanych: 0, gości: 1