Einträge in der Datenbank via Formular löschen !?

  • Thread starter Thread starter MauriceM
  • Start date Start date
M

MauriceM

Guest
Hallo zusammen,

ich habe mir auf meiner Seite einen kleinen Newsletterdienst gebastelt. Besucher die den Newsletter abonnieren möchten geben Ihre Daten in ein Formular ein, diese Daten werden überprüft, und dann an eine E-Mail Adresse weitergeleitet. Um das ganz zu vereinfachen werde alle eingegeben Daten auch noch in einer SQL-Datenbank gespeichert.

Hierfür verwende ich folgenden Code:

Code:
                    // Datenbank_Newsletter
                    $link = mysql_connect('Port','DB_Name','DB_Passwort') or die ('Fehler: Verbindung zu Datenbank konnte nicht hergestellt werden!');
                    @mysql_select_db('DB_Name', $link) or die ('Datenbank konnte nicht ausgewählt werden!');
                    
                    $query = "INSERT INTO newsletter(anrede,vorname,nachname,email) VALUES"
                        ."('". utf8_decode($_POST['anrede']). "'"
                        .",'". utf8_decode($_POST['vorname']). "'"
                        .",'". utf8_decode($_POST['nachname']) ."'"
                        .",'". utf8_decode($_POST['email']) ."'"
                        .")";
                    
                    @mysql_query($query, $link) or die ('Fehler: Kann Datensatz nicht einfügen! ('. $query .')');
                    mysql_close($link);

Das funktioniert auch einwandfrei. Jetzt jedoch möchte ich noch ein Formularfeld auf meiner Seite einbauen, indem Besucher die Ihren Newsletter abbestellen möchten, einfach nur Ihre E-Mail Adresse eingeben müssen und dann der Datensatz aus der Datenbank gelöscht wird. Sollte ja grundsätzlich mit dem Befehl "delete" kein Problem sein. Jedoch löscht er dann jeden Datensatz der in der Datenbank vorhanden ist.

Habe ich irgendwie die Möglichkeit direkt nur den Datensatz zu löschen, indem die E-Mail Adresse enthalten ist?

Liebe Grüße
MauriceM
 
Klar, geht das. Also wenn er alles löscht, dann machst du irgendwas falsch :-)

Also Prinzipiell sollte:

DELETE ... FROM.... WHERE... LIMIT 1

den gewünschten Effekt haben. Wie sieht denn dein MySQL-Query aus, der "alles" löscht?
 
Am Ende vom DELETE-SQL-Query
Code:
WHERE email='contact@example.org'

email = Spalte in der Tabelle
contact@example.org = E-Mail-Adresse, die über das Formular übermittelt wurde
 
Dein Beispiel sieht ja schrecklich aus.

PHP:
<?php
/** mysql_real_escape_string = entfernt böse zeichen, utf8_decode = dekodiert utf8. macht aber eigentlich keinen sinn. bau deine datenbank lieber mit utf8 auf. **/
function escape($value) {
	return mysql_real_escape_string(utf8_decode($value));
}

/** füge e-mail-adresse in die datenbank hinzu. **/
	$link = mysql_connect('Port','DB_Name','DB_Passwort');
	if(!$link) {
		echo 'Fehler: Verbindung zu Datenbank konnte nicht hergestellt werden!';	
	} else {
		$db = mysql_select_db('DB_NAME', $link);
		if(!$db) {
			echo 'Fehler: Datenbank konnte nicht ausgewählt werden';
		} else {
			$query = sprintf("INSERT INTO `newsletter` SET `anrede`='%s', `vorname`='%s', `nachname`='%s', `email`='%s' LIMIT 1",
				escape($_POST['anrede']), escape($_POST['vorname']), escape($_POST['nachname']), escape($_POST['email']));	
			$result = mysql_query($query, $link);
			if(!$result) {
				echo 'Fehler: Datensatz konnte nicht eingefügt werden';
			}
		}
	}
	mysql_close($link);				
?>

PHP:
<?php 
/** mysql_real_escape_string = entfernt böse zeichen, utf8_decode = dekodiert utf8. macht aber eigentlich keinen sinn. bau deine datenbank lieber mit utf8 auf. **/ 
function escape($value) { 
    return mysql_real_escape_string(utf8_decode($value)); 
} 

/** lösche e-mail-adresse aus der datenbank.**/ 
    $link = mysql_connect('Port','DB_Name','DB_Passwort'); 
    if(!$link) { 
        echo 'Fehler: Verbindung zu Datenbank konnte nicht hergestellt werden!';     
    } else { 
        $db = mysql_select_db('DB_NAME', $link); 
        if(!$db) { 
            echo 'Fehler: Datenbank konnte nicht ausgewählt werden'; 
        } else { 
            $query = sprintf("DELETE FROM `newsletter` WHERE `email`='%s'", 
                escape($_POST['email']));     
            $result = mysql_query($query, $link); 
            if(!$result) { 
                echo 'Fehler: Datensatz konnte nicht gelöscht werden'; 
            } 
        } 
    } 
    mysql_close($link);                 
?>

1) Fehler nicht per @ unterdrücken. Das macht dein Script langsam.
2) Script nicht per die() beenden. Weil sonst spätere Befehle nicht ausgeführt werden. Bei nem die() würde mysql_close nie ausgeführt werden.

Mach dich am besten mit den Rückgabewerten der einzelnen Funktionen vertraut. Die kannst du dann gezielt per IF abfragen.
 
Last edited by a moderator:
Back
Top