Autor | Zpráva | ||
---|---|---|---|
Slark Profil * |
#1 · Zasláno: 1. 6. 2013, 18:32:24
Dobrý den,
potřeboval bych prosím radu, mám editaci kde jsou checkboxy pod sebou a edituji je přes foreach. Problém ale je že ať zaškrtnu jakýkoliv checkbox tak se mi automaticky aktualizují od shora. Zde mám kód tak kdyby jste někdo věděl, jak udělat aby se aktualizoval ten který jsem zaškrtl nebo odškrtl tak bych byl vděčný. děkuji. foreach($_POST["id"] as $key => $id) { if(!empty($_POST["active"][$key])) $act = 1; else $act = 0; mysql_query("update slideshow set active = $act where id = ".$_POST["id"][$key]." "); } } |
||
Tori Profil |
#2 · Zasláno: 1. 6. 2013, 19:34:01
Slark:
Jak vypisujete ty checkboxy, není chyba tam? Přijdou vám z formuláře správná data? Jinak to vypadá OK. Sice místo $_POST["id"][$key] byste mohl rovnou používat $id , ale to není chyba.
|
||
nonejm Profil * |
#3 · Zasláno: 1. 6. 2013, 19:37:13
1. docela málo kódu
2. řekněme, že to funguje tak, že se z databáze načte, které checkboxy jsou zaškrknuté a to se objeví v html. A problém je v tom, že nechceme zbytečně zatěžovat databázy UPDATy, ale UPDATE provedeme pouze pro změny: takže my známe původní stav a ten porovnáme s tím, co je odeslané POSTem a až poté, co se tento stav neshoduje, použijeme mysql_query 3. pokud byl dotaz na něco jiného, tak by to chtělo buď více kódu (jak vypadá HTML - hlavně, kde se bere, co je checked) nebo více popsat problém |
||
Slark Profil * |
#4 · Zasláno: 1. 6. 2013, 19:47:31
Dobrý den, formulář vypadá takto:
echo '<form method = "post" action="index.php?post_slideshow">'; while($row = mysql_fetch_assoc($result)){ if($row["active"]==1) $aktivni = "CHECKED"; else $aktivni = ""; echo '<input type="checkbox" name="active[]" class="pole" '.$aktivni.' >'; echo '<input type="hidden" name="id[]" class = "pole" value = "'.$row["id"].'" >'; echo $row["img"]."<br>"; } echo '<br><input type="submit" name="send" class="pole" value="Uložit">'; echo "</form>"; a z formuláře mi přijdou správná data. (id sedí a hodnota co se má nastavit taky) |
||
nonejm Profil * |
#5 · Zasláno: 1. 6. 2013, 20:10:33
jestli dobře chápu problém, tak stačí přidat zvýrazněné:
while($row = mysql_fetch_assoc($result)){ $pole[]=$row["active"]; . . . if ($pole[$key]!=$_POST["id"][$key]) mysql_query("update slideshow set active = $act where id = ".$_POST["id"][$key]." "); |
||
Tori Profil |
Slark:
Vycházíte ze špatného předpokladu: Z formuláře se odesílají pouze zaškrtnuté checkboxy, ne všechny. Takže v poli POST[active] dostanete něco úplně jiného než POST[id]. Ten kód v [#1] má správnou logiku - checkboxům dejte ID jako klíč: echo '<input type="checkbox" name="active['.$row['id'].']" class="pole" '.$aktivni.' >'; , a zpracování může vypadat takto:
foreach($_POST["id"] as $id) // tady už nepotřebujete klíče, jen hodnoty = ID { if(!empty($_POST["active"][$id])) $act = 1; else $act = 0; // v poli POST[active] jsou IDčka jako klíče // $act = !empty($_POST["active"][$id]) ? 1 : 0; // stejná podmínka, zapsaná zkráceným způsobem. Použijte co se vám líp čte. mysql_query("update slideshow set active = $act where id = ".(int) $id); // escapujte vše, co posíláte do DB z formuláře } A kdybyste to chtěl vylepšit tak, jak navrhuje nonejm: „nechceme zbytečně zatěžovat databázy UPDATy, ale UPDATE provedeme pouze pro změny: takže my známe původní stav a ten porovnáme s tím, co je odeslané POSTem a až poté, co se tento stav neshoduje, použijeme mysql_query“, tak do POST[id] ukládejte IDčka jako klíče a jako hodnoty bude stav active z databáze; při zpracování to porovnáte s tím, jestli existuje hodnota v POST[active][$id] .
|
||
Slark Profil * |
#7 · Zasláno: 1. 6. 2013, 23:54:07
Dobrý den,
mockrát Vám děkuji, vše funguje jak jsem si představoval. |
||
Časová prodleva: 11 let
|
0