Autor Zpráva
Hasii
Profil *
    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 *
Co dělá ten řádek 5?
Hasii
Profil *
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
Hasii:
Hm, on nic neoveruje :D Ak sa nic nenajde, tak ti to vrati NULL.
okolojdouci
Profil *
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 *
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 *
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
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 *
Rozhodně lepší a ve finále přehlednější kód, díky.

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