Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Daten aus MySql-Datenbank per Button löschen

Frage Entwicklung PHP

Mitglied: manuel5

manuel5 (Level 1) - Jetzt verbinden

03.02.2009, aktualisiert 09:04 Uhr, 10160 Aufrufe, 12 Kommentare

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.

01.
<?php 
02.
 
03.
$host = "localhost"; 
04.
$user = "user"; 
05.
$password = "password"; 
06.
$dbname = "dbname"; 
07.
$tabelle ="tabelle"; 
08.
 
09.
$dbverbindung = mysql_connect ($host, $user, $password); 
10.
 
11.
$dbanfrage = "SELECT * from $tabelle"; 
12.
$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung); 
13.
$options = ""; 
14.
echo "<select>\n"; 
15.
while ($ausgabe = mysql_fetch_array ($result)) 
16.
17.
    $option = "<option>".$ausgabe[Nachname]. " " .$ausgabe[Vorname]." " .$ausgabe[Id]."</option>\n"; 
18.
echo $option; 
19.
20.
echo "</select>\n"; 
21.
 
22.
$ID=$_POST["loeschen"];      
23.
if (isset($_POST["loeschen"])) {  
24.
    $abfrage_loeschen="DELETE from $tabelle WHERE id=.$ausgabe[Id].";   
25.
    mysql_db_query ($dbname, $dbanfrage_loeschen, $dbverbindung); 
26.
27.
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
Mitglied: godlie
03.02.2009 um 09:32 Uhr
Auweh Auweh.
Also erstmal:
ganz oben am Anfang nach <?php
01.
error_reporting(E_ALL);
dann
1

und dann lesen und lernen.

ein kleiner hinweis:

01.
mysql_query("") or die( mysql_error() );
Bitte warten ..
Mitglied: manuel5
03.02.2009 um 11:49 Uhr
Servus,

ok, hat mir da gleich mal n paar Fehlermeldungen erzeugt!
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
Bitte warten ..
Mitglied: godlie
03.02.2009 um 11:59 Uhr
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.
Bitte warten ..
Mitglied: dog
03.02.2009 um 13:15 Uhr
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:

01.
<?php 
02.
error_reporting(E_ALL | E_NOTICE); 
03.
ini_set('display_errors','On');
ABER: Das gilt NUR für den Entwicklungsserver. In einer produktiven Umgebung MUSS aus dem On ein Off werden!

01.
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:

01.
$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:

01.
$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
Bitte warten ..
Mitglied: godlie
03.02.2009 um 13:28 Uhr
@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 )
Bitte warten ..
Mitglied: dog
03.02.2009 um 13:43 Uhr
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?
Bitte warten ..
Mitglied: godlie
03.02.2009 um 13:52 Uhr
hm damit hast du recht.

naja schau dir mal diesen code an:
01.
echo "<select>\n";  
02.
while ($ausgabe = mysql_fetch_array ($result))  
03.
{  
04.
$option = "<option>".$ausgabe[Nachname]. " " .$ausgabe[Vorname]." " .$ausgabe[Id]."</option>\n";  
05.
echo $option;  
06.
}  
07.
echo "</select>\n"; 
sollte da nicht irgendwie bei select ein name attribut dabei sein? damit es per $_POST[] ansprechbar wird?
Bitte warten ..
Mitglied: dog
03.02.2009 um 14:00 Uhr
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
Bitte warten ..
Mitglied: manuel5
03.02.2009 um 19:35 Uhr
Ok, ok, habt ja recht.



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

Gruß Manuel
Bitte warten ..
Mitglied: Guenni
05.02.2009 um 21:11 Uhr
Hi manuel5,

die ID des Datensatzes, den du löschen willst, übergibst du dem Parameter "value"

im Option-Tag der select-Box.

01.
 
02.
Formularaufbau: 
03.
 
04.
<form> 
05.
. . . 
06.
. . . 
07.
 
08.
<select name="to_delete"
09.
<?php 
10.
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ 
11.
 ?> 
12.
 <option value="<?php echo $row['id'];?>"><?php echo $row['Nachname'].", ".$row['Vorname'];?></option>; 
13.
 <?php 
14.
15.
?> 
16.
</select> 
17.
 
18.
. . . 
19.
. . . 
20.
</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 . . .

01.
 
02.
$query="delete from tabelle where id=".$_POST['to_delete']; 
03.
 
04.
mysql_query($query); 
05.
 
. . . wird dann der ausgewählte Datensatz gelöscht.


Gruß
Günni
Bitte warten ..
Mitglied: manuel5
06.02.2009 um 10:43 Uhr
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!

Danke und Gruß
Manuel
Bitte warten ..
Mitglied: manuel5
06.02.2009 um 14:10 Uhr
Joap,

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

Gruß Manuel
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Soziale Netzwerke
Facebook muss Daten von Whats App löschen (10)

Information von brammer zum Thema Soziale Netzwerke ...

Windows Server
Daten löschen - Windows Error Reporting (WER) (2)

Frage von Otto1699 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...