Ergebnis 1 bis 10 von 10

Thema: Gutscheine automatisch als eingelöst markieren

  1. #1

    Gutscheine automatisch als eingelöst markieren

    Hallo,

    auf meiner Webseite gibt es die Möglichkeit Gutscheine einzulösen und auch selbst Gutscheine zu erstellen.

    Nun ist es so, dass ein User der einen Gutschein erstellt, diesen auch selbst einlösen kann. Genau das möchte ich verhindern.



    Ich habe für die Gutscheine 2 Tabellen.
    In der einen stehen die Gutscheincodes mit fortlaufender ID (Tabelle Gutscheine):

    Code:
    ID|Code |Rest|Lose|geheim
    1 |Test |124 |1000|1
    ...
    7 |bla  |33 |64534|1
    ...
    23|Test |124 |1000|1
    ...
    38|Keks |7   |5555|1
    Dann gibt es eine Tabelle in der das einlösen eines Gutscheins gespeichert wird, damit er nicht mehrmals abgerufen werden kann (Tabelle: Gutschein_reload).

    Code:
    ID|UID   |GutscheinID   |Zeit
    1 |36242 |1             |timestamp beim einlösen
    2 |36242 |38            |timestamp beim einlösen
    
    (User 36242 könnte also nur noch die Gutscheine 7 und 23 einlösen)
    ID ist dabei auch fortlaufend, UID die KlammID des Users, GutscheinID ist aus Tabelle Gutscheine die ID, Zeit dürfte klar sein.


    Nun habe ich das Formular für das Einlösen und das Erstellen von Gutscheinen auf der gleichen Seite (das soll auch so bleiben).

    Beim erstellen wird generell nun in der Tabelle Gutscheine der Gutschein erstellt:
    Code:
    db_query("INSERT INTO ".$db_prefix."_gutscheine (code,rest,lose,geheim) VALUES usw usf.");
    Wie löse ich es jetzt, dass dieser neue Gutschein in der Reloadtabelle gespeichert wird? Das einzige was eindeutig ist, ist die ID aus Tabelle Gutscheine.
    Code, Wert, Rest usw. können doppelt vorkommen (Im Beispiel Gutschein 1 und 23).
    Gibt es also eine Möglichkeit gleich nach dem erstellen des Gutscheines die ID abzugreifen und in die Tabelle Gtuschein_reload einzutragen??
    Meine Seite: www.klicklos.de

  2. #2
    Administrator Avatar von Lokutos
    Registriert seit
    29.03.2008
    Beiträge
    3.147
    PHP-Code:
    db_query("INSERT INTO Gutschein_reload (UID,GutscheinID,Zeit) VALUES '".$_SESSION['uid']."', '".$GUTSCHEINVARIABLE."', ".time()." "); 
    unter der annahme das zeit timestamp ist die tabellen und spalten so heissen wie es da steht
    code ist definitive so nicht einsatzfähig da ich z.b. auch die variablen des addons nicht kenne...

    einfach gesagt mach der code nix anderes wie den ersteller in den reload zu schreiben beim erstellen.
    SwissNetWorX - VMS Hosting / V-Server / Cloud-Server / Hosting

  3. #3
    Neuer Benutzer
    Registriert seit
    21.03.2013
    Beiträge
    6
    Hallo MrChicken,

    Evtl. Solltest du bissle umdenken. Statt alle benutzten Gutscheine aufzuschreiben UND in der ersten Tabelle stehen zu lassen, könntest du einfach die Gutscheine aus der ersten in die zweite Tabelle verschieben, so hast du eine klare Trennung zwischen noch nicht benutzten und schon benutzen Gutscheinen.

    Ist aber nur ein Vorschlag, weis ja nicht ob du die in der ersten Tabelle noch brauchst. :O

    MfG Iwan

  4. #4
    Zitat Zitat von Iwan933 Beitrag anzeigen
    Hallo MrChicken,

    Evtl. Solltest du bissle umdenken. Statt alle benutzten Gutscheine aufzuschreiben UND in der ersten Tabelle stehen zu lassen, könntest du einfach die Gutscheine aus der ersten in die zweite Tabelle verschieben, so hast du eine klare Trennung zwischen noch nicht benutzten und schon benutzen Gutscheinen.

    Ist aber nur ein Vorschlag, weis ja nicht ob du die in der ersten Tabelle noch brauchst. :O

    MfG Iwan
    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.

    @Lokutos: Das funktioniert ja nicht, da ".$GUTSCHEINVARIABLE." ja nicht existiert. Die passende Variable (nämlich die ID) bekommt der Gutschein ja erst wenn er in die Datenbank eingetragen wird.
    Mal schauen ich setz mich die Tage nochmal dran und versuche zumindest erstmal einen Workaround.
    Meine Seite: www.klicklos.de

  5. #5
    Administrator Avatar von Lokutos
    Registriert seit
    29.03.2008
    Beiträge
    3.147
    bei einem mysql insert in eine tabelle mit einem autoincrement wert kann man mit
    http://php.net/manual/de/function.mysql-insert-id.php
    ganz einfach die ID abfragen...
    SwissNetWorX - VMS Hosting / V-Server / Cloud-Server / Hosting

  6. #6
    Erfahrener Benutzer
    Registriert seit
    26.08.2007
    Beiträge
    231
    Ich halte das für Tinnef den Gutscheinersteller in vms_Gutschein_reload einzutragen, er hat doch keinen Gutschein eingelöst. Sinnvoller und naheliegend ist doch der Eintrag in vms_Gutscheine:
    Code:
    SQL:
    ALTER TABLE vms_Gutscheine ADD ersteller INT(6) ZEROFILL
    Beim Einbuchen der Gutscheine:
    PHP-Code:
    db_query("INSERT INTO vms_gutscheine (code,rest,lose,geheim,ersteller) VALUES ('$code',$anzahl,$wert,$status,$uid)"); 
    und bei der Anzeige bzw. beim Einlösen darauf achten das
    PHP-Code:
    && $gutschein['ersteller'] != $_SESSION['uid'
    ist, damit der Ersteller nicht Einlöser wird...

  7. #7
    Neuer Benutzer
    Registriert seit
    21.03.2013
    Beiträge
    6
    Irgendwie doppelpost Oo

  8. #8
    Neuer Benutzer
    Registriert seit
    21.03.2013
    Beiträge
    6
    Zitat Zitat von MrChicken Beitrag anzeigen
    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

  9. #9
    Erfahrener Benutzer
    Registriert seit
    26.08.2007
    Beiträge
    231
    Zitat Zitat von Iwan933 Beitrag anzeigen
    [...]
    Achtung, ich benutze keine ID für die Gutscheine selbst da diese meiner Meinung nach irrelevant ist.
    [...]
    Soll heissen das deine User Gutscheine nicht wiederkehrend auflegen kann?

    Gesetzt den Fall, Refjaeger_bln legte monatlich eine DownlineRalley auf und möchte seine Refs am Anfang des Monats auf der Seite wissen, müsste er den Gutscheincode jedesmal neu mitteilen...
    Mit ID hat man doch eine deutlich höhere Skalierbarkeit des Gutscheinbereichs.

    @MrChicken:
    Wenn du soweit bist denk mal über
    Code:
    SQL: 
    ALTER TABLE vms_Gutscheine ADD
    (
      zeit_erstellt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
      zeit_start TIMESTAMP NULL DEFAULT NULL,
      zeit_ende TIMESTAMP NULL DEFAULT NULL,
    );
    
    nach.

  10. #10
    Neuer Benutzer
    Registriert seit
    21.03.2013
    Beiträge
    6
    @eaxo

    Ich kann dir leider nicht ganz Folgen, da userid und refid bei benutzten Gutscheinen hinterlegt sind kann im Falle eines Falles der Code 100%tig nachgetrackt werden. Ansonsten tauchen die Gutscheine nie wieder irgendwo auf, da die Refbeziehungen nicht aus den Gutscheinen abgeleitet werden, sondern serperat, beim Einlösen, festgelegt werden.


    MfG Iwan

Ähnliche Themen

  1. [SUCHE] Amazon gutscheine
    Von Xenon im Forum Sonstiges
    Antworten: 0
    Letzter Beitrag: 12.06.2010, 14:43
  2. Gutscheine mit Bonuslosen
    Von dwarfpitcher im Forum Support zu Addons & Erweiterungen
    Antworten: 4
    Letzter Beitrag: 21.12.2007, 11:45
  3. Verkaufe 5,- €uro Gutscheine
    Von Angel im Forum Sonstiges
    Antworten: 0
    Letzter Beitrag: 06.07.2007, 14:42
  4. ATARI Gutscheine zu verkaufen !
    Von Angel im Forum Sonstiges
    Antworten: 0
    Letzter Beitrag: 06.07.2007, 14:38

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •