[PHP]Token, postęp i problem

0

Witam wszystkich. Udało mi się coś tam zmotać z tokenem, ale mam problem, za każdym razem otrzymuje komunikat, że token jest zły, nawet gdy przepiszę go dobrze.

Mój kod wygląda tak:

<?php
function sprawdz()
{
	$token = $_POST['token'];
	if($token == $_SESSION['token'])
	{
		$_SESSION['token'] = 0;
		return 1;
	}
	else 
	{
		$_SESSION['token'] = 0;
		return 0;
	}
}
include('functions/bbc.php');
include('include/db.php');
echo '<h2>Kontakt</h2>';
$zapytanie = "SELECT * FROM `kontakt` WHERE `id`='1'";
$idzapytania = mysql_query($zapytanie);
while ($wiersz = mysql_fetch_array($idzapytania))
{
	echo ''.stripslashes(bbc($wiersz['tresc'])).'<br />';
}
if(!isset($_COOKIE['kontakt']))
{
	if(isset($_POST['tresc']))
	{
		echo '<div align="center"><form action="/kontakt.html" method="post"><br />
		Nick:<br /><input type="text" name="nick" value="'.$_POST['nick'].'" /><br />
		Twój email:<br /><input type="text" name="email" value="'.$_POST['email'].'" /><br />
		Temat:<br /><input type="text" name="temat" value="'.$_POST['temat'].'" /><br />
		Treść:<br /><textarea name="tresc" cols="30" rows="10">'.$_POST['tresc'].'</textarea><br />';
		switch(rand(0,1))
		{
			case 0:
			echo 'Podaj pierwsza i ostatnia cyfre: '; 
			$rand = rand(100, 9999);
			echo $rand;
			$_SESSION['token'] = substr($rand,0,1).substr($rand,-1);
			echo '<br /><input type="text" name="token" /><br /><br />';
			break;
			case 1:
			echo 'Podaj wynik dzialania: ';
			$r1 = rand(1,10);
			$r2 = rand(1,10);
			switch(rand(0,1))
			{
				case 0:
				echo $r1 .'-'. $r2. '=';
				$_SESSION['token'] = $r1-$r2;
				break;
				case 1:
				echo $r1 .'+'. $r2. '=';
				$_SESSION['token'] = $r1+$r2;
				break;
			}
			echo '<br /><input type="text" name="token" /><br /><br />';
			break;
		}
		echo '<input class="przycisk_kontakt" name="wyslij" type="submit" value="Wyślij" />
		<input class="przycisk_kontakt" name="wyczysc" type="reset" value="Wyczyść" /></form><br /><br /></div>';
	}
	else
	{
		echo '<div align="center"><form action="/kontakt.html" method="post"><br />
		Nick:<br /><input type="text" name="nick" /><br />
		Twój email:<br /><input type="text" name="email" /><br />
		Temat:<br /><input type="text" name="temat" /><br />
		Treść:<br /><textarea name="tresc" cols="30" rows="10"></textarea><br />';
		switch(rand(0,1))
		{
			case 0:
			echo 'Podaj pierwsza i ostatnia cyfre: '; 
			$rand = rand(100, 9999);
			echo $rand;
			$_SESSION['token'] = substr($rand,0,1).substr($rand,-1);
			echo '<br /><input type="text" name="token" /><br /><br />';
			break;
			case 1:
			echo 'Podaj wynik dzialania: ';
			$r1 = rand(1,10);
			$r2 = rand(1,10);
			switch(rand(0,1))
			{
				case 0:
				echo $r1 .'-'. $r2. '=';
				$_SESSION['token'] = $r1-$r2;
				break;
				case 1:
				echo $r1 .'+'. $r2. '=';
				$_SESSION['token'] = $r1+$r2;
				break;
			}
			echo '<br /><input type="text" name="token" /><br /><br />';
			break;
		}
		echo '<input class="przycisk_kontakt" name="wyslij" type="submit" value="Wyślij" />
		<input class="przycisk_kontakt" name="wyczysc" type="reset" value="Wyczyść" /></form><br /><br /></div>';
	}
	if(isset($_POST['wyslij'])) 
	{
		if(empty($_POST['nick']) or empty($_POST['email']) or empty($_POST['temat']) or empty($_POST['tresc']) or empty($_POST['token'])) 
		{
			echo '<div align="center"><font color="red"><b>Wypełnij wszystkie pola formularza!</b></font></div><br />';
		}
		elseif(!$_POST["email"] || !preg_match("/^[-0-9a-zA-Z_\.]+@([-0-9a-zA-Z_\.]+\.)+([0-9a-zA-Z]){2,4}$/i", $_POST["email"]))
		{
			echo '<div align="center"><font color="red"><b>Podany email jest nieprawidłowy!</b></font></div><br />';
		}
		elseif(sprawdz() != 1)
		{
			echo '<div align="center"><font color="red"><b>Podany kod weryfikujący jest nieprawidłowy!</b></font></div><br />';
		}
		else
		{
			setcookie("kontakt", 1, time()+10*60);
			setcookie('waznosc_ciasteczka', time(), time()+10*60);
			$message = 'Nick: '.$_POST['nick'].'<br /> email: '.$_POST['email'].'<br /> Temat: '.$_POST['temat'].'<br /> Treść: '.$_POST['tresc'].'';
			$naglowki = 'From: '.$_POST['email'].''.PHP_EOL.'Reply-To: '.$_POST['nick'].''.PHP_EOL.'Content-type: text/html; charset=utf-8';
			mail('[email protected]', 'Wiadomość ze strony WWW', $message, $naglowki);
			echo '<div align="center"><font color="green"><b>Wiadomość została wysłana poprawnie!</b></font></div><meta http-equiv="Refresh" content="3; url=/kontakt.html" /><br />';
		}
	}
}
else
{
	$waznosc_ciasteczka = ceil(10-(($_COOKIE['waznosc_ciasteczka']-time())/60)*(-1));
	echo '<div align="center"><font color="green"><br /><b>Nie można wysłać ponownie wiadomości.<br />Prosimy spróbować za ';
	if($waznosc_ciasteczka>4)
	{
		echo ''.$waznosc_ciasteczka.' minut.</b></font></div>';
	}
	elseif($waznosc_ciasteczka==1)
	{
		echo 'minutę.</b></font></div>';
	}
	elseif($waznosc_ciasteczka<=4)
	{
		echo ''.$waznosc_ciasteczka.' minuty.</b></font></div>';
	}
}
mysql_close($connect);
?>

Wyświetlając na ekran zmienne: $_SESSION['token'] oraz $token otrzymuje od $_SESSION['token'] to co mam wpisać teraz, a od zmiennej $token to co wpisałem przed przeładowaniem strony.
Proszę o pomoc :)
Z góry dziękuje :)
Pozdrawiam.

0

A masz zawsze na początku dokumentu wywołanie funkcji session_start(); ?

0

Tak. session_start(); jest.

0

Rozwiązane :)

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