Autor Zpráva
Ondra Sojka
Profil
Dobrý den,
mám kód pro registraci uživatele do DB (ano, nekontroluji, zda toto jméno už existuje, opravím později) a stále nemůžu najít chybu. Ať dělám, co dělám. Potřebuji, aby mi tu chybu našel někdo, kdo ji bude hledat všude, protože já asi hledám špatně.

Kód:
 <?
    $user = mysql_real_escape_string(htmlspecialchars($_POST['user']));
    $pass = hash("sha256",$_POST['pass']); //no need to escape, we are hashing this
    $passcheck = hash("sha256",$_POST['passcheck']);
    $explodedmail = explode("@",$_POST['email']);
    $escapedemail = mysql_real_escape_string($_POST['email']); //escaping clears that @, so we're escaping after explosion
    $email = $_POST['email']; //we need to send welcome mail!!
    if($user == "" || $pass == "" || $email == ""){
      if($pass == $passcheck){
        if(checkdnsrr($explodedmail[1])){  //checking only if mail domain exists
          $dbname = "packyourself";
          $spojeni = mysql_connect("localhost", "packyourselfuser", "ano, heslo jsem skryl :D") or Die(MySQL_Error());
          mysql_select_db($dbname, $spojeni) or Die(MySQL_Error());
          mysql_query("INSERT INTO users VALUES ('','$user','$escapedemail','$pass')");
          print('Byl jsi zaregistrovan.<br>');
          $headers = "From: Tým nabalse <tym@nabalse.comehere.cz>\r\n";
          $headers .= "MIME-Version: 1.0\r\n";
          $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
          mail($email,"Nabalse.cz - vítej!",'<img src="http://nabalse.comehere.cz/logo.png"><br>Ahoj, právě jsi se zaregistroval na nabalse.cz. Děkujeme ti za to a doufáme, že ti posloužíme.<br>Pokud máš nápad, jaký seznam věcí přidat, nebo jsi našel chybu, pošli ji na seznamy@nabalse.comehere.net. Budeme rádi.',$headers);
          print('Byl ti odeslán uvítací e-mail.');
        }else{
          print("Toto není validní e-mailová adresa.");
        }
      }else{
        print('Zadaná hesla se neshodují.');
      }
    }else{
      print("Vyplňte všechny pole.");
    }
  ?>

Problém je, že do databáze to přidá hash, a ID se auto-incrementuje, ovšem 2. sloupec (user) a 3. sloupec (email) zůstává prázdný.
PHP žádné chyby nehází.


Áha, zapnul jsem zobrazování VŠECH chyb, a už to hází, že mysql escapování nefunguje, když nejsem připojen...
Tori
Profil
Na ř.8 je opačná podmínka.
A zkontrolujte si, zda máte správně názvy polí z formuláře.
htmlspecialchars na ř.2 je nesmysl, proč escapujete do kontextu HTML, když to jde do DB?
Ondra Sojka
Profil
Už to funguje. Mám téma smazat, nebo ho tu mám nechat pro ostatní, "vždyť ho tu někdo najde"?


Proč tak escapuji - protože jsem jednou jeden web nechal kamarádům otestovat, tak si zkusili dát jako nicky HTML kódy, a hned se to celý rozházelo... (když máte nick jako </div>blackmeister...)
Tori
Profil
Ondra Sojka:
zkusili dát jako nicky HTML kódy, a hned se to celý rozházelo
Escapujte na výstupu. Anebo můžete rovnou při registraci provádět validaci, že nick obsahuje pouze alfanum. znaky, podtržítko, tečku, pomlčku a mezeru.
lionel messi
Profil
Ondra Sojka:
Ešte doplním: je lepšie začínať sekvencie PHP kódu <?php namiesto <? a nespoliehať sa na nastavenie direktívy short_open_tags.

Mám téma smazat, nebo ho tu mám nechat pro ostatní, "vždyť ho tu někdo najde"?
Jednoznačne nechať pre ostatných, témy sa tu nemažú a bežne ani nezamykajú. :-)

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: