Autor | Zpráva | ||
---|---|---|---|
Jan Žák Profil |
#1 · Zasláno: 14. 11. 2015, 18:37:19
Dobrý den,
rád bych Vás požádal o pomoc s vložení dat z formuláře do DB. Mám vytvořený tento script: <?php require_once 'config.php'; $error=""; if (isset($_POST['submit'])) { if (empty($_POST['q1'])) { $error = '<h2>Prosím vložte jméno!</h2><h2>Prosím, vraťte se zpět.</h2>'; } else { $q1 = $_POST['q1']; } if (empty($_POST['q2'])) { $error = '<h2>Prosím vložte datum narození!</h2><h2>Prosím, vraťte se zpět.</h2>'; } else { $q2 = $_POST['q2']; } if (empty($_POST['q3'])) { $error = '<h2>Prosím vložte email!</h2><h2>Prosím, vraťte se zpět.</h2>'; } else { if (filter_var($_POST['q3'], FILTER_VALIDATE_EMAIL)) { $q3 = $_POST['q3']; } else { $error = '<h2>Vaše emailová adresa není platná</h2><h2>Prosím, vraťte se zpět.</h2>'; } } if (empty($_POST['q4'])) { $error = '<h2>Prosím vložte heslo!</h2><h2>Prosím, vraťte se zpět.</h2>'; } else { $q4 = $_POST['q4']; } $q5 = mysql_real_escape_string(htmlspecialchars($_POST['q5'])); $q6 = mysql_real_escape_string(htmlspecialchars($_POST['q6'])); $q7 = mysql_real_escape_string(htmlspecialchars($_POST['q7'])); $q8 = mysql_real_escape_string(htmlspecialchars($_POST['q8'])); $q9 = mysql_real_escape_string(htmlspecialchars($_POST['q9'])); if (empty($error)) { $query = "SELECT * FROM soutez WHERE q3 = '$q3'"; $result = mysql_query($query); if (!$result) { $error = '<h2>Nastala chyba při vkládání!</h2><h2>Prosím, vraťte se zpět.</h2>'; } if (mysql_num_rows($result) == 0) { $sql = "INSERT INTO soutez (q1, q2, q3, q4, q5, q6, q7, q8, q9) VALUES ('$q1', '$q2', '$q3', '$q4', '$q5', '$q6', '$q7', '$q8', '$q9')"; $result = mysql_query($sql); if (!$result) { $error = '<h2>Nastala chyba při vkládání!</h2><h2>Prosím, vraťte se zpět.</h2>'; } if (mysql_affected_rows() == 1) { $error = '<h2>Děkujeme vám za registraci!</h2><h2>Vyčkejte na výsledky losování.</h2>'; } else { $error = '<h2>Nelze se zaregistrovat!</h2><h2>Omlouváme se za nepříjemnosti.</h2>'; } } else { $error = '<h2>Email byl již registrován!</h2><h2>Nelze se registrovat dvakrát!</h2>'; } } mysql_close(); } ?> Data z formuláře se předají, ale neuloží, zkusil jsem vypis dat přes var_dump a i zde byla data přítomna. Databázovou tabulku mám v pořádku, žadná chyba se nevyskytne, script vypíše hlášku: Nelze se zaregistrovat! Myslím, že to bude jen nějaká hloupost, ale jak do toho koukám, nedokážu zjistit co je špatně. Děkuji za každou pomoc. |
||
Monkeys Profil * |
#2 · Zasláno: 14. 11. 2015, 18:49:21
Jan Žák:
Ak je tabulka cisto len na registraciu a ma presne 9 stlpcov tak v dotaze mozete vynechat nazvy stlpcov. $sql = "INSERT INTO soutez VALUES ('$q1', '$q2', '$q3', '$q4', '$q5', '$q6', '$q7', '$q8', '$q9')"; M. |
||
Dan Charousek Profil |
#3 · Zasláno: 14. 11. 2015, 18:53:14
Jan Žák:
Nevyjádřím se přímo k problému, ale při v kládání do databáze htmlspecialchars() vynech. Escapování na této úrovni by se mělo provádět až při výpisu.
Vypíše se nějaká chyba? Zkusil bych si vypsat výsledný dotaz: echo $sql; a vložit ho ručně do databáze.
|
||
lionel messi Profil |
#4 · Zasláno: 14. 11. 2015, 18:58:44
Monkeys:
> Jan Žák: > Ak je tabulka cisto len na registraciu a ma presne 9 stlpcov tak v dotaze mozete vynechat nazvy stlpcov. A čo ak bude chcieť pridať desiaty stĺpec? Navyše tento „zlepšovák“ evidentne problém autora nerieši. Jan Žák: Funkcia htmlspecialchars je použitá nesprávne, vždy sa volá až pri výpise dát do stránky, nikdy nie pri ukladaní do databázy. Naopak premenné $q1 $q2 $q3 $q4 neošetruješ escapovaním.
|
||
Jan Žák Profil |
#5 · Zasláno: 14. 11. 2015, 19:15:16
Monkeys, Dan Charousek, lionel messi:
Pánové, děkuji Vám všem, příkaz echo $sql pomohl, chyba byla při vkládání datumu do db, při výpisu jsem neměl správný format data :) Nyní je vše v pořádku. Děkuji i za informaci o htmlspecialchars, opravil jsem si to. Hezký den. |
||
Časová prodleva: 8 let
|
0