Autor | Zpráva | ||
---|---|---|---|
Hasii Profil * |
#1 · Zasláno: 20. 6. 2011, 21:47:43
if(isset($_GET['pokrocile'])) { if(!empty($_POST['login'])) { $login = htmlspecialchars($_POST['login']); $id = (int) $_SESSION['userID']; $allLogin = mysql_result(mysql_query("SELECT login FROM uzivatele WHERE login='$login'"), 0); } else falseMessage('Nebylo vyplněno přihlašovací jméno uživatele'); } Toto je dosavadní kód podmínky, která ovšem zatím kontroluje jen, zda-li byl vyplněn login, potřebuji však zkontrolovat, zda-li již daný login (nový) neexistuje a pokud existuje tak jestli ho má právě tento uživatel a nikoliv jiný. Takže může zadat nový login, který může být stejný jako ten co již měl, ale nesmí být zároveň někoho kdo už účet má s tímto loginem. Děkuji za pomoc |
||
okolojdouci Profil * |
#2 · Zasláno: 20. 6. 2011, 21:53:04
Co dělá ten řádek 5?
|
||
Hasii Profil * |
#3 · Zasláno: 20. 6. 2011, 21:56:30
Vybírá hodnotu, která určí, zda-li už login existuje nebo ne, tudíž vrací 0, když ten login neexistuje.
Teď mě ovšem napadlo, je opravdu nutné mít unikátní loginy? Jaká je pravděpodobnost zadání stejného loginu i hesla? |
||
pcmanik Profil |
#4 · Zasláno: 20. 6. 2011, 22:02:23
Hasii:
Hm, on nic neoveruje :D Ak sa nic nenajde, tak ti to vrati NULL. |
||
okolojdouci Profil * |
#5 · Zasláno: 20. 6. 2011, 22:06:51
Radil bych rozlišovat pouze dvě varianty pravděpodobnosti - nulová a nenulová.
Čeho se snažíš dosáhnout tím skriptem, to jsem nepochopil. |
||
Hasii Profil * |
#6 · Zasláno: 20. 6. 2011, 22:09:14
Ježiši, poslal jsem špatný skript k řešení, omlouvám se:
if(isset($_GET['pokrocile'])) { if(!empty($_POST['login'])) { if(strlen($_POST['login'])>=5 && strlen($_POST['login'])<=64) { if(!empty($_POST['cpass'])) { $id = (int) $_SESSION['userID']; $oldPassword = mysql_result(mysql_query("SELECT heslo FROM uzivatele WHERE id=$id"), 0); if(md5($_POST['cpass'])==$oldPassword) { } else falseMessage('Současné heslo bylo zadáno špatně.'); } else falseMessage('Pro změnu přihlašovacích údajů musíte zadat současné heslo.'); } else falseMessage('Uživatelské jméno musí obsahovat 5-64 znaků.'); } else falseMessage('Prosím vyplňte uživatelské jméno'); } |
||
Hasii Profil * |
#7 · Zasláno: 20. 6. 2011, 22:17:28
Tak jsem to zatím vyřešil takto
// pokročilé informace if(isset($_GET['pokrocile'])) { if(!empty($_POST['login'])) { if(strlen($_POST['login'])>=5 && strlen($_POST['login'])<=64) { if(!empty($_POST['cpass'])) { $id = (int) $_SESSION['userID']; $oldPassword = mysql_result(mysql_query("SELECT heslo FROM uzivatele WHERE id=$id"), 0); if(md5($_POST['cpass'])==$oldPassword) { // chtějí měnit i heslo if(!empty($_POST['pass'])) { if(strlen($_POST['pass'])>=5 && strlen($_POST['pass'])<=128) { if($_POST['pass']==$_POST['pass2']) { trueMessage('Přihlašovací údaje byly úspěšně změněny.'); } else falseMessage('Nová hesla se neshodují'); } else falseMessage('Nové heslo musí pro bezpečnost obsahovat 5-128 znaků.'); } else { trueMessage('Přihlašovací údaje byly úspěšně změněny.'); } } else falseMessage('Současné heslo bylo zadáno špatně.'); } else falseMessage('Pro změnu přihlašovacích údajů musíte zadat současné heslo.'); } else falseMessage('Uživatelské jméno musí obsahovat 5-64 znaků.'); } else falseMessage('Prosím vyplňte uživatelské jméno'); } |
||
Tori Profil |
#8 · Zasláno: 20. 6. 2011, 22:48:49 · Upravil/a: Tori
Hm, a kde se vlastně mění to heslo? Nešlo by něco takového:
if (isset($_GET['pokrocile']) && isset($_POST['login'])) { if(strlen($_POST['login']) < 5 || strlen($_POST['login']) > 64) { falseMessage('Uživatelské jméno musí obsahovat 5-64 znaků.'); } elseif (empty($_POST['cpass'])) { falseMessage('Pro změnu přihlašovacích údajů musíte zadat současné heslo.'); } else { // novy login ma spravnou delku + heslo zadal. Overime heslo: $query = "SELECT login FROM uzivatele WHERE id = " . $_SESSION['userID'] . " AND heslo = '" . md5($_POST['cpass']) . "'"; $uzivatelOpravnen = mysql_result(mysql_query($query), 0); if ($uzivatelOpravnen) { // chce změnit i heslo? if (isset($_POST['pass'])) { if (strlen($_POST['pass']) < 5 || strlen($_POST['pass']) >128) { falseMessage('Nové heslo musí pro bezpečnost obsahovat 5-128 znaků.'); } elseif ($_POST['pass'] != $_POST['pass2']) { falseMessage('Nová hesla se neshodují'); } else { // data ok. Bude se měnit login i heslo. $query = "UPDATE uzivatele SET login = '" . mysql_real_escape_string($_POST['login']) . "' AND heslo = '" . md5($_POST['pass']) . "' WHERE id = " . $_SESSION['userID']; mysql_query($query); } } else { // Bude se měnit jen login. $query = "UPDATE uzivatele SET login = '" . mysql_real_escape_string($_POST['login']) . "' WHERE id = " . $_SESSION['userID']; mysql_query($query); } // Kontrola jestli si neměnil login na stejný, jako má jiný uživatel if (mysql_errno() == '1062') { falseMessage('Takový login již existuje, vyberte si jiný.'); } else { trueMessage('Přihlašovací údaje byly úspěšně změněny.'); } } else { falseMessage('Současné heslo bylo zadáno špatně.'); } } } K tomu ověření již existujícího uživ.jména: předpokládá existenci klíče UNIQUE na sloupci login, tj. nesmí existovat dva řádky se stejnou hodnotou. Použitý postup je od p.Vrány. |
||
Hasii Profil * |
#9 · Zasláno: 21. 6. 2011, 07:43:05
Rozhodně lepší a ve finále přehlednější kód, díky.
|
||
Časová prodleva: 13 let
|
0