| 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: 11 let
|
|||
0