Zitat von
MrChicken
Naja wenn ich die aus der ersten Tabelle nehme, können andere User die Gutscheine ja nicht mehr einlösen. Das ist ja auch nicht Sinn der Sache.
Ich dachte das wär der Sinn der Sache.
Also das eingelöste Gutscheine nicht nochmal eingelöst werden können. Benutze selbst Gutscheine und kann dir folgende Lösung Vorschlagen.
Eine Tabelle beinhaltet alle Gutscheine die noch einlösbar sind, sollte es die möglichkeit geben mehrere gleichnamige Gutscheine auf einmal zu erstellen statt fünfzigtausendmal unterschiedliche zu erfinden, so fügt man diese einfach mehrfach hinzu.
Wird ein Gutschein eingelöst, so wird er aus der Gutscheintabelle entfernt.
Ich zeige dir hier mal ein Beispiel wie es bei mir aussieht. (Achtung, ich benutze keine ID für die Gutscheine selbst da diese meiner Meinung nach irrelevant ist.)
Meine Tabellen sehen so aus:
unbenutzteCodes:
| uid | code | amount |
benutzteCodes:
| uid | code | amount | refid
Für dich:
uid = ID des Users der den Code erstellt hat
refid = ID des Users der den Code benutzt hat
code = code
amount = Lose
Gutscheine Erstellen:
PHP-Code:
#DB_MySQL ist meine Datenbank Klasse
# $uid = id des codeerstellers
# $code = gewünschter code
# $wert = wert des gutscheins
$db = new DB_MySQL();
$exists = $db->row_exists("SELECT uid, code, amount FROM unbenutzteCodes WHERE uid='".$uid."' AND code = '".$code."' AND amount = '$wert'") #ist ein komplett identischer gutschein von demselben user schon vorhanden ? WICHTIG das hier der wert stimmt, so ist es mögliche mehrere gleiche gutscheine zu erstellen
if($exists)
{
$db->query("INSERT INTO unbenutzeCodes (uid, code, amount) VALUES ('".$uid."', '".$code."', '".$wert."')");
}
else if(!$db->row_exists("SELECT uid, code, amount FROM unbenutzteCodes WHERE code = '".$code."'"))
{
#da der code noch nicht benutzt wurde
$db->query("INSERT INTO unbenutzeCodes (uid, code, amount) VALUES ('".$uid."', '".$code."', '".$wert."')");
}
else
{
if($db->row_exists("SELECT uid, code, amount FROM unbenutzteCodes WHERE uid='".$uid."' AND code = '".$code."'"))
{
#gutschein vorhanden, jedoch mit anderem wert
echo "Gutschein bereits benutzt, es kann nur ein Wert pro Code vorhanden sein";
}
else if($db->row_exists("SELECT uid, code, amount FROM unbenutzteCodes WHERE NOT uid='".$uid."' AND code = '".$code."'"))
{
#ein anderer Benutzer hat bereits einen derartigen gutschein erstellt
echo "Gutschein wird bereits verwendet";
}
}
Gutscheine einlösen:
PHP-Code:
#
# $id ist die userid des users der den gutschein grade benutzt
#
if(isset($_POST['code']) && $_POST['code'] != '')
{
#überprüft ob der code vorhanden ist und ob der benutzer nicht ersteller des Codes ist!
if($db->row_exists("SELECT uid, code FROM unbenutzteCodes WHERE code = '".$_POST['code']."' AND NOT uid = '".$id."' LIMIT 1"))
{
$row = $db->fetchRow();
#den gutscheincode aus der unbenutzen tabelle löschen
$db->query("DELETE FROM unbenutzteCodes WHERE uid = '".$row['uid']."' AND code = '".$row['code']."' LIMIT 1");
#den gutscheincode in die benutzten tabelle eintragen
$db->query("INSERT INTO benutzteCodes (uid, refid, code, amount) VALUE ('".$row['uid']."', '".$id."', '".$row['code']."', '".$row['amount']."')");
#irgendwas mit dem gutschein machen :)
#z.B dem user der den Code eingelöst hat das guthaben gutschreiben via mysql: UPDATE
}
}
MfG Iwan
PS: Hoffe ich hab nix vergessen