Autor | Zpráva | ||
---|---|---|---|
Duchaplny Profil |
#1 · Zasláno: 8. 1. 2012, 13:12:31
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 |
#2 · Zasláno: 8. 1. 2012, 13:35:44 · Upravil/a: jenikkozak
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 |
#3 · Zasláno: 8. 1. 2012, 13:42:24 · Upravil/a: Taps
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 |
#4 · Zasláno: 8. 1. 2012, 17:37:16 · Upravil/a: Duchaplny
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 |
#5 · Zasláno: 8. 1. 2012, 17:40:38
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 |
#6 · Zasláno: 8. 1. 2012, 17:52:02
panther:
všetko funguje, vďaka za pomoc. |
||
Časová prodleva: 13 let
|
0