Eintrag aus DB Löschen klappt nicht.

funnyzocker

Erfahrenes Mitglied
Hallo.
Irgendwie hänge ich gerade auf dem Schlauch.
Es besteht ein Formular wo ein User eine BildID und ein Passwort eingibt.
Das Passwort ist md5 Verschlüsselt in der DB Gespeichert.

Nun Soll das Bild wenn er das Formular ausfüllt (BildID und Passwort) aus der Datenbank gelöscht werden und das Bild gleich auch von der Platte gelöscht werden.

Leider klappt das nicht.Es passiert nix. Es kommt auch keine Fehlermeldung.

PHP:
$del = "SELECT picverz, pvorn, pend, a_pass FROM picupload WHERE pvorn = '$_GET[picid]'";
$do = mysql_query($del);
while($row = mysql_fetch_array($do))
{
if($row[3] == md5($_GET[delpass]))
{
$datei ="$row[0]/$row[1].$row[2]";
$thumb = "$row[0]/$row[1].thumb.$row[2]";
unlink("$datei");
unlink("$thumb");

$delete = mysql_query("DELETE FROM
                              picupload
                       WHERE
                              pvorn = $_GET[picid]");
echo"Das Bild ist Gelöscht";
}
else
{
echo"Leider sind die Angaben nicht korrekt";
}
}
 
Hast du dir die $_GET-Variablen schon ausgeben lassen.
Denn wenn du das über Formular machst, kanns sein das die Werte alle im $_POST-Array sind und nicht im $_GET-Array! ;)
 
1. MD5 ist keine Verschlüsselung sondern ein Hash ;)

2. Versuch dir anzugewöhnen, dass wenn du auf assoziative Arrays zugreifst, die Schlüssel in Anführungszeichen zu setzen. Denn du möchtest ja einen String und keine Konstante abrufen.

Beispiel
PHP:
$delete = mysql_query("DELETE FROM picupload WHERE pvorn='".$_GET['picid']."'");
 
Igäl: In Strings kann man assoziative Indizies auch ohne '' oder "" verwenden, sofern man sie nicht in die geschweiften Klammern packt ;)

funnyzocker:
Habe deinen Code mal etwas aufgeräumt. Ist zwar fernab von dem, wie ich es für mich lösen würde, aber das lass ich mal deine Sorge sein ;)

PHP:
<?php
$_GET['picid'] = (int) $_GET['picid'];

$do = mysql_query("
    SELECT `picverz`, `pvorn`, `pend`, `a_pass`
    FROM `picupload`
    WHERE `pvorn` = '{$_GET['picid']}';");

if (mysql_num_rows($do) > 0) {
    while($row = mysql_fetch_row($do)) { //mysql_fetch_assoc --> assoziatives array ohne numerische ebenbilder ==> performanter
        if($row[3] == md5($_GET['delpass'])) {
            $datei = "{$row[0]}/{$row[1]}.{$row[2]}";
            $thumb = "{$row[0]}/{$row[1]}.thumb.{$row[2]}";
            if (is_readable($datei)) {
                unlink($datei);
            }
            if (is_readable($thumb)) {
                unlink($thumb);
            }

            $delete = mysql_query("
                DELETE FROM `picupload`
                WHERE `pvorn` = '{$_GET['picid']}';");
    
            echo"Das Bild wurde Gelöscht";
        } else {
            echo"Leider sind die Angaben nicht korrekt";
        }
    }
} else {
    echo 'Keine Datensätze gefetcht';
    if (mysql_errno() > 0) {
        echo "\n" . mysql_error();
    }
}

Kommt nun eine Ausgabe?
 
@maeTimmae:
Danke fürs Aufmerksam machen :) Aber das ist mir eigentlich wohl bekannt. Ich rede allerdings von folgender Problematik:

PHP:
	define("nr1", "nr2");

	$hash['nr1'] = "Eintrag 1";
	$hash['nr2'] = "Eintrag 2";

	echo $hash['nr1']."<br />"; //Gewünscht: Eintrag 1 - Ausgabe: Eintrag 1
	echo $hash[nr1]; // Gewünscht: Eintrag 1 - Ausgabe: Eintrag 2

Ich hab beispielsweise ein Konstantenfile für verschiedene Sprachen. Wenn es da eine Konstante UserName hat, und ich möchte aus dem $_POST-Array von einem Formular $_POST['UserName'] auslesen, bekomme ich einen verfälschten wert, wenn ich das ohne Anführungszeichen mache.
 
Zuletzt bearbeitet:
Zurück