Autor Zpráva
sasam
Profil *
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 *
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 *
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
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 *
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í).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: