MySQL Feld wird trotz Anweisung gelöscht

Olli111111

Grünschnabel
Hallo, ich habe folgendes Problem:

Der User kann einen Code eingeben, mit dem er eine Datei runterladen kann. Der Code soll nur einmal funktionieren, dann aus der DB gelöscht werden. Es gibt aber 2 Codes, die dauerhaft gültig bleiben sollen.
Manchmal wird aber einer der beiden Codes trotzdem aus der DB gelöscht, wie kann das sein?
Hier der Code:

PHP:
$db = mysql_connect(SQL_HOST,SQL_USER,SQL_PW);
mysql_select_db(SQL_DB,$db);

$abfrage = "SELECT * FROM dd WHERE code = '".$_POST["usercode"]."'";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
   {
   header("Location: $row->link");
   
 if($_POST['usercode'] != 'PERMANENTCODE1' && $_POST['usercode'] != 'PERMANENTCODE2')
{
  $delete = "DELETE FROM dd WHERE code = '".$_POST["usercode"]."'";
}

   $del = mysql_query($delete);
   mysql_close($db); 



   }
   
   echo "<p>Sorry, invalid code! </p>";
   
   mysql_close($db);
 
Zuletzt bearbeitet von einem Moderator:
Mach doch einfach den WHERE im DELETE. Ist einfacher
SQL:
DELETE 
FROM dd 
WHERE UCASE(code) = UCASE('{$usercode}')
    AND UCASE(code) NOT IN ('PERMANENTCODE1', 'PERMANENTCODE1')

Item: Du solltest alle String mut UCASE() vergleichen, denn 'Hans' ist NICHT gleich 'HANS'

Item: Niemals $_POST[] direkt auf ein SQL loslassen. Ein riesiges Sicherheitloch, das du da öffnest. Immer mit mysql_real_escape_string() parsen.

Item: Überhaubt - wechsle von mysql_* zu mysqli_*. Denn mysql_* ist veraltet und wird irgendwann in zukünftigen PHP-Versionen nicht mehr exisitieren

Nachtrag:
Warum führst du dein Delete-SQL erst nach dem IF aus? Das müsste auch ins IF rein
 
Zuletzt bearbeitet von einem Moderator:
Hey,
vielen Dank!
Hab das WHERE im DELETE gemacht, bisher läufts super!
Ich verstehe zwar trotzdem nicht ganz, warum es vorher Probleme gab, aber Hauptsache es läuft! Vielen Dank!
 

Neue Beiträge

Zurück