Autor | Zpráva | ||
---|---|---|---|
xtrip Profil |
#1 · Zasláno: 5. 2. 2008, 22:52:28
Dobrý den, z formuláře odešlu této podmínce if($login==$zaznam["nick"] && $pass==$zaznam["pass"]) data $login a $pass a čekám než-li to ověřu z daty v databázi. V DB je jich více, takže u nekonečného cyklu while to v případě špatně zadaných údajů hodí chybu tolikrát, kolik je záznamu v tabulce. Uvádím jeste cely kod:
include_once('mysql.php'); $dotaz = MySQL_Query("SELECT * FROM users ORDER BY id DESC"); while($zaznam = MySQL_Fetch_Array($dotaz)): if($session==='1') { if($login==$zaznam["nick"] && $pass==$zaznam["pass"]) {if($remember==="1") {$cok2 = setcookie ("nazev", "$login", time() + 60*60*24*365, "", "server"); $cok3 = setcookie ("nazev", "$pass", time() + 60*60*24*365, "", "server"); echo $cok2;echo $cok3;} $cok = setcookie ("nazev", "LVFR", time() + 60*60*24*365, "", server"); echo $cok;header("Location: index.php?session=2");} else {echo "<div style='background: red;font-weight: bold;text-align:center;'>Nick or password is incorret</div><br>"; break;} } endwhile; zkoušel jsem použít break; , ale funguje to jen u posledního vloženého záznamu, uživatelé registrovaní dřívé to nepustí. |
||
Kalby Profil |
#2 · Zasláno: 5. 2. 2008, 23:11:24
nak to moc nechapu ale nevim proc neudelas to porovnani primo pomoci mysql
SELECT * FROM users WHERE nick='".$login."' AND pass='".$pass."' |
||
xtrip Profil |
#3 · Zasláno: 5. 2. 2008, 23:12:51
A JAK DAL ? mám tohle hodit nějak do podmínky 'if' ?
|
||
Kalby Profil |
#4 · Zasláno: 5. 2. 2008, 23:18:09
no trebas takhle
$vysledek=("SELECT * FROM users WHERE nick='".$login."' AND pass='".$pass."'"); $pocet=mysql_num_rows($vysledek); if($pocet==0){ echo "spatne heslo nebo jmeno"; } else{ echo "OK"; } nebo muzes vyuzit funkci COUNT (*) |
||
xtrip Profil |
#5 · Zasláno: 5. 2. 2008, 23:23:46 · Upravil/a: xtrip
Hází mi to chybu na řádku s $pocet=mysql_num_rows($vysledek); :(
|
||
Kalby Profil |
#6 · Zasláno: 5. 2. 2008, 23:26:52
no tak napis jakou chybu, nejspis mas ale spatne sestavenej dotaz, jak jsem to napsal ja to je orientacni nevim jak tam mas promenne
|
||
xtrip Profil |
#7 · Zasláno: 5. 2. 2008, 23:29:13 · Upravil/a: xtrip
nemam to vubec zmenee, promenne $login a $pass jdou přímo na ten script kterej je ma overit a dle správnosti rict "spatne" nebo "správně" . (kdyztak icq: 484077848) ... tady je tam chyba este
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /3w/xf.cz/o/of-corse/livefire/index.php on line 26 spatne heslo nebo jmeno |
||
Joker Profil |
#8 · Zasláno: 5. 2. 2008, 23:32:19
Kalby
Poznámka: ne že by to byla přímo chyba, ale doporučil bych si hned od začátku pěstovat jeden vcelku užitečný návyk- vyhýbat se konstrukci "SELECT *". Je zbytečné vybírat bůhvíkolik sloupců, když vlastně nepotřebuju ani jeden z nich. Samozřejmě úplný extrém je kód v prvním příspěvku, kdy si xtrip nechá vrátit celou tabulku, aniž by fakticky potřeboval byť i jediný údaj v ní. Takže, pokud potřebuju jen ověřit přezdívku, udělal bych to takhle: $vysledek = mysql_query("SELECT nick FROM users WHERE nick='$nick' AND pass='$pass') or die("chyba!"); $prihlaseny = mysql_result($vysledek,0); // víc než 1 záznam bych neměl nikdy dostat if($prihlaseny){ echo("Přihlášený uživatel: $prihlaseny"); } else die("Nesprávné jméno nebo heslo!"); |
||
xtrip Profil |
#9 · Zasláno: 5. 2. 2008, 23:36:50
Vypadá to že to je celkem funkční, akorát při zadání špatného hesla to hodi chybu:
Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 5 in /3w/xf.cz/o/of-corse/livefire/index.php on line 27 a řádek 27 je: $prihlaseny = mysql_result($vysledek,0); // víc než 1 záznam bych neměl nikdy dostat :( už to skoro je! |
||
DJ Miky Profil |
#10 · Zasláno: 6. 2. 2008, 00:29:41
Všechno pod prvním řádkem dej do podmínky pro mysql_num_rows(), která ověří počet řádků (tzn. jestli se vůbec nějaký vybral):
$vysledek = mysql_query("SELECT nick FROM users WHERE nick='$nick' AND pass='$pass') or die("chyba!"); if(mysql_num_rows($vysledek)) { $prihlaseny = mysql_result($vysledek,0); // víc než 1 záznam bych neměl nikdy dostat if($prihlaseny){ echo("Přihlášený uživatel: $prihlaseny"); } else die("Nesprávné jméno nebo heslo!"); } else die("Nesprávné jméno nebo heslo!"); Jiným řešením by bylo dát zavináč před mysql_result, to by potlačilo onu hlášku: $prihlaseny = @mysql_result($vysledek,0); // víc než 1 záznam bych neměl nikdy dostat Ale to první řešení je lepší. |
||
xtrip Profil |
#11 · Zasláno: 6. 2. 2008, 18:35:22
Děkuju! Vše funguje jak má, teda jen to co se týče přihlášení, se zbytkem si poradím.
|
||
Časová prodleva: 15 let
|
0