Autor Zpráva
Nevim
Profil *
Ahoj, možná mám trochu banální problém, ale nějak jsem se tu zasekl. Když jsem to zkoušel odpoledne, fungovalo to a najednou nic, tak nevím co s tím:
if(!empty($_POST))
  echo "Chyba";
else
  echo "Ok";
Stále mi to vypisuje Chyba, ikdyž mám formulář vyplněný. Dřív jsem používal if($_POST["input"] == ""), ale když máte formulář s 20 kolonkama tak je to trošku dlouhý, jak se dá taková kontrola formuláře dělat?
TomasJ
Profil
if(empty($_POST))
To by mělo potom jít :-)
Měl jsi tam negaci (!) a tedy jsi měl podmínku pokud(není prázdná($_POST)) echo "Chyba";
Someone
Profil
Nevim:
Jen bych rád zdůraznil, že jak jsi mluvil o 20 kolonkách, tak ti projde i toto
$pole = array("jedna", "dve", "tri", "ctyri", "");
if(empty($pole)) {
echo "Pole je prázdné";
} else {
echo "Pole není prázdné";
}
tzn., že ti to i při jedné vyplněné kolonce vypíše, true. Nejsem si jistý, jestli je to to, co potřebuješ proto to radši zmiňuju.
edit: oprava, vypíše false jako že NENÍ prázdné, což se ti podle mě nehodí.
TomasJ
Profil
Someone:
V tom máš asi pravdu...

Nevim:
Pokud chceš čistě jen ověřit, jestli je nějaká proměnná prázdná nebo nulová (za předpokladu že je vytvořená), stačí ti if($_POST['input']) echo "Neni prazdne";.
Pokud hodnota může být nulová, použil bych asi if(empty($_POST['input'])) echo "Je prazdne.";.
Nejspíš ti bude PHP vypisovat (pokud máš zaplé) Poznámky (Notice) o tom, že proměnná neexistuje atp. Na to je podmínka if(isset($_POST['input'])).
Keeehi
Profil
if(!isset($_POST))
    echo "Formulář nebyl odeslán";
else
    echo "Formulář byl odeslán";

if(in_array("",$_POST))
    echo "Ve formuláři je alespoň jedna prázdná položka";
else
    echo "Všechny položky byly vyplněny";
 
Nevim
Profil *
Tak to empty vůbec nefunguje, nevím proč, zkoušel jsem to co psal Keeehi s tím empty a nejde to. Až to in_array funguje, díky
Jenom dotaz, proč jsou v tom in_array ty prázdné uvozovky?
Keeehi
Profil
Nevim:
Protože empty u polí neleze dovnitř polí do hodnot ale kontroluje, zda tam nějaké jsou.

empty vrací true, pokud proměnná je: "" (prázdný řetězec), 0 (0 jako integer), 0.0 (0 jako float), "0" (0 jako řetězec), NULL, FALSE, array() (prázdné pole), nebo do ní nebyla ještě přiřazena žádná hodnota.
isset vrací true, pokud je proměnná definována a zároveň není její hodnota NULL

Jenom dotaz, proč jsou v tom in_array ty prázdné uvozovky?
Funkce in_array() hledá v poli nějakou položku. Pokud ji najde, vrací true jinak false. Ty dvě uvozovky jsou prázdný řetězec a to se snaží ta funkce najít -> pokud je v poli kdekoliv prázdný řetězec, vrací se true.
Bertram
Profil
Nevim:
Ahoj, pokud nevyžaduješ žádnou validaci odeslaných dat, tak bude stačit ověřit existenci odesílacího tlačítka v $_POST.
Jinak si můžeš validaci zjednodušit funkcí, které předáš došlé data z formuláře společně s polem povinných inputů.
Pomocí této funkce ti odpadne nutnost psát if() pro každý input formuláře. "těch tvých dvacet"
Nevim
Profil *
No existenci tlačítka ověřovat nemůžu, potřebuju vědět, jestli ve formuláři byli vyplněny všechny položky. dělal jsem to if($_POST["pole1"] == "" &&$_POST["pole2"] == "" ) atd ale ten if byl třeba i na 3 řádky.
Funkce in_array() hledá v poli nějakou položku. Pokud ji najde, vrací true jinak false. Ty dvě uvozovky jsou prázdný řetězec a to se snaží ta funkce najít -> pokud je v poli kdekoliv prázdný řetězec, vrací se true

in_array() zatím funguje, akorát nechápu to že hledá prázdný řetězec, já tam přece žádný nemám. nevrací náhodou při prázdným řetězci false?
TomasJ
Profil
Nevim:
Jak psal Keeehi v [#5] a [#7], in_array("",$_POST) vrátí true, pokud se v $_POST alespoň jednou nachází takový řetězec (prázdný). Tzn. že když se takový nenajde (prázdný), všechny položky jsou vyplněné, a vrací se false.
Bertram
Profil
Nevim:
Nástin možného řešení, je tam ještě co vylepšovat, každopádně je to spustitelné a funkční, můžeš si to vyzkoušet.
<?php
header('Content-Type: text/html; charset=utf-8');

$required = array("jmeno", "prijmeni", "email");

function validate($data, $required) {
    foreach ($data as $key => $value) {
        if (in_array($key, $required)) {
            if (trim($value) == "") {
                $errors[$key] = "$key je povinný údaj";
            }
        }
    }
    return isset($errors) ? $errors : $errors = array();
}

function getValue($inputName){
    return isset($_POST[$inputName]) ? $_POST[$inputName] : "";
}

if (isset($_POST["send"])) {
    $errors = validate($_POST, $required);
    if (empty($errors)) {
        echo "Data v pořádku";
        var_dump($_POST);
    } else {
        echo "Nastaly chyby:";
        echo var_dump($errors);
    }
}
?>
<html>
    <body>
        <form action="" method="post">
            <p>Jméno: <input type="text" required="required" name="jmeno" value="<?php  echo getValue('jmeno'); ?>" /></p>
            <p>Příjmení: <input type="text" required="required" name="prijmeni" value="<?php echo getValue('prijmeni'); ?>" /></p>
            <p>Email: <input type="text" required="required" name="email" value="<?php echo getValue('email'); ?>" /></p>
            <p>Nepovinné: <input type="text" name="nepovinne" value="<?php echo getValue('nepovinne'); ?>" /></p>
            <p><input type="submit" name="send" value="odeslat" /></p>
        </form>
    </body>
</html>

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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