Autor | Zpráva | ||
---|---|---|---|
sasam Profil * |
#1 · Zasláno: 25. 8. 2017, 09:04:18
Zdar,
mám formulář ve kterém jsou checkboxy a když některý z nich neodskrtnu a poslu formular, tak aby se zapsal do databaze jako prazne pole. Mne to dela chybu, ze neni definovaná hodnota a proto mi to neodesle dal do databaze. if (!isset($_REQUEST['odeslat']) ) { $datum = trim($_REQUEST['date']); $datum = strip_tags($datum); $datum = htmlspecialchars($datum); $pes = trim($_REQUEST['pes']); $pes = strip_tags($pes); $pes = htmlspecialchars($pes); $kocka = trim($_REQUEST['kocka']); $kocka = strip_tags($kocka); $kocka = htmlspecialchars($kocka); $sql="INSERT INTO zvire(datum, pes, kocka) VALUES('$datum','$pes','$kocka')"; if ($db->query($sql) === TRUE) { header("Location: vysledek.php"); }else { echo "chyba"; } } |
||
M4n Profil * |
#2 · Zasláno: 25. 8. 2017, 09:11:03
Kromě toho, že tento skript nedává smysl, je taky nebezpečný (neošetřené vstupy do databáze) a navíc není jasné, jaká data odesílá ten formulář.
|
||
sasam Profil * |
#3 · Zasláno: 25. 8. 2017, 09:25:22
jak nedava smysl?
formular vypada takto <form method="POST" action="poslano.php"> <input type="hidden" name="date" value="<?php echo $_REQUEST['date']; ?>" /> <ul> <li> <input name="pes" value="1" type="checkbox"> </li> <li> <input name="kocka" value="1" type="checkbox"> </li> </ul> <input type="submit" value="Odesli" name="odeslat"> |
||
Tomášeek Profil |
#4 · Zasláno: 25. 8. 2017, 09:30:03
sasam:
Obrácená podmínka na prvním řádku (pokud není odeslán formulář, zpracuj), nesmyslné ošetření jednotlivých položek (htmlspecialchars v databázi nemá co dělat), chybějící kontrola checkboxu (to je to, co chceš). Kdybys nejprve zkusil cokoliv najít, zjistil bys, že se nezaškrtnuté checkboxy neposílají, nejsou tedy v $_POST/GET/REQUEST . Pro ověření jejich zaškrtnutí slouží isset .
|
||
sasam Profil * |
#5 · Zasláno: 25. 8. 2017, 09:34:40
takto nejak?
if (isset($_REQUEST['odeslat']) ) { $datum = trim($_REQUEST['date']); $datum = strip_tags($datum); $pes = trim($_REQUEST['pes']); $pes = strip_tags($pes); $kocka = trim($_REQUEST['kocka']); $kocka = strip_tags($kocka); $sql="INSERT INTO zvire(datum, pes, kocka) VALUES('$datum','$pes','$kocka')"; if ($db->query($sql) === TRUE) { header("Location: vysledek.php"); }else { echo "chyba"; } } |
||
Tomášeek Profil |
sasam:
„takto nejak?“ Pokud to funguje dle tvých představ, pak ano. Ale spíše ne. Zkus si znovu přečíst #4, je v něm napsáno v podstatě krok po kroku, co a jak máš kontrolovat, vezmu-li v úvahu, že se jedná o checkboxy. Datum trpí na SQL injection. Čili, abych to nějak shrnul. Na řádcích 3-10 máš aktuálně nesmysly. Kontrola checkboxu se dělá jinak než validace data (zde ještě doplním, ideální je kontrolovat správnost formátu regulárem, aby datum nebylo "abc"). V DB se jinak ošetřují (escapují) stringy a jinak čísla. Jak ověřit checkbox jsem ti napsal doslovně, do databáze pak asi přijde 0 nebo 1, nejčastěji se kontrola checkboxu používá rovnou v kombinaci s ternárním operátorem (další věc k nastudování). |
||
Časová prodleva: 6 let
|
0