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!
 
Zurück