Terminplaner | Eintrag löschen

DannyW

Well-known member
ID: 183268
L
20 April 2006
318
17
Guten Abend ;),
probiere schon den ganzen Tag, aber ich bekomme es einfach nicht hin mit dem Eintrag löschen. :p

Es ist immer nur möglich den obersten Eintrag zu löschen! Das wundert mich total.

Hier ist der Code:
Über eine Checkbox (loeschen) wird die id an loeschenid übergeben...

PHP:
// Übergebene ID der Checkbox in eine Variable speichern
 			$loeschenid = $_POST['loeschen'];
            
			// Tabelleninhalt in Variable nachrichten speichern
	        $nachrichten = "SELECT * from eintrag inner join login on eintrag.username=login.id  where login.username = '$username' 
					 order by datum";
			
			// ??
	        $nachrichten2 = mysql_db_query("benutzerdaten",$nachrichten,$verbindung);
	        
			// ??
	        $loesch = mysql_fetch_array($nachrichten2,MYSQL_ASSOC);
            
			// Wenn Eintrag löschen Button gedrückt wurde
 			if (isset($_POST['absenden']))
 			{
				// Vergleichen, ob ID aus der Datenbank gleich mit der Checkbox ID ist
 			     if ($loesch['eid'] == $loeschenid)
 			     {  
				// Wenn sie gleich sind den Eintrag löschen, wo die IDs gleich sind
                      $query = "DELETE from eintrag where eintrag.eid = '$loeschenid' LIMIT 1";
                      $result = mysql_query($query);
                      echo "Eintrag löschen war erfolgreich.";
                 } 
				 // Wenn nicht, dann Ausgabe einer Fehlermeldung
                 else
                 {
                      echo "Eintrag löschen war nicht erfolgreich";
                 }         
            }

Bin Anfänger und ich hoffe ihr könnt mir weiterhelfen, sodass ich es leicht verstehe :)

Vielen Dank!
 
1. Du rufst ja auch nur einen Datensatz ab. (Die restlichen hundert Millionen lässt du die DB zwar trotzdem holen, aber das Rechenzentrum muss ja auch irgendwie beheizt werden :ugly:)

2. SQL-Injection:!: 8O

3. Für was rufst du alle Datensätze ab, wenn du sie danach eh nur löschen willst? :wall: :LOL:

4. SELECT * ist böse :yawn:
 
1. Du rufst ja auch nur einen Datensatz ab. (Die restlichen hundert Millionen lässt du die DB zwar trotzdem holen, aber das Rechenzentrum muss ja auch irgendwie beheizt werden :ugly:)

2. SQL-Injection:!: 8O

3. Für was rufst du alle Datensätze ab, wenn du sie danach eh nur löschen willst? :wall: :LOL:

4. SELECT * ist böse :yawn:

1. Weiß nicht genau, was du mir damit sagen möchtest? :oops:

2. Ist das von nöten bei einem Schulprojekt?

3. Also ist Zeile 5-12 überflüssig? Oder verstehe ich das falsch?

4. Statt dem sternchen jede einzelnes feld aufzählen, also eintrag.eid usw. ?

Tut mir leid für die vielen Fragen... :-?
 
1. Weiß nicht genau, was du mir damit sagen möchtest? :oops:
Du rufst 100.000.000 mit dem SELECT ab (die Zahl 100.000.000 is übertrieben, weil ich nicht weiß, wie viele Datensätze es sind; könnten sogar noch mehr sein). Effektiv liest du aber nur einen einzigen Datensatz. Drum musst du dich ja auch nicht wundern, wenn deine Logik den zweiten Datensatz nicht anfasst. Steht ja auch nicht im Code.
Lies deinen Code doch mal durch ;)

2. Ist das von nöten bei einem Schulprojekt?
Wenn du getreut dem Motto "wird schon keiner merken, für die Schule schnell hinrotzen" arbeitest, klaro nicht.
Wenn das aber sensible Daten beinhaltet und du sowas in die Anwendung einbaust, kann dir einer alle Datensätze weglöschen (hier im Bsp.). Arbeitest du allgemein so schlampig, brauchts einen ja nicht wundern, wenn wieder durch die Schlagzeilen geht, dass mehrere Millionen Adressen, Bankdaten, Telefonnummern etc. von irgendeiner Webseite gestohlen wurden.

Sowas braucht die Welt :roll: - Nein, gewöhn dir gleich an, ordentlich zu schreiben. Kostet doch nix.

