Autor Zpráva
Lion76
Profil *
Zdravim, mam dve hlavni podminky, ktere podle $_POST[] pridavaji nebo odebiraji a ja se chci naucit, co nejjednoduseji psat funkcni kod. A proto se ptam, jestli by to neslo nejak spojit a tim to cele zjednodusit? Spojit jsem si to zkousel, ale neco jsem delal spatne, protoze to bylo nefunkcni.

if(isset($_POST['pridat'])){
/* vytvorime nove pole */
$nove = array();
/* odstranime prazdne hodnoty */
$stare = preg_grep("~[^\s]+~", explode(";", $_SESSION['oznaceno']));
/* pokud je hodnota v poli, tak ji pridame do noveho pole */
if(!in_array($_POST['pridat'], $stare)){
$nove[] = $_POST['pridat'];
}
foreach($stare as $klic => $oznacene){
/* pokud jsou v poli dalsi hodnoty, tak je pripojime */
$nove[] = $oznacene;
}
/* provedeme ulozeni */
$_SESSION['oznaceno'] = implode(";", $nove);
}

if(isset($_POST['odebrat'])){
/* vytvorime nove pole */
$nove = array();
/* rozdelime retezec */
$stare = explode(";", $_SESSION['oznaceno']);
foreach($stare as $klic => $hodnota){
/* pokud se hodnoty rovnaji, tak tu hodnotu odstranime a ulozime do pole zbytek hodnot */
if($_POST['odebrat'] == $hodnota){
unset($klic);
} else {
$nove[] = $hodnota;
}
}
/* provedeme ulozeni */
$_SESSION['oznaceno'] = implode(";", $nove);
}
tiso
Profil
Miesto "odebrat" ti stačí vedieť ktoré prvky sa na stránke formulára vyskytujú - tie po odoslaní formu odstráň a všetky čo máš pridať pridaj.
Riešilo sa to tu: http://www.pmasarik.info/61-je-checkbox-zaskrtnuty-alebo-nezaskrtnuty. html
Jan Tvrdík
Profil
Lion76
K čemu to má ve výsledku sloužit? Určitě to půjde napsat líp, ale musíš nám říct, k čemu se to používá :)
Lion76
Profil *
tiso

Dekuji za skvely clanek, cetl jsem ho v rychlosti a jak budu mit cas, tak si to vyzkousim. Ted jsem to prozatim vyresil obrazkem zaskrtnuteho a nezaskrtnuteho checkboxu, takze mam uplny prehled co vlastne pridavam a odebiram. Ted to navrhovane reseni vyzkousim, budu mit shodny nazev inputu pro pridavani a odebirani a pokud v poli nebude hodnota z $_POST[], tak ji pridam a pokud tam bude, tak ji odeberu. Pochopil jsem to spravne?
Lion76
Profil *
Jan Tvrdík

Slouzi to k pridavani a odebirani hodnot z pole, pokud hodnota z $_POST[] neni v poli, tak se tato hodnota prida, pokud tam je, tak se vymaze.
Lion76
Profil *
Takhle nebo to jde jeste jednoduseji?

if(isset($_POST['zpracuj'])){
$nove = array();
$stare = preg_grep("~[^\s]+~", explode(";", $_SESSION['oznaceno']));
if(!in_array($_POST['zpracuj'], $stare)){
$nove[] = $_POST['zpracuj'];
}
foreach($stare as $klic => $oznaceno){
if($_POST['zpracuj'] == $oznaceno){
unset($klic);
} else {
$nove[] = $oznaceno;
}
}
$_SESSION['oznaceno'] = implode(";", $nove);
}
Jan Tvrdík
Profil
Lion76
Aha, já myslel, že to k něčemu je a ono je to na nic :)

Pár věcí pořád nechápu:
1. Proč to v $_SESSION['oznaceno'] máš uloženo jako řetězec a ne jako pole (bylo by to mnohem jednodušší - nemusel bys používat explode + implode)
2. Nevysvětlil jsi, jak se ty data do těch post dostanou - jaký používáš formulář

