ugrás a tartalomhoz

Bejelentkezési hiba

Laszlo14 · 2012. Már. 16. (P), 21.40
Van egy login rendszerem. A hibája az, hogy ha valaki rossz adatot ír be (pl nincs az adatbázisban olyan felhasználónév) és ezt a rossz adatot elküldi, akkor kiírja a hibát, de ha még egyszer elküldi, akkor beengedi az oldalra. Ezt hogy lehetne kiküszöbölni? Ez a kódom:

<?php

	if($_POST['login']){
	$name=mysql_real_escape_string(trim($_POST['name']));
	$pass=mysql_real_escape_string(md5($_POST['pass']));
		$login=true;
		if(!$name){
			echo "<div id='error2'>Add meg a felhasználóneved</div>";
			$login=false;
		}
		
		if(!$pass){
			echo "<div id='error2'>Add meg a jelszavad</div>";
			$login=false;
		}
		
		if($login){
			$result=mysql_query("SELECT * FROM user WHERE name='$name' AND pass='$pass'");
			while($row=mysql_fetch_array($result)){
				$name=$row['name'];
				$acti=$row['acti'];
			}
			
			if(mysql_num_rows($result)!=1){
				echo "<div id='error2'>Hibás felhasználónév és/vagy jelszó</div>";
				$login=false;
			}elseif($acti!=2){
				echo "<div id='error2'>Nincs megerősítve regisztrációd</div>";
				$login=false;
			}
			
			if($login){
				$_SESSION['name']=$name;
				$_SESSION['login']=true;
				?><script>window.location=window.location;</script><?php
			}
		}
	}
	
?>
<form method="POST">
<input type="text" name="name" placeholder="Felhasználónév" />
<input type="password" name="pass" placeholder="Jelszó" />
<p><input type="submit" name="login" value="Belépek" id="submit" /></p>
<p><a href="register.php">Regisztráció</a><br />
<a href="forgottpass.php">Elfelejtett jelszó</a></p>
</form>
 
1

$pass

Poetro · 2012. Már. 16. (P), 22.04
Azt ugye tudod, hogy a $pass sose lesz üres, ergo a hozzá kapcsolódó hibaüzenet sose fog megjelenni? Valamint jó lenne, ha az $acti értékének valami értéket adnál a lekérdezés előtt, csak hogy elkerüljük a register_globals bekapcsolása esetén felmerülő biztonsági rést. JavaScripttel ne irányítsuk át a felhasználót, használjunk megfelelő hearder utasítást. Valamint biztosan ennyiből áll a kód? Nem lehet, hogy valamit kihagytál az elején vagy a végén?
2

1. Köszi, hogy mondtad a

Laszlo14 · 2012. Már. 16. (P), 23.37
1. Köszi, hogy mondtad a $pass változót, mert nem jöttem rá, hogy miért nem írja ki a hiba üzenetet.
2. Azért irányítok át JS-el, mert a header-rel mindig csak a bajvan, 10-ből 8-szor hibát kapok rá vissza. :D
3. Igen ennyi a kód.
3

2

janoszen · 2012. Már. 17. (Szo), 04.17
Nem a headerrel van a baj, hanem a programozó háza tájám. Muti a kódot, had segítsünk vele!
5

Output header előtt

gabesz666 · 2012. Már. 17. (Szo), 11.56
Gondolom kimegy már valami az outputra a header előtt, de egy hibaüzenet tényleg sokat tudna segíteni
6

Nincs semmi hiba kód, mert

Laszlo14 · 2012. Már. 17. (Szo), 23.13
Nincs semmi hiba kód, mert régóta nem használom a header-t átirányításra. Azt is tudom, hogy akkor nem működik ha van előtte html kimenet. A JS viszont szerintem sokkal könnyebben használható.
4

$pass

H.Z. v2 · 2012. Már. 17. (Szo), 09.20
$pass=mysql_real_escape_string(md5($_POST['pass']));

Ennek így mi értelme?
Az md5 (bocs, nem néztem utána, de gondolom, ez beépített PHP függvény) egy hexadecimális stringet ad vissza, abban tutira nem lesz mit escape-elni. Valamit rosszul tudok?
7

Az md5() függvény egy 32

Laszlo14 · 2012. Már. 17. (Szo), 23.15
Az md5() függvény egy 32 karakteres számokat, kis- és nagybetűket tartalmazó karaktersorozatot hoz létre.
8

Közelítőleg

H.Z. v2 · 2012. Már. 18. (V), 01.11
Közben megnéztem a PHP doksit is:
Return Values

Returns the hash as a 32-character hexadecimal number.

Részben igaz: a visszaadott érték numerikus, valamint a-f tartományba tartozó karaktereket tartalmazhat.
De még ha a te variációd lenne igaz, akkor is feleslegesnek tűnik az escape-elés.
9

szerintem írasd ki a 18.

szabo.b.gabor · 2012. Már. 18. (V), 07.54
szerintem írasd ki a 18. sorban átadott query-t hátha rájössz mi okozza a problémát.