3. Also ist Zeile 5-12 überflüssig? Oder verstehe ich das falsch?
Richtig. Wenn du löschen willst, mach DELETE FROM. Vorher SELECTen is fürn Ar***, außer du brauchst wirklich noch vorher ne Info von dem Datensatz, den du löschen willst.
4. Statt dem sternchen jede einzelnes feld aufzählen, also eintrag.eid usw. ?
Exakt. Und zwar auch nicht alle, sondern nur die, die du auch wirklich brauchst.
 
PHP:
// Übergebene ID der Checkbox in eine Variable speichern
 			$loeschenid = $_POST['loeschen'];
            
			// Wenn Eintrag löschen Button gedrückt wurde
 			if (isset($_POST['absenden']))
 			{
				// Vergleichen, ob ID aus der Datenbank gleich mit der Checkbox ID ist
 			     if ($loesch['eid'] == $loeschenid)
 			     {  
				// Wenn sie gleich sind den Eintrag löschen, wo die IDs gleich sind
                      $query = "DELETE from eintrag where eintrag.eid = '$loeschenid' LIMIT 1";
                      $result = mysql_query($query);
                      echo "Eintrag löschen war erfolgreich.";
                 } 
				 // Wenn nicht, dann Ausgabe einer Fehlermeldung
                 else
                 {
                      echo "Eintrag löschen war nicht erfolgreich";
                 }         
            }

Hab es jetzt so... SQL Injection möchte ich mir zuletzt angucken...
Ist das soweit richtig? Nun kann ich aber noch nich mal den ersten Eintrag löschen... Vielleicht liegts daran dass er $loesch['eid'] nicht mehr kennt.. was müsste ich stattdessen schreiben?

Sorry, falls ich mich ungeschickt anstelle. Bin echt dankbar für die Hilfe!! ;)
 
$query = "DELETE from eintrag where eintrag.eid = '$loeschenid' LIMIT 1";
Heißt die Spalte in der Tabelle "eintrag" auch wirklich "eintrag.eid"?!?

Soweit ich aus deinem Quelltext entnehme, heißt die Spalte nur "eid"....



Zu deinem Problem dass jetzt garnichts mehr gelöscht wird:
// Übergebene ID der Checkbox in eine Variable speichern
$loeschenid = $_POST['loeschen'];

// Wenn Eintrag löschen Button gedrückt wurde
if (isset($_POST['absenden']))
{
// Vergleichen, ob ID aus der Datenbank gleich mit der Checkbox ID ist
if ($loesch['eid'] == $loeschenid)
{
// Wenn sie gleich sind den Eintrag löschen, wo die IDs gleich sind
$query = "DELETE from eintrag where eintrag.eid = '$loeschenid' LIMIT 1";
$result = mysql_query($query);
echo "Eintrag löschen war erfolgreich.";
}
// Wenn nicht, dann Ausgabe einer Fehlermeldung
else
{
echo "Eintrag löschen war nicht erfolgreich";
}
}

Wenn du dir deinen Code nochmal ansiehst fällt dir auf wieso ;-)

Du vergleichst $loesch['eid'] mit $loeschenid.
Da du aber $loesch['eid'] ja garnicht mehr aus der DB ausliest, also der Variable keinen Wert zuweist, kann keine Übereinstimmung, und somit keine Löschung erfolgen.

Es reicht eigentlich schon so:
// Übergebene ID der Checkbox in eine Variable speichern
$loeschenid = $_POST['loeschen'];

// Wenn Eintrag löschen Button gedrückt wurde
if (isset($_POST['absenden']))
{
$query = "DELETE from eintrag where eintrag.eid = '$loeschenid' LIMIT 1";
$result = mysql_query($query);
echo "Eintrag löschen war erfolgreich.";
}
 
Zuletzt bearbeitet:
nicht ganz @Only-Dream du verschluckst jetzt die ausgabe ob das löschen erfolgreich war

richtiger wäre
PHP:
<?php
// Übergebene ID der Checkbox in eine Variable speichern und absichern das es eine Zahl ist
$loeschenid = intval($_POST['loeschen']);

// Wenn Eintrag löschen Button gedrückt wurde
if (isset($_POST['absenden']))
{
    $query = mysql_query("DELETE FROM eintrag 
    WHERE 
        eid = ".$loeschenid." 
    LIMIT 1;");
    //Wenn genau ein Datensatz betroffen ist war das löschen erfolgreich sonst nicht
    if(mysql_affected_rows($result)==1){
        echo "Löschen erfolgreich";
    }else{
        echo "Löschen nicht erfolgreich";
    }
}
?>