Autor | Zpráva | ||
---|---|---|---|
johy Profil * |
#1 · Zasláno: 14. 2. 2012, 14:35:09
Zdravím,
mám menší problém a nevím si s ním rady. Mám shoutbox v php. Do něho mohou vkládat zprávy normální uživatelé a administrátoři, kteří mají chráněný nick na heslo. V databázi mám uložené všechny nicky, které by měly být chráněné. Bohužel, pokud mám v databázi více jak jeden chráněný nick, tak funguje vždy pouze nick, který je v databázi na posledním místě, tedy ten, který byl přidaný jako poslední. Na ukázku přidávám kód. $jak = mysql_query("SELECT * FROM uni"); //uni = (chráněná jména) while($pole = mysql_fetch_array($jak)) { $st = $pole['jmeno']; $pass = $pole['heslo']; $heslo = $_POST['heslo']; $heslo = md5($heslo); } if ($sl == $st ){ if ($pass == $heslo){ // pro chráněná jména mysql_query('SET NAMES CP1250'); mysql_query('SET COLLATION_CONNECTION=CP1250_GENERAL_CI'); $jmeno = '<u><font title="Autorizovaný nick" color="red">'.$_POST['jmeno'].'</u>: </font>'; //design chráněných jmen $vzkaz = $_POST['vzkaz']; $datum = Date("j. m. Y | H:i:s", Time()); $vloz = mysql_query("INSERT INTO shoutbox (`jmeno`, `vzkaz`, `ip`, `datum` ) VALUES ('{$jmeno}', '{$vzkaz}', '$REMOTE_ADDR', '{$datum}' ) "); header('Refresh: 1'); } else{ echo "Nick, který jste zadal je chráněný a potřebuje heslo"; } } |
||
Keeehi Profil |
#2 · Zasláno: 14. 2. 2012, 14:48:32
johy:
U z logiky věci nesmíš dovolit vytvořit duplicitní nick. |
||
Ugo Profil |
#3 · Zasláno: 14. 2. 2012, 14:55:55
přiřazuješ stále do jedněch proměnných,
while($pole = mysql_fetch_array($jak)) { $st = $pole['jmeno']; $pass = $pole['heslo']; $heslo = $_POST['heslo']; $heslo = md5($heslo); } čili na konci bude právě ta poslední hodnota, udělej jinak dotaz na DB - dej do něj výběr podle jména tak aby vybral vždy jeden řádek nebo do while dej přímo kontrolu či si tam dělej pole a pak kontroluj místo "==" přes in_array(); |
||
johy Profil * |
#4 · Zasláno: 14. 2. 2012, 18:13:22
Pokud by mi někdo poskytl inspirativní kód jak na to, byl bych jedině rád :)
|
||
Dědek Profil |
#5 · Zasláno: 14. 2. 2012, 19:44:08
A nebylo by celkově lepší udělat to nějak takto:
$user_query = mysql_query("SELECT heslo FROM uni WHERE jmeno = \'". mysql_real_escape_string($_POST['jmeno'])."\' LIMIT 1"); //zjistíme zda existuje nick zadaný uživatelem if(mysql_num_rows($user_query) > 0) { //nick v databázi existuje if(md5($_POST['heslo']) == mysql_result($user_query, 0, 0)) { //zkontrolujeme správnost hesla //provedeme akce pro ověřeného uživatele } else { //heslo nám nesouhlasí echo "Nick, který jste zadal je chráněný a potřebuje heslo"; } } else { //nick nebyl v databázi nalezen, tudíž jej lze použít volně //provedeme akce pro NEověřeného uživatele } Je to z hlavy snad tam nebude žádná chyba... |
||
johy Profil * |
#6 · Zasláno: 14. 2. 2012, 20:04:10
Díky za snahu, ale bohužel. Stále stejný problém s tím rozdílem, že teď si to nevezme poslední řádek v DB, ale první :D
|
||
Dědek Profil |
#7 · Zasláno: 14. 2. 2012, 20:15:08
Moje blbost, ten první řádek
$user_query = mysql_query("SELECT heslo FROM uni WHERE jmeno = '". mysql_real_escape_string($_POST['jmeno'])."' LIMIT 1"); //zjistíme zda existuje nick zadaný uživatelem |
||
johy Profil * |
#8 · Zasláno: 14. 2. 2012, 20:30:56 · Upravil/a: johy
No, teď je to nějaký celý divoký, každopádně už to rozezná i ostatní chráněná jména, což se mi nedařilo udělat. Zbytek už snad něják dořeším. Moc dík za pomoc!
Oukej, definitivně vyřešeno, velké poděkování patří Dědkovi :) Díky. |
||
Dědek Profil |
Klidně se ptej dál...
Ale v základu teď stačí v daných blocích vytvořit příslušný vzhled dat pro ověřený/neověřený nick a zavolat vložení do databáze. Jen malá připomínka, pro uložení data a času bych používal typ sloupce timestamp, nebo datetime viz. manuál MySQL, myslím, že Ti to do budoucna ušetří práci, například s řazením podle data. |
||
johy Profil * |
#10 · Zasláno: 14. 2. 2012, 20:45:44
Jojo, to datum vím že není vhodný, změním, dík za připomínku. Chráněné nicky už fungují tak jak mají :)
|
||
Časová prodleva: 12 let
|
0