Diskuze: Nefunkční checkbox
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Pokud chceš mít z PHP možnost načítat více možností z jedné skupiny inputů, dělá se to přes [] takto
<input type="checkbox" name="skupina[]" value="value1" />Možnost 1<br />
<input type="checkbox" name="skupina[]" value="value2" />Možnost 2<br />
<input type="checkbox" name="skupina[]" value="value3" />Možnost 3<br />
V PHP se ti pak do $_POST['skupina'] uloží pole teď hodnot, může to například takto vypsat:
<?php
if (isset($_POST['skupina'])) {
$optionArray = $_POST['skupina'];
for ($i=0; $i<count($optionArray); $i++) {
echo $optionArray[$i]."<br />";
}
}
?>
Pokud chceš vždy jen jednu možnost z výběru, jak chápu podle tvého SQL dotazu, tak použij type="radio".
Když použiji [] tak se mi do databáze zapíše "Array".
Zároveň mi to hodilo hlášku "Notice: Array to string conversion in
/home/users/.../Db.php on line 61.
Musí tam dělat bordel ten textový input.
Ne, zde chci mít možnost volby více věcí (rohlík,houska).
No, chová se to přesně tak, jak jsem popsal, že se to má chovat...
Tvoje $_POST['pecivo'] je pole, to znamená, že ho nemůžeš uložit jako text. Pokud chceš pospojovat položky pole, čímž mimochodem nedodržíš atomicitu databáze, použij třeba PHP funkci join(),
echo join(",", $_POST['pecivo']);
Možná by bylo rozumné si něco o databázích a PHP naučit, ať nevaříš ze zakalené vody.
Kdyby ti řešení s join nefungovalo tak já ve svoji aplikaci tento problém řešim tímto způsobem.
$pecivo = implode(" ",$_POST['pecivo']);
Tohle pomohlo, je to funkční ovšem na začátku dokumentu je hláška
Notice: Undefined index: pecivo in /home/users/..
Warning: implode(): Invalid arguments passed in /home/users/...
Ale formulář se zobrazí, a když jej vyplním a odešlu tak chybovka zmizí.
Notice: Undefined index: pecivo in /home/users/.. toto je jen upozornění že jsi předem nedefinoval pečivo. Osobně jsem smysl toho varování nikdy nepochopil a vyřešíš ho tak že kod bude vypadat takto.
$pecivo = "";
$pecivo = implode(" ",$_POST['pecivo']);
Druhá hláška ti řiká něco ve smyslu že pecivo není definován jako array. Skus tam vložit toto.
$pecivo = array();
$pecivo = "";
$pecivo = implode(" ",$_POST['pecivo']);
Trochu si pohraj s prvním a druhým řádkem a měl by jsi to zprovoznit bez chyb ale jsem amatér, takže nic nezaručuju .
ZKusím to první, při nejhorším vypnu na hostingu vyhazování erorů
To druhé jsem vyřešil takto
$pecivo = implode(', ', (array)$_POST["pecivo"]);
Ta hláška se dá správně vyřešit pomocí isset, jak jsem psal někde nahoře v ukázkovém použití, ne?
Trochu nechápu to tvé "Kdyby ti řešení s join nefungovalo", jelikož join() a implode() je to samé (aliasy). http://stackoverflow.com/…4016/3281252
Negoogloval jsem činost join() jen jsem viděl dotaz na problém, který jsem taky řešil. Promiň za sebrané řešení .
V pohodě. Řešení mi je jedno, kdybych chtěl řešení tak si to přepnu sám a nikomu si nestěžuji.
Jen jsem konstatoval, že to je to samé.
Zobrazeno 12 zpráv z 12.