Datenbank Fetch Row

  • Hey,

    Ich habe noch ein Problem wo ich nicht weiter weiß. Wenn man sich registriert werden die Daten ja in die DB gespeichert. Nun wenn sich aber z.b. 3 zur selben Zeit anmelden. Dann wird nur der linkhash vom letzten db eintrag gezogen. Wie kann mann dies denn machen, dass auch die anderen 2 wenn sie auf den registrationslink klicken, deren eigenen link Hash gezogen bekommen ?


    Stef

  • Du erstellst für jeden User einen eigenen Link-Hash, speicherst den in der DB und sendest dann in der E-Mail den Link inkl. User-ID oder E-Mail und Hash als Parameter, sodass du nach Klick auf den Link weißt, wer gerade versucht sein Account zu bestätigen, und dann entsprechend entscheiden kannst, ob alles erfolgreich funktioniert hat und der User aktiviert werden kann.

  • Ja mach ich ja. Aber wenn jetzt sich z.b. 3 leute am selben Zeitpunkt registrieren. Und wenn der 1 und 2 dann die registration bestätigen wollen kommt dann immer Keine Übereinstimmung. Nur beim 3ten kommt erfolgreiche Registration.

  • Morgen,


    Beschreibung:


    Es gibt 3 User. Diese regestrieren sich so gegen 14 Uhr alle 3. Nun will der 1ste per Bestätigungslink seine Registration abschließen. Aber das wird nich erfolgreich abgeschlossen. Denn auf der Registrationabschließen.php wird dann die Ausgabe : Keine Übereinstimmung ausgegeben. Diese wird ausgegeben wenn der Parameter (LinkHash) nicht zu dem linkhash in der Datenbank passt. Nur beim 3.ten wird der richtige Linkhash gezogen.


    Was mache ich dabei nur falsch ?


    Script von RegistrationAbschließen.php:

  • Ich habe das mit dem Server-Query-String noch nie gesehen und vermute, dass da der Fehler liegt. Normalerweise verwendet man nämlich GET.

    Kannst du mal ein var_dump für parameter machen?


    Und noch was: Warum holst du die E-Mail über die Session? Würde das eher in den Link einbauen, weil sonst muss der User sich wieder komplett neu registrieren, sollte er zwischendurch den Browser schließen.

  • Hey,


    an dem SERVER['QUERY_STRING'] liegt es nicht. Mit dem erhalte ich immer den parameter aus der url. So wurde es mir mal gezeigt. Wie soll man denn da mit GET den parameter rausbekommen wenn man doch keinen wert zum zuweisen hat ?


    Hier die Beschreibung aus dem PHP-Handbuch:


    'QUERY_STRING'
    Sofern vorhanden, der Querystring, mittels dessen auf die Seite zugegriffen wurde.


    Ja dabei gebe ich dir recht. Habe nicht so tief darüber nachgedacht. Ich ändere es aufjedenfall noch.

  • Ich würde das folgendermaßen machen:


    So sieht dein Link aus: http://example.com/RegistrationAbschließen.php?email=user@email.com&token=random_token


    Die URL sowie die Parameter musst du natürlich entsprechend ändern bzw. werden von deinem Script beim Versand der E-Mail eingefügt.


    Anschließend empfängst du die Parameter in der RegistrationAbschließen.php:


    PHP
    <?php
        $email = $_GET['email'];
        $token = $_GET['token'];
    ?>


    Danach geht dann dein noch etwas angepasstes Script weiter mit den ganzen Checks usw. und letztendlich dem Eintrag in der DB.

  • Hey,


    ok gut. Habe mit GET[] nochnix zu tun gehabt. Habe bisher immer alles mit POST[] gemacht.

    Weiterhin wenn sich z.b. 2 Leute sich im selben Zeitpunkt anmelden wird immer aus der Datenbank der letzt link hash zum vergleich gezogen. Das heißt, die die sich davor registriert haben und dann die Registrierung abschließen will wird nicht der selbe linkHash aus db gezogen sondern der letzte der eingetragen worden ist.


    Wie kann ich dies verhindern ?

  • Ich kann nicht so richtig nachvollziehen, wo dein Problem liegt.


    Würdest du nochmals ausführlich mit Screenshots und Code das Problem beschreiben? Tut mir leid, aber ich wüsste aktuell nicht, was da schief läuft.

  • Habe dies mit dem GET nochnicht gemacht. Habe momentan dazu wenig Zeit. Nicht wundern.


    Problem:

    Habe User Test & Test2 angelegt (siehe Bild user test & test 2 angelegt).


    Nun möchte ich mit dem Linkhash aus der DB die registration abschließen mit user test & test2.


    Das Result von User Test Versuch (siehe Bild test1 result).

    Das Result von User Test2 Versuch (siehe Bild test2 result).


    Warum ist das so?

  • Ok, dann stell das erstmal auf GET um...


    Was mir noch aufgefallen ist:

    Du nutzt zum Vergleichen des Hashes einfach die üblichen Vergleichsoperatoren. Versuch es stattdessen vielleicht mal mit hash_equals(). Näheres dazu findest du auf PHP.net.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!