Autor Zpráva
Slark
Profil *
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
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 *
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 *
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 *
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 *
Dobrý den,

mockrát Vám děkuji, vše funguje jak jsem si představoval.

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: