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