Autor Zpráva
zvanec
Profil
Dobrý den mohl by mi prosím někdo poradit kde dělám chybu hláška byl jsi přihlášen jako xxx se prostě neukáže :( děkuji


<?php  
  $tlacitko = $_POST["tlacitko"];
  if ($tlacitko) {
  $nick = $_POST["nick"];
  $heslo = $_POST["heslo"];
  $heslo = md5(md5($heslo));
    mysql_connect("mysql.ic.cz", "ic_xxx", "xxx"); 
    mysql_select_db("ic_xxx");
    $dotaz = mysql_query("SELECT * FROM uzivatele WHERE nick='".mysql_real_escape_string($nick)."' AND heslo='$heslo' ;");
                      while($vystup = mysql_fetch_object($dotaz))
                      {
                        $id = $vystup->id;
                        $nickDB = $vystup->nick;
                        $hesloDB = $vystup->heslo;
                        $email = $vystup->email;
                        $opravneni = $vystup->opravneni;
                      }
     if($nick == $nickDB AND $heslo == $hesloDB){
       $_SESSION["id"] = $id;
       $_SESSION["nick"] = $nick;
       $_SESSION["email"] = $email;
       $_SESSION["opravneni"] = $opravneni;
       echo "Byl jsi přihlášen jako $nick";
     }
                    
  }
  ?>

Moderátor panther: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Someone
Profil
To není dobré řešení, jednoduše zkontroluj, zda existuje daný řádek s heslem a jménem a na základě toho přihlaš uživatele..:
if (isset($_POST['tlacitko'])) {
   $nick = mysql_real_escape_string($_POST['nick']);
   $heslo = md5(md5($_POST['heslo']));
    mysql_connect("mysql.ic.cz", "ic_xxx", "xxx"); 
    mysql_select_db("ic_xxx");
    $dotaz = mysql_query("SELECT * FROM uzivatele WHERE uzivatele.nick='".$nick."' AND uzivatele.heslo='".$heslo."'");
    $pocet_radku = mysql_num_rows($dotaz);
    if ($pocet_radku == 1) {
       $vysledek = mysql_fetch_assoc/array/object($dotaz);
       $_SESSION["id"] = $vysledek['id'];
       $_SESSION["nick"] = $vysledek['nick'];
       $_SESSION["email"] = $vysledek['email'];
       $_SESSION["opravneni"] = $vysledek['opravneni'];
       echo "Byl jsi přihlášen jako ".$vysledek['nick'];
   } else {
       echo "Uživatel s touto kombinací Jméno Heslo neexistuje";
   }
}
edit: pravda, neuvědomil jsem si, že dochází k vypisování údajů... Takže viz.: [#3] Tori
Tori
Profil
Zjistěte si, kde přesně se to začne chovat jinak, než čekáte (např. tím, že si tam nasypete hlášky typu echo "první podmínka ok, formulář odeslán";).
- Chybí session_start(); na začátku skriptu
- Dostane se skript dovnitř podmínky (= možnost překlepu v názvu form.pole nebo metody)?
- Vrací dotaz nějaké odpovídající záznamy? viz mysql_num_rows
- Je zbytečné tam tahat cyklus, když očekáváte max. jeden odpovídající řádek z DB. Kontrola hesla + nicku už proběhne v dotazu, je zbytečné dělat ji znova na ř.18 (=možnost další chyby).
     $dotaz = mysql_query("SELECT * FROM uzivatele WHERE nick='".mysql_real_escape_string($nick)."' AND heslo='$heslo'");
     if (mysql_num_rows($dotaz) > 0)  {
       $uzivatel = mysql_fetch_object($dotaz);
       $_SESSION["id"] = $uzivatel->id;
       $_SESSION["nick"] = $uzivatel->nick;
       $_SESSION["email"] = $uzivatel->email;
       $_SESSION["opravneni"] = $uzivatel->opravneni;
       echo "Byl jsi přihlášen jako $nick.";
     } else {
       echo "Špatné jméno nebo heslo, zkus to znova.";
     }



Someone:
Jen drobnost: nemělo by se používat mysql_real_escape_string před připojením k databázi. Ta funkce přihlíží k nastavené znak. sadě pro toto DB připojení. Bez existujícího DB připojení sice taky escapuje apostrofy apod., ale mohla by vyhazovat varování.

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: