Autor Zpráva
PHPlama
Profil *
Zdravím :-)
Vytvářím aplikaci pro odesílání interních správ mezi uživateli.
Ve formuláři se každému uživateli vytvoří vlastní checkbox a dotyčný zaškrtne, kterým uživatelům má zprávu poslat.

Nyní ale nastal problém, jak takový formulář zpracovat přes PHP, když je počet checkboxů pokaždé jiný.

$i="0";
$komu=MySQL_Query("SELECT * FROM friend WHERE kdoid ='$userid' AND typ='1'");
while ($prijemce = MySQL_Fetch_Array($komu)) {
$kohoid=$prijemce['kohoid'];
?><br><input type="checkbox" name="<?echo $i++;?>" value="<?echo $kohoid ?>"><?}?>


existuje prosím, nějaké řešení? Děkuji :-)

Moderátor Majkl578: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
pcmanik
Profil
PHPlama:
Vytvoris si pole, to prejdes a ziskas hodnoty, kam to mas poslat.
PHPlama
Profil *
pcmanik:
Vytvoris si pole, to prejdes a ziskas hodnoty, kam to mas poslat.

Prosím, mohl bys mi napsat nějaký příklad, jak na to? :-)
Ofi
Profil
stejně jako ho vytváříš:
$i=1;
while(isset($_POST[$i])) {
  $ID = $_POST[$i];
  // následuje zpracování ID .. 
  $i++;
}


ještě bych doporučil používat prefix pro názvy checkboxů:
name="<?php echo "kohoid_".$i++;?>"

a pak by se to četlo stejně:
while(isset($_POST["kohoid_".$i])) {...


pro přehlednost bych také doporučoval inkrementovat proměnnou mimo použití (viz. první ukázka)
php
Profil *
nebo by to šlo třeba taky takhle:
//místo $_GET můžeš mít $_POST záleží jakou metodou odesíláš formulář
foreach( $_GET as $key => $get ){
    echo $key . " = " . $_GET[$key] . "<br/>"; 
    //nějakej kód co chceš dělat s proměnou get
}
//URL = http://localhost/index.php?get=neco&get2=neco2

output:
get = neco
get2 = neco2

php
Profil
Ještě doplním, že ten samý výstup bude, když použiju na řádku 3 místo $_GET[$key] rovnou $get a malý uporoznění, takhel se postupně proleze celý pole
$_GET nebo $_POST
, takže pokud odesílám ve formuláři ještě nějaký jiný inputy,texarea atd., tak by to chtělo ošetřit aby se s nima neprovádělo to samí co s checkboxama.
joe
Profil
Raději bych se nezdržoval u žádných zdejších rad a udělal to správně a lépe:

<input type="checkbox" name="prijemce[<?php echo $kohoid; ?>]">


Po odeslání formuláře zpracuješ pole prijemce v postu:
var_dump($_POST['prijemce']);
PHPlama
Profil *
Ofi:
Tvoje možost mi vždy zpracuje jen některé možnosti, ne všechny záleží na kombinaci :-)

joe:
Nevím, jak mám dál pole zpracovat pokud ho chci např. získané údaje zapsat do databáze?

Zatím, díky :-)
joe
Profil
To co je napsáno tady [#4] Ofi je úplný nesmysl, nepoužívej to. Skončí to hned, jak

- id nepůjdou po sobě (5,1,2,6)
- některé id nebude existovat (1,3,4,..)


PHPlama:
Nevím, jak mám dál pole zpracovat pokud ho chci např. získané údaje zapsat do databáze?
Pokud chceš něco udělat v PHP, měl bys umět alespoň základ - mezi to určitě bude patřit práce s polem.

Pro ukázku, nějak takhle (to je celý PHP soubor, můžeš si to zkusit na localhostu, když si to uložíš)

<form method="post" action="">
<input type="checkbox" name="prijemce[5]">
<input type="checkbox" name="prijemce[3]">
<input type="checkbox" name="prijemce[1]">
<input type="submit" name="send">
</form>

<?php
if(isset($_POST['send'])) { // form byl odeslan
	
	$prijemci = array();
	if(isset($_POST['prijemce'])) { // jsou data pro 'prijemce' v postu
		$prijemci = array_keys($_POST['prijemce']); // do pole $prijemci uloz id prijemcu, kterym chces odeslat zpravu
	}
	
	if(!empty($prijemci)) {
		foreach($prijemci as $prijemceId) {
			echo 'tady posli zpravu pro prijemce ID : ' . $prijemceId . '<br>';
		}	
	} else {
		echo 'zpravu neni komu odeslat';
	}
	
	
}
?>
Ofi
Profil
joe:
je úplný nesmysl, nepoužívej to. Skončí to hned, jak
>
- id nepůjdou po sobě (5,1,2,6)
- některé id nebude existovat (1,3,4,..)
Máš pravdu, úplně jsem zapomněl, že pokud se chb nezaškrtne že se vůbec neodešle a řada se přeruší. Tohle by tedy šlo na dynamický počet inputů-textů např., nikoliv checkboxů.
php
Profil
joe:
To co je napsáno tady [#4] Ofi je úplný nesmysl, nepoužívej to. Skončí to hned, jak
>
- id nepůjdou po sobě (5,1,2,6)

nevím jak možnosti (1,2 - nezkoumal sem jí), ale možnost (5) a k ní dodatek (6), nezkoumá, jak dou id po sobě a je jí to úplně jedno, prostě proleze všechny odeslaný data.
PHPlama
Profil *
Díky moc, mě spíš zajímalo, jak se chová funkce var_dump. Podrobný popis v češtině jsem nenašel :-)


Jinak děkuji :D
joe
Profil
php:
A proč bys měl procházet celé $_GET / $_POST, když znáš konkrétní jméno a pak vynechávat ty, které nechceš?

PHPlama:
var_dump je vypsání proměnné.
php
Profil
Já tady nikoho nenutím, aby procházel celý $_GET / $_POST, jen jsem ukázal jednu z možností, jak by to taky šlo a vypsal sem k tomu i ten nedostatek, že se pak musí ošetřit, aby se do toho nemíchaly i ty ostatní proměnné, nebo je rovnou můžu taky zpracovat už v tom cyklu.

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:

0