Daten aus MySql-Datenbank per Button löschen
Guten Morgen,
habe eine Select-Box mit Anbindung an einer MySql-DB. Hier wähle ich Daten aus der Db aus und möchte diese ausgewählten dann über/durch den Button löschen.
Sodala, die Selcet-Box funktioniert - es wird mit so angezeigt wie ich es haben will.
Nur das löschen selber funktioniert noch nicht.
Er bringt mir keine Fehlermeldung und tut auch sonst nuescht.
Jemand ne Idee?
Den Button habe ich "loeschen" genannt.
Gruß Manuel
habe eine Select-Box mit Anbindung an einer MySql-DB. Hier wähle ich Daten aus der Db aus und möchte diese ausgewählten dann über/durch den Button löschen.
<?php
$host = "localhost";
$user = "user";
$password = "password";
$dbname = "dbname";
$tabelle ="tabelle";
$dbverbindung = mysql_connect ($host, $user, $password);
$dbanfrage = "SELECT * from $tabelle";
$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);
$options = "";
echo "<select>\n";
while ($ausgabe = mysql_fetch_array ($result))
{
$option = "<option>".$ausgabe[Nachname]. " " .$ausgabe[Vorname]." " .$ausgabe[Id]."</option>\n";
echo $option;
}
echo "</select>\n";
$ID=$_POST["loeschen"];
if (isset($_POST["loeschen"])) {
$abfrage_loeschen="DELETE from $tabelle WHERE id=.$ausgabe[Id].";
mysql_db_query ($dbname, $dbanfrage_loeschen, $dbverbindung);
}
mysql_close ($dbverbindung)
Sodala, die Selcet-Box funktioniert - es wird mit so angezeigt wie ich es haben will.
Nur das löschen selber funktioniert noch nicht.
Er bringt mir keine Fehlermeldung und tut auch sonst nuescht.
Jemand ne Idee?
Den Button habe ich "loeschen" genannt.
Gruß Manuel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 107883
Url: https://administrator.de/contentid/107883
Ausgedruckt am: 20.11.2024 um 11:11 Uhr
12 Kommentare
Neuester Kommentar
Auweh Auweh.
Also erstmal:
ganz oben am Anfang nach <?php
dann
1
und dann lesen und lernen.
ein kleiner hinweis:
Also erstmal:
ganz oben am Anfang nach <?php
error_reporting(E_ALL);
dann
1
und dann lesen und lernen.
ein kleiner hinweis:
mysql_query("") or die( mysql_error() );
Ich glaube kaum das du auch nur eine Seite davon gelesen hast.
Sonst hättest du gesehen das ab Kapitel 27 das Thema MySql behandelt wird.
Nachfolgend sind dann ein paar Beispiele was man alles mit einer Datenbank anstellen kann.
Nebenbei würd ich dir auch mal das hier zum lesen empfehlen:
2
Denn du weist ja nicht mal wie ein select auszusehen hat, geschweige denn wie du ihn ansprechen kannst.
Lesen,lernen, üben,lesen,lernen,üben..... oder las die Finger vom Programmieren.
Sonst hättest du gesehen das ab Kapitel 27 das Thema MySql behandelt wird.
Nachfolgend sind dann ein paar Beispiele was man alles mit einer Datenbank anstellen kann.
Nebenbei würd ich dir auch mal das hier zum lesen empfehlen:
2
Denn du weist ja nicht mal wie ein select auszusehen hat, geschweige denn wie du ihn ansprechen kannst.
Lesen,lernen, üben,lesen,lernen,üben..... oder las die Finger vom Programmieren.
godlie, komm mal wieder runter.
A) Es ist noch kein Genie vom Himmel gefallen.
B) Sind in deinen Beispielen auch gefährliche Fehler.
Gehen wir es also mal wieder Stück für Stück durch:
Tastsächlich sollte ganz am Anfang einer PHP-Seite folgendes stehen:
ABER: Das gilt NUR für den Entwicklungsserver. In einer produktiven Umgebung MUSS aus dem On ein Off werden!
So steht es im PHP-Handbuch und so ist es totaler Quark.
Alles was du damit erreichst ist eine Sicherheitslücke durch Information Disclosure, weil ein Hacker so ganz schnell sehen kann wann er einen Angriffspunkt in deinem System gefunden hat.
mysql_error() darf NIE über einen Weg wie die() oder echo() verwendet werden! (außer du hast eine Prüfung implementiert, die zwischen Entwicklungs- und Produktionsumgebung unterscheidet).
Und zu Manuels Problem: Wenn du meinen ersten Tipp beherzigst wird dich PHP mit einer Fehlermeldung beglücken, die dir deinen Fehler zeigt.
Wenn du aber faul bist, hier die Lösung:
In der Praxis würde die erzeugte Abfrage so aussehen:
(Beachte die beiden Punkte - die gehören hier nicht hin )
Korrekterweise hättest du folgendes schreiben müssen:
Warum ich hier sprintf() und nicht Concatenation verwende erschließt sich dir, wenn du folgendes durchliest: http://de.wikipedia.org/wiki/SQL-Injection (BITTE nimm das ernst, und versuche es wirklich zu verstehen - das ist WICHTIG!)
Außerdem gehören um die alphanumerischen Indizes eines Arrays Anzuführungszeichen. Auf Deutsch:
Immer wenn du $array[abc] schreibst hättest du $array['abc'] schreiben müssen.
(Ob doppelte oder einfache Anführungszeichen ist hier erstmal egal, Einfache können von PHP schneller verarbeitet werden und sind immer dann vorzuziehen, wenn eine Zeichenkette KEINE Variable enthält.)
Grüße
Max
A) Es ist noch kein Genie vom Himmel gefallen.
B) Sind in deinen Beispielen auch gefährliche Fehler.
Gehen wir es also mal wieder Stück für Stück durch:
Tastsächlich sollte ganz am Anfang einer PHP-Seite folgendes stehen:
<?php
error_reporting(E_ALL | E_NOTICE);
ini_set('display_errors','On');
ABER: Das gilt NUR für den Entwicklungsserver. In einer produktiven Umgebung MUSS aus dem On ein Off werden!
mysql_query("") or die( mysql_error() );
So steht es im PHP-Handbuch und so ist es totaler Quark.
Alles was du damit erreichst ist eine Sicherheitslücke durch Information Disclosure, weil ein Hacker so ganz schnell sehen kann wann er einen Angriffspunkt in deinem System gefunden hat.
mysql_error() darf NIE über einen Weg wie die() oder echo() verwendet werden! (außer du hast eine Prüfung implementiert, die zwischen Entwicklungs- und Produktionsumgebung unterscheidet).
Und zu Manuels Problem: Wenn du meinen ersten Tipp beherzigst wird dich PHP mit einer Fehlermeldung beglücken, die dir deinen Fehler zeigt.
Wenn du aber faul bist, hier die Lösung:
$abfrage_loeschen="DELETE from $tabelle WHERE id=.$ausgabe[Id].";
In der Praxis würde die erzeugte Abfrage so aussehen:
DELETE FROM meinetabelle WHERE id=.12.
(Beachte die beiden Punkte - die gehören hier nicht hin )
Korrekterweise hättest du folgendes schreiben müssen:
$abfrage_loeschen = sprintf('DELETE from %s WHERE id = %u',$tabelle,$ausgabe['Id']);
Warum ich hier sprintf() und nicht Concatenation verwende erschließt sich dir, wenn du folgendes durchliest: http://de.wikipedia.org/wiki/SQL-Injection (BITTE nimm das ernst, und versuche es wirklich zu verstehen - das ist WICHTIG!)
Außerdem gehören um die alphanumerischen Indizes eines Arrays Anzuführungszeichen. Auf Deutsch:
Immer wenn du $array[abc] schreibst hättest du $array['abc'] schreiben müssen.
(Ob doppelte oder einfache Anführungszeichen ist hier erstmal egal, Einfache können von PHP schneller verarbeitet werden und sind immer dann vorzuziehen, wenn eine Zeichenkette KEINE Variable enthält.)
Grüße
Max
@dog
Na gut das mag ein wenig forsch geklungen haben, aber wenn du sein Beispiel genau ansiehst und nicht überfliegst wie ich es im ersten post habe, dann wird dir auffalen, dass der select über keinen Namen verfügt.
Somit kann $ausgabe[Id] <-- irgendiwe nix leifern oder?
Also ich für meinen Teil kenne da net grad so nen gemütlichen Weg darauf dann zuzugreifen.. ( Stichwort DOM )
Na gut das mag ein wenig forsch geklungen haben, aber wenn du sein Beispiel genau ansiehst und nicht überfliegst wie ich es im ersten post habe, dann wird dir auffalen, dass der select über keinen Namen verfügt.
Somit kann $ausgabe[Id] <-- irgendiwe nix leifern oder?
Also ich für meinen Teil kenne da net grad so nen gemütlichen Weg darauf dann zuzugreifen.. ( Stichwort DOM )
hm damit hast du recht.
naja schau dir mal diesen code an:
sollte da nicht irgendwie bei select ein name attribut dabei sein? damit es per $_POST ansprechbar wird?
naja schau dir mal diesen code an:
echo "<select>\n";
while ($ausgabe = mysql_fetch_array ($result))
{
$option = "<option>".$ausgabe[Nachname]. " " .$ausgabe[Vorname]." " .$ausgabe[Id]."</option>\n";
echo $option;
}
echo "</select>\n";
Ach DAS select meinst du - ich dachte du beziehst dich auf das SQL-SELECT.
Ja, damit ein <form> Subelement wie <select> über PHPs $POST-Superglobale ansprechbar ist muss man auch das name="" Attribut angeben.
Ich habe erstmal nur den offensichtlichen Fehler im PHP/SQL-Code korrigiert, wenn manuel hier aber auf das ausgewählte Element der select-Gruppe zugreifen will, dann ist tatsächlich noch einige Grundlagenarbeit notwendig.
Da sollte dann das hier weiterhelfen:
http://de3.php.net/manual/de/language.variables.external.php
http://de.selfhtml.org/html/formulare/auswahl.htm#listen
Ja, damit ein <form> Subelement wie <select> über PHPs $POST-Superglobale ansprechbar ist muss man auch das name="" Attribut angeben.
Ich habe erstmal nur den offensichtlichen Fehler im PHP/SQL-Code korrigiert, wenn manuel hier aber auf das ausgewählte Element der select-Gruppe zugreifen will, dann ist tatsächlich noch einige Grundlagenarbeit notwendig.
Da sollte dann das hier weiterhelfen:
http://de3.php.net/manual/de/language.variables.external.php
http://de.selfhtml.org/html/formulare/auswahl.htm#listen
Hi manuel5,
die ID des Datensatzes, den du löschen willst, übergibst du dem Parameter "value"
im Option-Tag der select-Box.
Nun steht im POST-Array die ID des Datensatzes, was du mit . . .
echo $_POST['to_delete'];
. . . nach Absenden des Formulars überprüfen kannst.
Mit . . .
. . . wird dann der ausgewählte Datensatz gelöscht.
Gruß
Günni
die ID des Datensatzes, den du löschen willst, übergibst du dem Parameter "value"
im Option-Tag der select-Box.
Formularaufbau:
<form>
. . .
. . .
<select name="to_delete">
<?php
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
?>
<option value="<?php echo $row['id'];?>"><?php echo $row['Nachname'].", ".$row['Vorname'];?></option>;
<?php
}
?>
</select>
. . .
. . .
</form>
Nun steht im POST-Array die ID des Datensatzes, was du mit . . .
echo $_POST['to_delete'];
. . . nach Absenden des Formulars überprüfen kannst.
Mit . . .
$query="delete from tabelle where id=".$_POST['to_delete'];
mysql_query($query);
. . . wird dann der ausgewählte Datensatz gelöscht.
Gruß
Günni