Autor Zpráva
gardener
Profil
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
gardener
<input type="checkbox" name="delete[]" value="id_zaznamu">
...


$query="DELETE FROM table WHERE id IN (".implode(',', $_POST['delete']).")";
gardener
Profil
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
gardener
co myslíš že je hodnota proměnné $_PSOT['delete'] -> přesně: value prvku s name delete
gardener
Profil
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
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
[#4] - pretože nikoho nezaujíma poradie prvku podľa name, iba hodnota vo value
[#6] - to čo si preboha vytvoril? Slušným zvykom je formulár spracovávať takto:

if(isset($_POST['submit'])){//mame odoslany form, mozeme ho spracovat
...
}
else{//vypis form
...
}
gardener
Profil
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']))
je dobrý použít u SELF ale jinak ztrácí význam ne?
Tady je spíš důležitější kontrolovat, jestli byla odeslána nějaká value a pokud ano, tak ji smazat.
tiso
Profil
[#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
3. $id = ($_POST['$radek[0]']); - toto má fungovať akože ako?
To funguje tak, že pomocí
mysql_fetch_row
a cyklu vypisuji tabulku zázanamů, no jelikož mi to vrací pole, chci hodnoty od nuly viz:
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
3. $id = ($_POST['$radek[0]']); - toto má fungovať akože ako?
To funguje tak, že pomocí
mysql_fetch_row
a cyklu vypisuji tabulku zázanamů, no jelikož mi to vrací pole, chci hodnoty od nuly viz:
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
[#11] no comment...
Majkl578
Profil
hezke, tak dobre jsem se uz par dni nepobavil...
co se prvne naucit zaklady prace s poli a supergobalnimi promennymi?
gardener
Profil
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
a jaky je problem v pouziti pole v html inputu a naslednem zpracovani v php pres $_POST['vyber'] (array)?
semerak
Profil
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>";
?>

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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