Autor Zpráva
xtrip
Profil
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
nak to moc nechapu ale nevim proc neudelas to porovnani primo pomoci mysql

SELECT * FROM users WHERE nick='".$login."' AND pass='".$pass."'
xtrip
Profil
A JAK DAL ? mám tohle hodit nějak do podmínky 'if' ?
Kalby
Profil
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
Hází mi to chybu na řádku s $pocet=mysql_num_rows($vysledek); :(
Kalby
Profil
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
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
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
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
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
Děkuju! Vše funguje jak má, teda jen to co se týče přihlášení, se zbytkem si poradím.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0