Autor | Zpráva | ||
---|---|---|---|
Vojko Profil |
#1 · Zasláno: 22. 9. 2012, 09:41:52
Dobrý deň,
chcel by som Vás požiadať o pomoc. Mám jednoduchý formulár, ktorý by som chcel aby odosielal dáta do MySQL. Neviem avšak kde mám chybu. Formulár: <form action="input.php" method="post"> <input class="form_input" id="date" name="date" type="text"> <input class="form_input" id="test1" name="test1" type="text"> <input class="form_input" id="test2" name="test2" type="text"> </form A toto obsahuje input.php: <?php $con = mysql_connect("HOST","UZ.MENO","HESLO"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("TU SOM VYPLNIL MENO DB", $con); $sql="INSERT INTO Persons (Date, Test, Test2) VALUES ('$_POST[date]','$_POST[test1]','$_POST[test2]')"; if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); } echo "1 record added"; mysql_close($con); ?> Ďakujem za každú pomoc. |
||
Hando Profil |
#2 · Zasláno: 22. 9. 2012, 10:12:18
Ahoj.
A co ti to vypisuje za chyby? Vypiš si proměnnou sql pomocí echa a uvidíš, jestli je v ní to, co očekáváš. Krom toho vůbec neošetřuješ vstupy od uživatele, což není dobrý nápad. |
||
noName Profil * |
#3 · Zasláno: 22. 9. 2012, 10:16:10
Zkus:
$sql="INSERT INTO Persons (Date, Test, Test2) VALUES ('{$_POST[date]}','{$_POST[test1]}','{$_POST[test2]}')"; |
||
jenikkozak Profil |
#4 · Zasláno: 22. 9. 2012, 10:19:32
noName:
To nemůže žádnou chybu opravit. |
||
Vojko Profil |
#5 · Zasláno: 22. 9. 2012, 17:24:11
Hando tak nemáš nejaký hotový kód ?
Pretože nevyznám sa v tom :/ |
||
SIFLER Profil |
#6 · Zasláno: 22. 9. 2012, 18:31:36
Stačí vám bohatě toto:
<?php $con = mysql_connect('host', 'user', 'pass'); mysql_select_db('db'); if(!$con){ die('Chyba v připojení k MySQL.'); } mysql_query("INSERT INTO Persons (Date, Test, Test2) VALUES ('$_POST[date]','$_POST[test1]','$_POST[test2]')"); ?> Místo POST proměnných použijte celé, které převedte na ně a zároveň je ošetříte. Takže zápis by mohl vypadat nějak takto: mysql_query("INSERT INTO Persons (Date, Test, Test2) VALUES ('$date','$test1','$test2')"); |
||
Hando Profil |
#7 · Zasláno: 22. 9. 2012, 19:58:59
Trochu bych to poupravil:
[pre]<?php $con = mysql_connect('host', 'user', 'pass'); mysql_select_db('db'); if(!$con){ die('Chyba v připojení k MySQL.'); } $date=mysql_real_escape_string($_POST["date"]); $test1=mysql_real_escape_string($_POST["test1"]); $test2=mysql_real_escape_string($_POST["test2"]); $insert="INSERT INTO Persons SET Date='$date', Test='$test1', Test2='$test2' "; $insert=mysql_query($insert); if (isset($insert)){ echo "Uloženo"; } else{ echo("chyba při vkládání!"); } ?> Takhle bys měl být informován o tom, zda se to vůbec uložilo nebo ne, stejně tak bys měl mít ošetřené vstupy od uživatel prostřednictvím mysql_real_escape_string. Pokud by to dělalo nějaký problém, dá se hned vypsat $insert pomocí echo $insert; a výsledný výstup hodit do konzole mysql, třeba v Admineru nebo PHPMyAdmin - pokud tam nebude chyba, je třeba ji hledat jinde. Píšu to v rychlosti, snad tam nejsou chyby... |
||
jenikkozak Profil |
#8 · Zasláno: 22. 9. 2012, 20:54:02
Hando:
Tvá podmínka vypíše „Uloženo“ bez ohledu na úspěch ukládání do databáze. |
||
SIFLER Profil |
#9 · Zasláno: 22. 9. 2012, 21:19:42
Proboha, hlavně neescapujte, stačí:
$date = htmlspecialchars($_POST['date'], ENT_QUOTES); A jinak ověření zda-li se to vůbec uložilo můžeš mnoha způsoby, ale když máš preciznost v kódu tak nemusíš vůbec kontrolovat zda-li se to uložilo tímto způsobem, ale spíže kontrolovat zda proměnné odpovídají parametrům, které chceš aby byly. Takže řekněme, že uložení můžeš provést až v tom případě, jak si budeš jist, že tvoje proměnné odpovídají tomu co přesně chceš. A nemusíš si nad tím lámat hlavu. |
||
Vojko Profil |
#10 · Zasláno: 22. 9. 2012, 22:25:52
Nóó tak teraz v tom mám guláš jak sviň. :D
Ako má teda vypadať finálna verzia kódu ? :D |
||
Alphard Profil |
#11 · Zasláno: 22. 9. 2012, 22:38:47
SIFLER:
„Proboha, hlavně neescapujte, stačí:“ Před ukládáním do databáze? Takováto rada přímo škodí. Jestli to nemůžete nějak obhájit, upravte prosím svůj příspěvek, ať nemate, nebo k tomu asi dopíši komentář já. [#10] Vojko Trochu samostatnosti. Existuje hodně možných způsobů. Ano, v tomto vlákně vzniká bordel, ale vy sám se ho nesnažíte řešit. Ráno sem nahrajete "nefunkční" kód s nepopsaným problémem. O půl šesté se jen zeptáte na hotový kód a teď svou žádost víceméně jen zopakujete. |
||
SIFLER Profil |
#12 · Zasláno: 22. 9. 2012, 23:03:35
Alphard:
V mé radě nebylo to co škodí, co stačí jsem napsal. Tak jaký je problém?.. |
||
Alphard Profil |
#13 · Zasláno: 22. 9. 2012, 23:17:32
htmlspecialchars($_POST['date'], ENT_QUOTES); není náhrada za mysql_real_escape_string(), nebo myslíte, že ano? Konkrétně se mi nelíbí vaše rada „hlavně neescapujte“, myslím, že by měla znít opačně, nezapomeň escapovat.
|
||
Časová prodleva: 12 let
|
0