ugrás a tartalomhoz

Checkbox alkalmazása

Anonymous · 2005. Dec. 12. (H), 11.00
Tisztelt Kollégák!

Nemrég kezdtem a PHP-vel foglalkozni, és sajnos segítségre szorulok ,ezért fordulok hozzátok.

MySql adatbázist használok, és szeretném az adatbázis egyik táblájának tartalmát egy html oldalon megjeleníteni úgy, hogy az egyes rekordok mellé egy checkbox kerüljön, amivel a rekordokat törlésre jelölhetem ki. És persze egy nyomógomb lenyomásával törölnöm is kellene. (az adatbázis megnyitása, és az tábla kiválasztása megy, azzal nincs gondom, csak az előbb leírt problémával vívok már néhány napja).

Előre is köszönöm a segítséget: Sz. Péter
 
1

vázlat

zila · 2005. Dec. 12. (H), 11.24
Hello!

Nem látom pontosan hol akadtál el?
a checkboxok értékei praktikusan a rekord azonosítók, a formot elküldöd egy php scriptnek az végigmegy egy ciklussal az azonosítók tömbjén és töröl. (vagy összeállít egy törlő sql utasítást a törléshez)

Érdemes a formban a checkbox mezők neveit tömb-szerűen megadni:

<input type="checkbox" name="todel[]" value="123">
Ezt a phpban a $_POST['todel'] tömbben fogod elérni (vagy $_GET attól függően milyen módon küldöd a formot a php-nek).

phpban a megfelelő ellenőrzések után csinálhastz egy ilyet pl.:

<?php
$sql = "DELETE FROM table WHERE id IN(".implode(',', $_POST['todel']).")";
$rs = query($sql);  // a query helyére az adatbázisodhoz illő sql végrehajtó fv neve megy persze...
?>
üdv,
Zila
2

<Nincs cím>

Anonymous · 2005. Dec. 12. (H), 12.03
Köszönöm a segítségedet, próbálom az általad leírt utat bejárni, viszont most meg az a problémám, hogy nem töröli ki a táblából a válsztott rekordokat. Írok egy kicsit a körülményekről biztos, ami biztos:
Az adatbázis neve: eszkozok, a tábla neve: nyomtatok
A nyomtatok táblának két mezője van: nykulcs, és nytipus. Az nykulcs egy autoincrement mező, értéke automazikusan növekszik. Az nytipus a nyomtatók típusa, én viszem be.

A nyomtatók listázását és a checkbox-ot a köv. programrészlet valósítja meg:
<form action="torol.php" method="POST">
<?php

$felhasznalo="root";
$jelszo="";
$kapcsolat=mysql_connect("localhost",$felhasznalo,$jelszo);

if (!kapcsolat)
  die("Nem lehet kapcsolódni a MySql kiszolgálóhoz!");

mysql_select_db("eszkozok",$kapcsolat) or die ("Nem lehet megnyitni az adatbázist: ".mysql_error());

$eredmeny=mysql_query("SELECT * FROM nyomtatok");
$sorok_szama=mysql_num_rows($eredmeny);
print "Jelenleg $sorok_szama sor van a táblában<P>";

print "<table border=1>\n";
print "<tr bgcolor=#9999ff>";
print "<td><b>Azonosító</b></td>";
print "<td><b>Típus</b></td>";
print "<td>&nbsp;</td>";
print "</tr>";
while ($egy_sor=mysql_fetch_row($eredmeny))
  {
  print "<tr>\n";
  foreach ($egy_sor as $mezo)
    {
    print "\t<td>$mezo</td>\n";
    }
  print "\t<td><input type=checkbox name=torles[]></td>";
  print "</tr>\n";
  }
print "</table>\n";

print "<input type='submit'>";

mysql_close($kapcsolat);

?>

</form>
A törlést pedig az általad javasolt megoldás végzi:
<?php
$parancs="DELETE FROM nyomtatok WHERE nykulcs IN(".implode(',',$_POST['torles']).")";
$eredmeny=mysql_query($parancs);
?>
Mikor bejelölök néhány rekordot, és a gombra klikkelek, új ablakban lefut a program, viszont h megnézem a listát, nem törölt ki semmit. :-)

Tudsz valamit javasolni? Biztos hogy én rontottam el valamit, mert mint mondtam, nagyon kezdő vagyok még a témában.

Megköszönném a segítségedet!

Üdvözlettel: Sz. Péter
3

A checkbox value parametere hianyzik!

Barkóczi Roland · 2005. Dec. 12. (H), 12.22
ahogy Zila irta, a checkbox value parametere legyen megadva, s ez legyen az adott rekord azonositoja.

Egyebkent jo debug modszer az, hogy az sql kerest kiiratod, s akkor latod mi is fog lefutni (persze csak a fejlesztes idejere, utana - ha jo az SQL lekerdezes, mar nem kell):

<?php
echo $parancs="DELETE FROM nyomtatok WHERE nykulcs IN(".implode(',',$_POST['torles']).")";
$eredmeny=mysql_query($parancs);
?>
Ekkor egybol latod, hogy miert nem torol ki semmit a tablabol!
4

Még mindig nem jó valami

Anonymous · 2005. Dec. 12. (H), 12.52
Ez nagyon nem akar sikerülni.

A checkbox-os sort a következőre cseréletm:

print "\t<td><input type=checkbox name=torles[] value='$egy_sor[0]'></td>";

Hiszen ha minden igaz, akkor az egy_sor egy tömb akar lenni.

A törlő progiba betettem az echo-t, ahogy javasoltad.

Ekkor ha két elemet akarok törölni, a megjelenő üezenet a következő:

DELETE * FROM nyomtatok WHERE nykulcs IN(29,30)

A 29-es és 30-as azonosító stimmel, de változatlanul nem töröl semmit :-)

A nagy kérdés: mit hibázok el még mindig?

Sz. Péter
5

Debug

Barkóczi Roland · 2005. Dec. 12. (H), 13.01
a hibakereseshez erdemes meg hozzatenni ezt:

<?php
$parancs="DELETE FROM nyomtatok WHERE nykulcs IN(".implode(',',$_POST['torles']).")";
$eredmeny=mysql_query($parancs) or die("Hiba: ".mysql_error());
?>
ps.: legyszi, hasznald a colorer tageket!
6

DELETE syntax

Anonymous · 2005. Dec. 12. (H), 13.08
Használd szabályosan az SQL parancsokat, akkor működni fog:
Nem "DELETE * FROM", hanem "DELETE FROM"

Gyulus
7

SIKERÜLT

Anonymous · 2005. Dec. 12. (H), 13.48
SIKERÜLT, köszönöm szépen a segítséget, hálás vagyok nektek! Azt esetleg meg tudnátok mondani, mit kell tennem ahhoz hogy a törlés után a nyomtatók listáját mutató (tehát az eredeti ablak) frissüljön?

Köszönettel: Sz. Péter
8

redirect

zila · 2005. Dec. 12. (H), 17.51
a törlés után kiadsz egy

<?php
header("Location: /lista.php");
?>
header-t.

persze arra ügyelni kell, hogy ezelőtt a header előtt semmi ne jusson ki a kimenetre, mert akkor hibát kapsz.

üdv,
Zila