Autor | Zpráva | ||
---|---|---|---|
Ondra Sojka Profil |
#1 · Zasláno: 27. 8. 2014, 20:09:45 · Upravil/a: Ondra Sojka
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 |
#3 · Zasláno: 27. 8. 2014, 20:17:23 · Upravil/a: Ondra Sojka
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 |
#5 · Zasláno: 28. 8. 2014, 11:21:15
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ú. :-) |
||
Časová prodleva: 10 let
|
0