Autor | Zpráva | ||
---|---|---|---|
gardener Profil |
#1 · Zasláno: 9. 2. 2009, 23:07:22
Zdravím
Chtěl bych se zeptat, jak bych mohl vyřešit tento problém: Ve skriptu pro vyhledávání v záznamech DB, vypisuji vyhledané zápisy do tabulky a do řádku výpisu rovnou přidávám i buňku s checkboxem, obsahující id, podle pořádí záznamu v db. Problém nastává tehdy, pokud bych check boxů zaškrtl více, tzn. chtěl bych smazat více alb najednou. Zavolám skript db_delete.php ale už nevím, jak bych mohl předat všechny id, např. pomocí post a poté je zase "rozložit" do příkazu pro vymazání. Možná, že by se tam dala využít fce explode, ale nevím nevím. Netuší prosím někdo, jak předat více hodnot? Díky za každou radu. |
||
tiso Profil |
#2 · Zasláno: 9. 2. 2009, 23:17:42
gardener
<input type="checkbox" name="delete[]" value="id_zaznamu"> ... $query="DELETE FROM table WHERE id IN (".implode(',', $_POST['delete']).")"; |
||
gardener Profil |
#3 · Zasláno: 9. 2. 2009, 23:28:57
Upravil jsem to takto:
echo"<td><input type=\"checkbox\" name=\"delete[]\" value=\"$radek[0]\"></td>"; Ale nejde mi do hlavy, proč se předává do SQL příkazu pole hodnot u name a ne value? Neměla by se předávat spíše id záznamu value=\"$radek[0]\"? |
||
SwimX Profil |
#4 · Zasláno: 9. 2. 2009, 23:37:52
gardener
co myslíš že je hodnota proměnné $_PSOT['delete'] -> přesně: value prvku s name delete |
||
gardener Profil |
#5 · Zasláno: 9. 2. 2009, 23:41:28
To jo, ale proč teda rovnou nepředávám hodnoty pole $radek[0]?
To byh to mohl zapsat takhle.. echo"<td><input type=\"checkbox\" name=\"$radek[0]" value=\"$radek[0]\"></td>"; |
||
gardener Profil |
#6 · Zasláno: 10. 2. 2009, 00:44:19
Nakonec jsem to udělal takto, mělo by to být dobře ale zaseknu se na ověření, jelikož mi skript neustále tvrdí, že nebyla předána pomocí post žádná hodnota:
Kde bych mohl mít prosím chybu? Viz echo"<td><input type=\"checkbox\" name=\"$radek[0]\" value=\"$radek[0]\"></td>"; A skript pro smazani. include("db_connect.php"); //including db_connect $id = ($_POST['$radek[0]']); if (empty($id)) { echo("Nebylo vybrano zadne album k smazani"); exit; } foreach($_POST as $id) { // This will loop through the checked checkboxes $sql = mysql_query("DELETE FROM seznam WHERE id='$id' LIMIT 1"); } |
||
tiso Profil |
#7 · Zasláno: 10. 2. 2009, 01:44:01 · Upravil/a: tiso
|
||
gardener Profil |
#8 · Zasláno: 10. 2. 2009, 01:56:47
Takže by to tedy mělo prosím správně vypadat jak?
pretože nikoho nezaujíma poradie prvku v name, iba hodnota vo value : To vím, proto by také stačilo předávat pouze hodnotu value, tzn..name by mohlo byt klidne všude stejne např. name="por.cislo" to čo si preboha vytvoril? Slušným zvykom je formulár spracovávať takto: Napříjde mi na tom nic špatného, if(isset($_POST['submit'])) Tady je spíš důležitější kontrolovat, jestli byla odeslána nějaká value a pokud ano, tak ji smazat. |
||
tiso Profil |
#9 · Zasláno: 10. 2. 2009, 02:12:02
[#8] ...stejne napr. name="por.cislo"
WTF? 1. name a id by nemalo začínať číslom 2. stejné name znamená že sa odošle posledný označený prvok (ak sa bavíme o checkboxoch) if(isset($_POST['submit'])) - toto je práve spôsob ako pracovať s premennou ktorá existuje a nedostávať NOTICE o tom že nebola predaná nejaká POST hodnota. Samozrejme si doplň vlastný názov premennej z formulára. A ktomu preboha - chcel si vymazať viacero záznamov z databázy. 1. Ja to robím jedným dotazom na databázu, ty viacerými. 2. Formulár môže obsahovať viacero polí (napríklad odosielacie tlačítko), a ty ich všetky rveš do $id a následne do WHERE id='$id' 3. $id = ($_POST['$radek[0]']); - toto má fungovať akože ako? |
||
gardener Profil |
#10 · Zasláno: 10. 2. 2009, 02:31:25
3. $id = ($_POST['$radek[0]']); - toto má fungovať akože ako?
To funguje tak, že pomocí mysql_fetch_row while($radek = mysql_fetch_row($sql)) { echo "<tr>"; for ($i=0; $i<8; ++$i) echo "<td>", $radek[$i], "</td>"; //echo "<td><input type=\"checkbox\" name=\"vyber\" value=\"$radek[0]\" ></td>"; echo"<td><input type=\"checkbox\" name=\"vyber\" value=\"$radek[0]\"></td>"; echo "</tr>"; } |
||
gardener Profil |
#11 · Zasláno: 10. 2. 2009, 02:32:20
3. $id = ($_POST['$radek[0]']); - toto má fungovať akože ako?
To funguje tak, že pomocí mysql_fetch_row while($radek = mysql_fetch_row($sql)) { echo "<tr>"; for ($i=0; $i<8; ++$i) echo "<td>", $radek[$i], "</td>"; //echo "<td><input type=\"checkbox\" name=\"vyber\" value=\"$radek[0]\" ></td>"; echo"<td><input type=\"checkbox\" name=\"vyber\" value=\"$radek[0]\"></td>"; echo "</tr>"; } |
||
tiso Profil |
#12 · Zasláno: 10. 2. 2009, 11:22:52
[#11] no comment...
|
||
Majkl578 Profil |
#13 · Zasláno: 10. 2. 2009, 12:06:57
hezke, tak dobre jsem se uz par dni nepobavil...
co se prvne naucit zaklady prace s poli a supergobalnimi promennymi? |
||
gardener Profil |
#14 · Zasláno: 10. 2. 2009, 12:44:41
No jsem rád, že jsi se pobavil, samozřejmě bych to mohl dělat pomocí mysql_fetch_array, ale proč, když takto je výsledký kód o dost kratší a pro mne přehlednější.
|
||
Majkl578 Profil |
#15 · Zasláno: 10. 2. 2009, 13:46:53
a jaky je problem v pouziti pole v html inputu a naslednem zpracovani v php pres $_POST['vyber'] (array)?
|
||
Časová prodleva: 7 měsíců
|
|||
semerak Profil |
#16 · Zasláno: 26. 8. 2009, 22:41:49 · Upravil/a: semerak
Tohle musí pochopit každý:
<?php include 'mysq_connect'; if (isset($_POST['delete'])) { if (is_array($_POST['pole_ceku'])) { mysql_query("DELETE FROM `table` WHERE id IN (".implode(',', $_POST['pole_ceku']).");"); } } $sql = mysql_query("SELECT * FROM `table`;"); echo "<form action='' method='post'>"; while ($vypis = mysql_fetch_array($sql, MYSQL_ASSOC)) { echo "<input type='checkbox' name='pole_ceku[]' value='$vypis[id]'>"; echo ".... další případný výpis"; } mysql_free_result($sql); echo "<input type='submit' name='delete' value='Smazat'></form>"; ?> |
||
Časová prodleva: 15 let
|
0