Autor | Zpráva | ||
---|---|---|---|
bobby Profil |
#1 · Zasláno: 14. 2. 2016, 22:03:35
Ahoj, mám tento problém, při prvním načtení stránky se do databáze zapíšou nulové hodnoty, potom ale po správném vyplnění formuláře se nic nezapíše. Zkoušel jsem všechno možné... Chyba je asi v umístění sql dotazu ale přesně nevím.. Díky za rady.
<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <script> /* function kontrola () { var zprava = ""; if(document.getElementsByName("nazev")[0].value==""){ zprava ="Nezadal jste jméno." } if(document.getElementsByName("kategorie")[0].value==""){ zprava +="\nNezadal jste kategorii." } if(document.getElementsByName("znacka")[0].value==""){ zprava +="\nNezadal jste znacku." } if(document.getElementsByName("velikost")[0].checked==false&&document.getElementsByName("velikost")[1].checked==false&&document.getElementsByName("velikost")[2].checked==false){ zprava +="\nNezadal jste velikost." } if(zprava==""){ return true; } else {alert(zprava); return false;} } */ </script> <body> <?php include "./pripojeni.php"; if(isset($_POST["odeslat"])){ if(($_POST["nazev"]=="")){ echo "Nezal jste jméno."; } else if(($_POST["kategorie"]=="")){ echo "Nezal jste kategorii."; } else if(($_POST["znacka"]=="")){ echo "Nezal jste znacku."; } else if(!isset($_POST["velikost"])){ echo "Nezal jste velikost."; } } else { if (isset($_POST["skladem"])){ $_POST["skladem"]=1; } else {$_POST["skladem"]=0; } $vlozeni="INSERT INTO `kola`.`kola` (`id`, `nazev`, `id_kategorie`, `znacka`, `skladem`, `velikost`) VALUES (NULL, '{$_POST["nazev"]}', '{$_POST["kategorie"]}', '{$_POST["znacka"]}', '{$_POST["skladem"]}', '{$_POST["velikost"]}');"; if(mysqli_query($spojeni, $vlozeni)){ echo "Úspěšně vloženo.";} else {echo "Nebylo vloženo";} } ?> <form action="vlozeni.php" method="POST" > <label>Název</label><input type="text" name="nazev"><br> <label>Kategorie</label><select name="kategorie"> <option value=""></option> <?php $data= mysqli_query($spojeni, "SELECT * from kategorie"); while ($zaznam = mysqli_fetch_array($data)) { echo "<option value ='{$zaznam["id"]}'>{$zaznam["nazev"]}</option>"; } ?> </select><br> <label>Značka</label><input type="text" name="znacka"><br> <label>Skladem</label><input type="checkbox" name="skladem"><br> <label>Velikost</label><br> 26<input type="radio" name="velikost" value="26"><br> 27<input type="radio" name="velikost" value="27"><br> 29<input type="radio" name="velikost" value="29"><br> <input type="submit" name="odeslat" value="ODESLAT"><br> </form> </body> </html> |
||
Taps Profil |
#2 · Zasláno: 14. 2. 2016, 22:23:03
Co ti zobrazi mysqli_error()?
|
||
Keeehi Profil |
#3 · Zasláno: 14. 2. 2016, 22:27:02
Na řádku 57 nemají ty uvozovky uvnitř řetězce co dělat. A ty složené závorky tam jsou jen zvytečně.
S problémem to nesouvisí, ale vkládáte do databáze neošetřená data. To je obrovské bezpečnostní riziko. |
||
Lonanek Profil |
Logicky to máte postavené tak, že pokud není stisknuto tlačítko odeslat, uloží se záznam do databáze. Pokud je tlačítko stisknuto, pouze se provede kontrola na prázdné hodnoty a nic víc.
Také se domnívám, že nemáte správně podmínky else if, mělo by to končit chybou. Pokud to má být v jedné podmínce, pak by mělo být použito elseif(). Celá ta konstrukce podmínek je tak trochu podivná. Ostatní popsali již výše. Nevím jestli tohle je přesně to co jste zamýšlel, ale zkuste: <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <script> /* function kontrola () { var zprava = ""; if(document.getElementsByName("nazev")[0].value==""){ zprava ="Nezadal jste jméno." } if(document.getElementsByName("kategorie")[0].value==""){ zprava +="\nNezadal jste kategorii." } if(document.getElementsByName("znacka")[0].value==""){ zprava +="\nNezadal jste znacku." } if(document.getElementsByName("velikost")[0].checked==false&&document.getElementsByName("velikost")[1].checked==false&&document.getElementsByName("velikost")[2].checked==false){ zprava +="\nNezadal jste velikost." } if(zprava==""){ return true; } else {alert(zprava); return false;} } */ </script> <body> <?php include "./pripojeni.php"; if (isset($_POST["odeslat"])) { if ($_POST["nazev"]=="") { echo "Nezal jste jméno."; } elseif ($_POST["kategorie"]=="") { echo "Nezal jste kategorii."; } elseif ($_POST["znacka"]=="") { echo "Nezal jste znacku."; } elseif (!isset($_POST["velikost"])) { echo "Nezal jste velikost."; } else { if (isset($_POST["skladem"])) { $skladem=1; } else { $skladem=0; } } $vlozeni="INSERT INTO `kola`.`kola` (`nazev`, `id_kategorie`, `znacka`, `skladem`, `velikost`) VALUES ('". $_POST["nazev"] ."', '". $_POST["kategorie"] ."', '". $_POST["znacka"] ."', '". $skladem ."', '". $_POST["velikost"] ."');"; if (mysqli_query($spojeni, $vlozeni)) { echo "Úspěšně vloženo."; } else { echo "Nebylo vloženo"; } } ?> <form action="vlozeni.php" method="POST" > <label>Název</label><input type="text" name="nazev"><br> <label>Kategorie</label><select name="kategorie"> <option value=""></option> <?php $data= mysqli_query($spojeni, "SELECT * from kategorie"); while ($zaznam = mysqli_fetch_array($data)) { echo "<option value ='{$zaznam["id"]}'>{$zaznam["nazev"]}</option>"; } ?> </select><br> <label>Značka</label><input type="text" name="znacka"><br> <label>Skladem</label><input type="checkbox" name="skladem"><br> <label>Velikost</label><br> 26<input type="radio" name="velikost" value="26"><br> 27<input type="radio" name="velikost" value="27"><br> 29<input type="radio" name="velikost" value="29"><br> <input type="submit" name="odeslat" value="ODESLAT"><br> </form> </body> </html> Neřeším bezpečnostní korekci vstupů! Tu musíte vyřešit sám. Např. mysqli_real_escape_string() pro řetězce a int() pro numerické hodnoty. |
||
bobby Profil |
#5 · Zasláno: 15. 2. 2016, 07:20:18
Lonanek:
Po menších úpravách kód funguje podle představ, ještě jednou děkuju... |
||
Časová prodleva: 9 let
|
0