Einträge aus mittels PHP aus Datenbank löschen
kati
- php
Hallo zusammen
Ich habe ein kleines Formular gebastelt welches Einträge aus meiner sql datenbank (apache xampp) ausliest. Wenn man bei den Einträgen die checkbox auswählt und dann auf Löschen klickt sollten die angewählten Einträge gelöscht werden.
Es sind zwei Tabellen in der Datenbank "MasterProblem" die eine heisst "master" die andere "problem".
Hier das Formular
<?php
for ($i=0;$i<$anzahlMaster;$i++) {
$idMaster = mysql_result($ergebnisMaster, $i, "id");
$checkMaster = "<input type='checkbox' name='delMaster[]' value='".$idMaster."'>";
$katMaster = mysql_result($ergebnisMaster, $i, "kurzbeschreibung");
$dateMaster = mysql_result($ergebnisMaster, $i, "Datum");
print "<tr><td>".$checkMaster."</td><td>".$idMaster."<td>".$katMaster."</td><td>".$dateMaster."</td></tr>\n";
}
?>
<form action="loeschen_succ.php" method="GET">
<table width="100%">
<tr>
<th> </th>
<th>Problem ID</th>
<th>Kurzbeschreibung</th>
<th>Eröffnungsdatum</th>
</tr>
//Master daten auslesen
$dbMaster=mysql_connect("localhost","***","****");
$ergebnisMaster=mysql_db_query("MasterProblem", "select * from master order by id");
$anzahlMaster=mysql_num_rows($ergebnisMaster);
mysql_close($dbMaster);
//Problem daten auslesen
$dbProblem=mysql_connect("localhost","ithd","ithd123");
$ergebnisProblem=mysql_db_query("MasterProblem", "select * from problem order by id");
$anzahlProblem=mysql_num_rows($ergebnisProblem);
mysql_close($dbProblem);
for ($i=0;$i<$anzahlProblem;$i++) {
$idProblem = mysql_result($ergebnisProblem, $i, "id");
$checkProblem= "<input type='checkbox' name='delProblem[]' value='".$idProblem."'>";
$katProblem = mysql_result($ergebnisProblem, $i, "kurzbeschreibung");
$dateProblem = mysql_result($ergebnisProblem, $i, "Datum");
print "<tr><td>".$checkProblem."</td><td>".$idProblem."<td>".$katProblem."</td><td>".$dateProblem."</td></tr>\n";
}
?>
Die Ausgabe funktioniert soweit auch. Das Problem ist dann auf der seite loeschen_succ.php.
Die Einträge werden einfach nicht gelöscht. Ich nehme an, dass die Parameter nicht sauber übergeben werden.
Sieht jemand den Fehler?
Hier der Code vom loeschen_succ.php
<?php
$db=mysql_connect("localhost","***","****");
if (!$db)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("MasterProblem", $db);
$master=$_GET["delMaster"];
$problem=$_GET["delProblem"];
if(isset($master))
{
foreach($master as $id)
{
mysql_querry("DELETE FROM master WHERE id = ".$id."");
echo "<b>Der Folgende Eintrag wurde erfolgreich gelöscht:</b><br><br>";
echo $id;
}
}
if(isset($problem))
{
foreach($problem as => $id)
{
mysql_querry("DELETE FROM problem WHERE id = ".$id."");
echo "<b>Der Folgende Eintrag wurde erfolgreich gelöscht:</b><br><br>";
echo $id;
}
}
mysql_close ($db);
?>
Hallo zusammen
Ich habe ein kleines Formular gebastelt welches Einträge aus meiner sql datenbank (apache xampp) ausliest. Wenn man bei den Einträgen die checkbox auswählt und dann auf Löschen klickt sollten die angewählten Einträge gelöscht werden.
Es sind zwei Tabellen in der Datenbank "MasterProblem" die eine heisst "master" die andere "problem".
Hier das Formular
<?php
for ($i=0;$i<$anzahlMaster;$i++) {
$idMaster = mysql_result($ergebnisMaster, $i, "id");
$checkMaster = "<input type='checkbox' name='delMaster[]' value='".$idMaster."'>";
$katMaster = mysql_result($ergebnisMaster, $i, "kurzbeschreibung");
$dateMaster = mysql_result($ergebnisMaster, $i, "Datum");
print "<tr><td>".$checkMaster."</td><td>".$idMaster."<td>".$katMaster."</td><td>".$dateMaster."</td></tr>\n";
}
?>
<form action="loeschen_succ.php" method="GET">
<table width="100%">
<tr>
<th> </th>
<th>Problem ID</th>
<th>Kurzbeschreibung</th>
<th>Eröffnungsdatum</th>
</tr>
//Master daten auslesen
$dbMaster=mysql_connect("localhost","***","****");
$ergebnisMaster=mysql_db_query("MasterProblem", "select * from master order by id");
$anzahlMaster=mysql_num_rows($ergebnisMaster);
mysql_close($dbMaster);
//Problem daten auslesen
$dbProblem=mysql_connect("localhost","ithd","ithd123");
$ergebnisProblem=mysql_db_query("MasterProblem", "select * from problem order by id");
$anzahlProblem=mysql_num_rows($ergebnisProblem);
mysql_close($dbProblem);
for ($i=0;$i<$anzahlProblem;$i++) {
$idProblem = mysql_result($ergebnisProblem, $i, "id");
$checkProblem= "<input type='checkbox' name='delProblem[]' value='".$idProblem."'>";
$katProblem = mysql_result($ergebnisProblem, $i, "kurzbeschreibung");
$dateProblem = mysql_result($ergebnisProblem, $i, "Datum");
print "<tr><td>".$checkProblem."</td><td>".$idProblem."<td>".$katProblem."</td><td>".$dateProblem."</td></tr>\n";
}
?>
Die Ausgabe funktioniert soweit auch. Das Problem ist dann auf der seite loeschen_succ.php.
Die Einträge werden einfach nicht gelöscht. Ich nehme an, dass die Parameter nicht sauber übergeben werden.
Sieht jemand den Fehler?
Hier der Code vom loeschen_succ.php
<?php
$db=mysql_connect("localhost","***","****");
if (!$db)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("MasterProblem", $db);
$master=$_GET["delMaster"];
$problem=$_GET["delProblem"];
if(isset($master))
{
foreach($master as $id)
{
mysql_querry("DELETE FROM master WHERE id = ".$id."");
echo "<b>Der Folgende Eintrag wurde erfolgreich gelöscht:</b><br><br>";
echo $id;
}
}
if(isset($problem))
{
foreach($problem as $id)
{
mysql_querry("DELETE FROM problem WHERE id = ".$id."");
echo "<b>Der Folgende Eintrag wurde erfolgreich gelöscht:</b><br><br>";
echo $id;
}
}
mysql_close ($db);
?>
Hi!
Die Einträge werden einfach nicht gelöscht. Ich nehme an, dass die Parameter nicht sauber übergeben werden.
Sieht jemand den Fehler?
Mehrere. Und zwar die üblichen:
Lo!
Hallo,
Sieht jemand den Fehler?
Mehrere. Und zwar die üblichen:
- Keine Kontextwechselbeachtung in HTML und Datenbank - mit SQL-Injection könnte man die gesamte Tabelle löschen.
und jeder harmlose Spider, der mal mit den Formularfeldern "spielt", kann aus Versehen Einträge löschen, weil der Löschvorgang über einen GET-Request angestoßen wird. Das ist nicht gut - es gilt die Faustregel, dass Requests, die den Datenbestand verändern, möglichst per POST eingereicht werden. Eine wie auch immer geartete Authentifizierung wäre sicher auch keine schlechte Idee.
Ciao,
Martin
Hello,
und jeder harmlose Spider, der mal mit den Formularfeldern "spielt", kann aus Versehen Einträge löschen, weil der Löschvorgang über einen GET-Request angestoßen wird. Das ist nicht gut - es gilt die Faustregel, dass Requests, die den Datenbestand verändern, möglichst per POST eingereicht werden. Eine wie auch immer geartete Authentifizierung wäre sicher auch keine schlechte Idee.
Und außerdem sollte man eine "Forward-Translation Strategy" benutzen. Dazu werden selektierte Datensätze, die der User sehen und löschen darf, in der Session eingetragen (i.d.R. die ID) und dafür ein Key an den Client gesendet. Dieser Key kann dann (relativ egal, ob per Get oder Post) zusammen mit der Session benutzt werden, um den Datensatz beim Löschrequest zu identifizieren und zu löschen.
Wenn keine Rücküberstzung mehr stattfinden kann, kann man entscheiden, ob man den Täter gleich verhaften lässt, oder nur dumm grinst.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg