Autor Zpráva
Duchaplny
Profil
Zdravím,

snažím sa vytvoriť jednoduchý zoznam poznámok, kde si zaškrtnem pomocou checkboxu vyriešenú poznámku (aj viacero naraz) a následne odošlem požiadavku buttonom. V MySQL by sa po tejto akcii mal prepísať údaj "status" z 0 na 1, ale nepodarí sa, pretože $_POST["id"] nedostane informáciu o aké ID ide (v podstate $_POST["id"] neexistuje). Keďže tých záznamov môžu byť stovky, tak si neviem rady s priraďovaním ID do $_POST["id"]. Vie niekto poradiť, čo ďalej alebo čo zmeniť ?

Skrátená verzia kódu (len to podstatné):
<?
$vysledok=mysql_query("SELECT id, subor, vec, status FROM notes WHERE status=0 ORDER BY id");
while ($zaznam=mysql_fetch_array($vysledok)):
echo "<input type='checkbox' name='id[$zaznam[id]]' value='1' />";
endwhile;

 <form method="post" action="<?$_SERVER["PHP_SELF"]?>">
  <input type="hidden" name="send" value="" />
   <input type="submit" name="send" value="Uprav status poznámok" style="cursor: pointer" />
    </form>

 <?
    if (!empty($_POST))

       {mysql_query ("UPDATE notes SET status=1 WHERE id='".$_POST["id"]."';", $GLOBALS["result"]);

    if (mysql_affected_rows()>0) echo "<p> Status poznámok bol zmenený. </p>";
  else                           echo "<p> Operácia sa nezdarila. </p>";}
 ?>

V praxi to vyzerá asi takto:

ID | Subor | Vec                | Status | OK
 1 | text  | Doplniť diakritiku |   0    | CHECKBOX
 2 | dom   | Dorobiť strechu    |   0    | CHECKBOX
 atď..

 BUTTON <- Uprav status poznámok
jenikkozak
Profil
Aby ty checkboxy byly odeslány, je potřeba je vložit do <form>u, nyní jsou mimo něj.
Potom na serveru můžete jednotlivé položky pole id projít pomocí cyklu foreach.
Taps
Profil
Duchaplny
zkus níže uvedené
<form method="post" action="<?$_SERVER["PHP_SELF"]?>">
<?
$vysledok=mysql_query("SELECT id, subor, vec, status FROM notes WHERE status=0 ORDER BY id");
while ($zaznam=mysql_fetch_array($vysledok)){
echo '<input type="checkbox" name="idecka[]" value="'.$zaznam['id'].'" />';
}
?>
 
    <input type="hidden" name="send" value="" />
   <input type="submit" name="send" value="Uprav status poznámok" style="cursor: pointer" />
    </form>
 
   <?
if(isset($_POST['send'])){
foreach($_POST["idecka"] as $polozka) { 

   $test = MySQL_Query(" UPDATE notes SET status=1  where id='$polozka'"); 
}
}

   ?>
Duchaplny
Profil
jenikkozak a Taps:
pochopil som to tak, že mám zlú štruktúru stránky. Vložil som checkbox do formu a podľa ukážky Tapsa som to celé upravil a funguje to správne. Veľmi pekne ďakujem. Akurát je pre mňa foreach trochu záludný, pretože s ním pracujem prvý krát.

1. V prípade, že nezaškrtnem žiaden checkbox, vypíše mi to chybu "Warning: Invalid argument supplied for foreach()".

2. Po odoslaní zaškrtnutých checkboxov sa mi vypíše "Status poznámok bol zmenený.", ale samotná/é poznámka/y sa zo zoznamu odstráni/a až po refreshe stránky a nie hneď. Nejak netuším prečo.
panther
Profil
Duchaplny:
1. V prípade, že nezaškrtnem žiaden checkbox
prázdné checkboxy se neodesílají, ten klíč tedy neexistuje. Na 14. řádku netestuj isset($_POST['send']), ale isset($_POST['idecka']).

2. Po odoslaní zaškrtnutých checkboxoch sa mi vypíše "Status poznámok bol zmenený.", ale samotná/é poznámka/y sa zo zoznamu odstráni/a až po refreshe stránky a nie hneď. Nejak netuším prečo.
nejprve z DB vybíráš, pak teprve měníš. Dej update před select.
Duchaplny
Profil
panther:
všetko funguje, vďaka za pomoc.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: