Autor | Zpráva | ||
---|---|---|---|
Lion76 Profil * |
#1 · Zasláno: 27. 12. 2007, 16:28:50
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 |
#2 · Zasláno: 27. 12. 2007, 16:52:19 · Upravil/a: tiso
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 |
#3 · Zasláno: 27. 12. 2007, 17:03:13
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 * |
#4 · Zasláno: 27. 12. 2007, 17:47:24
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 * |
#5 · Zasláno: 27. 12. 2007, 17:49:37
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 * |
#6 · Zasláno: 27. 12. 2007, 18:09:50
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 |
#7 · Zasláno: 27. 12. 2007, 18:14:59
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 * |
#8 · Zasláno: 27. 12. 2007, 18:55:55
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 |
#9 · Zasláno: 27. 12. 2007, 19:13:57
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 |
#10 · Zasláno: 27. 12. 2007, 19:35:30
Lion76 - nepochopil si to správne... Prečítaj si to znovu, aj ten článok - hlavne komentáre.
|
||
Lion76 Profil * |
#11 · Zasláno: 27. 12. 2007, 19:41:08
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 * |
#12 · Zasláno: 27. 12. 2007, 19:41:55
tiso
Dobre, jdu na to. |
||
Lion76 Profil * |
#13 · Zasláno: 27. 12. 2007, 20:32:07
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 |
#14 · Zasláno: 27. 12. 2007, 21:31:14
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 * |
#15 · Zasláno: 27. 12. 2007, 22:19:42
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 |
#16 · Zasláno: 27. 12. 2007, 22:31:43
Lion76 - prajem veľa šťastia, idem sa venovať niečomu inému.
|
||
Lion76 Profil * |
#17 · Zasláno: 27. 12. 2007, 22:40:21
tiso
Tobe taky hodne stesti, jdu spat. |
||
Jan Tvrdík Profil |
#18 · Zasláno: 27. 12. 2007, 22:45:00
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. |
||
Časová prodleva: 16 let
|
0