manuel5
Goto Top

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.

<?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

Content-ID: 107883

Url: https://administrator.de/contentid/107883

Ausgedruckt am: 20.11.2024 um 11:11 Uhr

godlie
godlie 03.02.2009 um 09:32:59 Uhr
Goto Top
Auweh Auweh.
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() );  
manuel5
manuel5 03.02.2009 um 11:49:36 Uhr
Goto Top
Servus,

ok, hat mir da gleich mal n paar Fehlermeldungen erzeugt! face-smile
Die habe ich nun verbessert, doch das Problem bleibt.
Er löscht mir die Daten nicht aus der Sql-DB.

Mit deinem Link ansich kann ich nicht wirklich was anfangen, das behandelt ja mein Problem nicht wirklich.

Gruß Manuel
godlie
godlie 03.02.2009 um 11:59:15 Uhr
Goto Top
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.
dog
dog 03.02.2009 um 13:15:51 Uhr
Goto Top
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:

<?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 face-smile)
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
godlie
godlie 03.02.2009 um 13:28:08 Uhr
Goto Top
@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 )
dog
dog 03.02.2009 um 13:43:07 Uhr
Goto Top
Nun ja, strenggenommen liefert $ausgabe['Id'] schon was: nämlich immer genau den letzten Eintrag der Tabelle $tabelle.
Das würde immerhin schon für ein LIFO-System reichen ;)

Was meinst du denn mit dem Namen von SELECT?
godlie
godlie 03.02.2009 um 13:52:19 Uhr
Goto Top
hm damit hast du recht.

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";   
sollte da nicht irgendwie bei select ein name attribut dabei sein? damit es per $_POST ansprechbar wird?
dog
dog 03.02.2009 um 14:00:00 Uhr
Goto Top
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
manuel5
manuel5 03.02.2009 um 19:35:40 Uhr
Goto Top
Ok, ok, habt ja recht.

face-sad

ich glaub ich les noch n bischen......

Gruß Manuel
Guenni
Guenni 05.02.2009 um 21:11:43 Uhr
Goto Top
Hi manuel5,

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
manuel5
manuel5 06.02.2009 um 10:43:51 Uhr
Goto Top
Hallo Günni,

genau das hab ich gesucht. Den "Hinweis" darauf das ich die ID seperat ausgeben soll/muss.
Das ja dann doch logisch ist.

Es funktioniert zwar noch nicht wirklich, aber zumindest ist der Weg nun klarer! face-smile

Danke und Gruß
Manuel
manuel5
manuel5 06.02.2009 um 14:10:08 Uhr
Goto Top
Joap,

noch ein bischen angepasst und es funktioniert!
Danke Euch alle!

Gruß Manuel