Aspoň zkusím:
$pole = preg_grep("~[^\s]+~", $_SESSION['oznaceno']); 
if(isset($_POST["pridat"]))
{
	if(!in_array($_POST["pridat"],$pole))
		$pole[] = $_POST["pridat"];
}
if(isset($_POST["odebrat"]))
{
	if(in_array($_POST["odebrat"],$pole))
	{
		foreach ($pole as $klic => $hodnota)
		{
			if($hodnota == $_POST["odebrat"])
				unset($pole[$klic]);
		}
	}
}
$_SESSION["oznaceno"] = $pole;
Lion76
Profil *
Jan Tvrdík

Neni to na nic, je to k pridavani a odebirani polozek z vypisu, se kteryma chci dale pracovat. :o)

Dobre, tak vysvetlim:

1) ukladal jsem to jako retezec uplne zbytecne

2) uplne klasicky, v mem pripade odeslanim zaskrtnuteho nebo nezaskrtnuteho obrazkoveho checkboxu

No ja jsem to udelal pred Tebou tak, jak radil tiso a pracuje to na stejnem principu a to jsem chtel, proste to zjednodusit, ale dekuji za Tvuj cas.
Jan Tvrdík
Profil
Lion76
Stejně pořád nechápu k čemu to je :)
Pokuď je to na to, co se domnívám, že by mohlo být, tak je to napsané špatně. Pokud je to na něco jiného, tak je to napsáno divně.
tiso
Profil
Lion76 - nepochopil si to správne... Prečítaj si to znovu, aj ten článok - hlavne komentáre.
Lion76
Profil *
Jan Tvrdík

Co na tom nechapes. :o)

Zaskrtenes checkbox, ulozi se do pole pokud tam neni a pripoji se zbytek hodnot. Odskrtnes checkbox, odstranis z pole a pripojis zbytek hodnot.

Tak ja by jsi to napsal, kdyz je to spatne?
Lion76
Profil *
tiso

Dobre, jdu na to.
Lion76
Profil *
tiso

Cetl jsem ten clanek asi 10x a uz mne z toho hrabe. :o)

To o cem ten clanek pojednava, dela i muj opraveny kod, ktery sem byl vlozen 27.12.2007 18:09:50.

Pokud neni v poli co odesilam, tak ulozit a pripojit zbytek.
Pokud je v poli co odesilam, tak vymazat a ulozit zbytek.
tiso
Profil
Lion76 - aha, tak sme sa trochu minuli v logike.
Tvoje riešenie: vo formulári máš prázdne checkboxy, zaškrtnutím pridáš alebo uberieš položku z označených. To znamená že nikdy nevidíš čo máš označené a nie je jasné či položku označíš alebo zrušíš.
Moje riešenie (viď komentáre k článku): už označené checkboxy majú nastavené checked="checked", zaškrtnutím sa pridávajú, odškrtnutím sa uberajú položky do/z označených. Vždy vidíš čo máš vybraté.
Lion76
Profil *
tiso

Asi si nerozumime, takze to vysvetlim znovu.

Moje i Tvoje reseni delaji to same, rozdil je v tom, ze ja vybrany checkbox oznacim, tim se odesle ke zpracovani a vrati se mne stranka, kde ten checkbox je uz oznaceny. A na stejnem principu pracuje odebirani oznacenych checkboxu. Dalo by se to prirovnat k funkci v javascriptu, kliknes zmeni se obrazek, kliknes vrati se obrazek. Udelal jsem si takovou malou napodobeninu v php, protoze javascript vubec neumim a nemam cas se az ho ucit.
tiso
Profil
Lion76 - prajem veľa šťastia, idem sa venovať niečomu inému.
Lion76
Profil *
tiso

Tobe taky hodne stesti, jdu spat.
Jan Tvrdík
Profil
Zaskrtenes checkbox, ulozi se do pole pokud tam neni a pripoji se zbytek hodnot. Odskrtnes checkbox, odstranis z pole a pripojis zbytek hodnot.

Nechci vysvětlil postup, kterým to řešíš, ale co to má dělat :)

Příklad - jak správně napsat co to má dělat:
Mám stránku. Na stránce mám seznam zálib a ukaždé checkbox. Když kliknu na odeslat, chci vypsat na stránku co uživatel zatrhnul.

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