Zur Navigation

Datensatz löschen

1 webuser

Hallo,
ich will einen Datensatz löschen.
Wenn ich in der Checkbox einen Satz markiere, passiert bei dem
Klicken vom Löschen Button nichts.
Es sind 4 Felder vorhanden
preis_id
preisabdatum
preisbisdatum
preis

Gruss
webuser

<?php

require_once ('db_conn.php'); // include the database connection

$abfrage = "SELECT * FROM preise ORDER BY preis_id";
$ergebnis = mysql_query($abfrage);
?>
<form action="" method="post"><table border="0" cellspacing="0" cellpadding="0">
<?php
while($row = mysql_fetch_object($ergebnis))
    {
    echo '<tr><td align="left">'.$row->preis_id.'.</td>';
    echo '<td align left><input type="checkbox" name="t[]" value="'.$row->preis_id.'">&nbsp;</td>';
    echo '<td align="left">'.$row->abpreisdatum.'&nbsp;&nbsp;</td>';
    echo '<td align="left">'.$row->bispreisdatum.'</td>';
    echo '</tr>';
    }
?>
</table><input type="hidden" value="1" name="st"><input type="submit" value="Delete" name="submit"></form>
<?php
$delete = $_POST["t"];
$send = $_POST['st'];
if ($send = 1)
{
    $anzahl=count($delete);
    for($i=0;$i<$anzahl;$i++)
    {

        $deltext = "DELETE FROM preise WHERE preis_id = '".$t[$i]."'";
        $del = mysql_query($deltext);
    }
    if($i = $anzahl)
    {
        echo '<head><meta http-equiv="refresh" content="0; url=loeschen.php"></head>';
    }
}
mysql_close();
?>

02.07.2011 08:54

2 Jörg Kruse

Als erstes würde ich das anfängliche BOM ("") löschen - darüber könnte PHP nämlich stolpern

02.07.2011 16:38

3 webuser (Gast)

Hallo Jörg,
das Zeichen kam nur vom rüberkopieren.
Im Original ist das nicht drin.

Ich vermute, das die variable preis_id nicht richtig gefüllt wird und somit
auch der richtige Datensatz nicht gelöscht werden kann.

also hier
  echo '<td align left><input type="checkbox" name="t[]" value="'.$row->preis_id.'">&nbsp;</td>';
 


Gruss
Webuser

02.07.2011 17:42

4 Jörg Kruse

Ich vermute, das die variable preis_id nicht richtig gefüllt wird

Das kannst du ja überprüfen, indem du das Formular im Browser aufrufst und dir dort den Quelltext anzeigen lässt.

02.07.2011 17:49

5 webuser (Gast)

Hallo,

der sieht so aus:
<form action="" method="post"><table border="0" cellspacing="0" cellpadding="0">
<tr><td align="left">1.</td><td align left>
<input type="checkbox" name="t[]" value="1">&nbsp;</td>
<td align="left">2011-06-28&nbsp;&nbsp;</td>
<td align="left">2011-06-30</td>
</tr><tr>
<td align="left">2.</td>
<td align left
><input type="checkbox" name="t[]" value="2">&nbsp;</td>
<td align="left">2011-07-14&nbsp;&nbsp;</td>
<td align="left">2011-06-30</td></tr><tr>
<td align="left">3.</td><td align left>
<input type="checkbox" name="t[]" value="3">&nbsp;</td>
<td align="left">2011-01-01&nbsp;&nbsp;</td>
<td align="left">2011-02-11</td></tr><tr>
<td align="left">4.</td><td align left>
<input type="checkbox" name="t[]" value="4">&nbsp;</td>
<td align="left">2011-02-01&nbsp;&nbsp;</td>
<td align="left">2011-03-11</td></tr><tr>
<td align="left">5.</td><td align left>
<input type="checkbox" name="t[]" value="5">&nbsp;</td>
<td align="left">2011-11-11&nbsp;&nbsp;</td>
<td align="left">2011-11-24</td></tr><tr>
<td align="left">6.</td><td align left>
<input type="checkbox" name="t[]" value="6">&nbsp;</td>
<td align="left">2011-11-11&nbsp;&nbsp;</td>
<td align="left">2011-11-24</td></tr><tr>
<td align="left">7.</td><td align left>
<input type="checkbox" name="t[]" value="7">&nbsp;</td>
<td align="left">2011-11-11&nbsp;&nbsp;</td>
<td align="left">2011-11-24</td></tr><tr
><td align="left">8.</td><td align left>
<input type="checkbox" name="t[]" value="8">&nbsp;</td>
<td align="left">2011-11-11&nbsp;&nbsp;</td>
<td align="left">2011-11-24</td></tr>

</table>
<input type="hidden" value="1" name="st">
<input type="submit" value="Delete" name="submit">
</form>
<head><meta http-equiv="refresh" content="0; url=loeschen.php"></head>

02.07.2011 18:16

6 Jörg Kruse

Die value Werte sind dann ja korrekt?

Aber hier ist noch ein HTML-Fehler:

echo '<td align left><input type="checkbox" name="t[]" value="'.$row->preis_id.'">&nbsp;</td>';

Korrekt wäre hier 'align="left"'

Und weiter unten findet sich noch ein klassischer Fehler:

if ($send = 1)

Ein einzelnes "=" bewirkt eine Zuweisung - für einen Vergleich benötigst du ein "=="!

Dasselbe gilt für die die nächste Bedingung:

if($i = $anzahl)


... und hier solltest du $delete statt $t verwenden, da du bei register_globals=off nur auf $_POST['t'] zugreifen kannst:

$deltext = "DELETE FROM preise WHERE preis_id = '".$t[$i]."'";

... und damit die Abfrage gegen SQL-Injection gesichert ist, solltest du $delete darauf prüfen, dass es sich um ein Integer handelt, z.B. mit intval()

$deltext = "DELETE FROM preise WHERE preis_id = '".intval($delete[$i])."'";

02.07.2011 18:33 | geändert: 02.07.2011 18:43

7 webuser (Gast)

Danke Jörg,
hier das komplette Script, falls es noch jemand brauchen kann:
#
<?php 

require_once ('db_con.php'); // include the database connection

$abfrage = "SELECT * FROM preise ORDER BY preis_id"; 
$ergebnis = mysql_query($abfrage); 
?> 
<form action="" method="post"><table border="0" cellspacing="0" cellpadding="0"> 
<?php  
while($row = mysql_fetch_object($ergebnis)) 
    { 
    echo '<tr><td align="left">'.$row->preis_id.'.</td>'; 
    echo '<td align="left"><input type="checkbox" name="t[]" value="'.$row->preis_id.'">&nbsp;</td>'; 
    echo '<td align="left">'.$row->abpreisdatum.'&nbsp;&nbsp;</td>';
    echo '<td align="left">'.$row->bispreisdatum.'</td>'; 
    echo '</tr>'; 
    }  
?> 
</table><input type="hidden" value="1" name="st"><input type="submit" value="Delete" name="submit"></form> 
<?php  
$delete = $_POST["t"]; 
$send = $_POST['st']; 
if ($send == 1) 
{ 
    $anzahl=count($delete); 
    for($i=0;$i<$anzahl;$i++) 
    { 

$deltext = "DELETE FROM preise WHERE preis_id = '".intval($delete[$i])."'";

        $del = mysql_query($deltext); 
    } 
    if($i == $anzahl) 
    { 
        echo '<head><meta http-equiv="refresh" content="0; url=loeschen.php"></head>'; 
    } 
} 
mysql_close(); 
?>

02.07.2011 19:25

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]