glan: Bei neu laden kein neuer Eintrag

Hallo,
ich habe eine Frage zu Datenbanken.
Vorab: ich bin Anfänger in MySQL.

Ich wollte versuchen, ein registrationsscript zu basteln.
Ich dachte es wäre günstig, die Datenbank so aufzubauen:

+--------+---------+-------+------------+
|Vorname |Nachname |E-Mail |Andere Daten|
+--------+---------+-------+------------+
|Max     |Musterman|a@b.cd |...         |
+--------+---------+-------+------------+
|...     |....     |....   |            |
+--------+---------+-------+------------+
Also für jeden nutzer eine Zeile in der Tabelle.
(erstmal gut so für diese Zwecke?)

So, kommen wir zur eigentlichen Frage.
Wenn sich jemand registrieren will und die Seite, auf der die Query gesendet wird neu lädt, werden ja zwei Querys gesendet.
Wie kann ich das verhindern?

MfG

  1. echo $begrüßung;

    Wenn sich jemand registrieren will und die Seite, auf der die Query gesendet wird neu lädt, werden ja zwei Querys gesendet.
    Wie kann ich das verhindern?

    Du könntest einen eindeutigen Index über die Felder Vorname, Nachname und E-Mail legen (einen über alle drei Felder, nicht drei einzelne). Wenn du andere Kriterien für Eindeutigkeit hast, z.B. nur die E-Mail-Adresse, dann nimm diese. Mit diesem Unique Key verhinderst du auf Datenbankebene doppelte Datensätze. Andere Ansätze wären auf der Client-Seite, z.B. in einer Session mitzuschreiben, ob der Eintrag schon erfolgte, und dann darauf entsprechend zu ragieren.

    echo "$verabschiedung $name";

  2. Hello,

    Wenn sich jemand registrieren will und die Seite, auf der die Query gesendet wird neu lädt, werden ja zwei Querys gesendet.
    Wie kann ich das verhindern?

    Dass Requests mehrfach ausgelöst werden, kann man nur schwer verhindern.
    Man kann aber verhindern, dass ein "Multipost" zu einem mehrfachen Query führt, bzw. dass dieses Query mehrfach zu einem Insert führt.

    1. Kombination aus Nachname, Vorname und eMail ist eindeutig (setzen wir jetzt mal voraus).
       Du kannst also bei Deiner Datenbank einen Unique Index über diese drei Felder
      (nicht auf jedes einzeln!) setzen. Dann ist kein Mehrfacheintrag mehr möglich.

    2. Du kannst mit Sessions arbeiten.
       Im ersten Formular baust Du einen POST-Button, dessen Script das Eintragungsformular
       erzeugt. Das "Button-Script" legt unter der aktuellen Zeit einen Schlüssel in der
       Session ab. Dieser Schlüssel wird dem Eintragungsscript als Hidden-Field mitgesendet.
       Wenn nun der Post aus dem Formular kommt, wird im Array der Schlüssel nach dem Schlüssel
       gesucht. Er muss enthalten sein und seine Zeit darf noch nicht zu alt sein.
       Beim Suchdurchlauf kann man auch gleichzeitig zu alte Schlüssel entfernen...
       Wenn der Schlüssel enthalten war, wird er entfernt und der Eintrag wird vorgenommen.
       War der Schlüssel nicht enthalten oder zu alt, wird eine Fehlermeldung ausgegeben ...

    So schützt Du Dich im übrigen auch gegen automatische Spammer. Ein Spambot hat i.d.R. nur an Formularen mit Inputfeldern udn Textareas Interesse. Das Form mit dem Button nützt ihm nichts, also verwirft er es. Das Formular mit den Eingabefeldern nützt ihm aber ohne aktuellen Key _und_ dazu passende Session nichts. Er kann es zwar benutzen, aber Du erkennst sofort, dass hier nichts zu tun ist -  außer "Rote Lampe anknipsen" ...

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

  3. Ich wollte versuchen, ein registrationsscript zu basteln.
    Ich dachte es wäre günstig, die Datenbank so aufzubauen:

    +--------+---------+-------+------------+
    |Vorname |Nachname |E-Mail |Andere Daten|
    +--------+---------+-------+------------+
    |Max     |Musterman|a@b.cd |...         |
    +--------+---------+-------+------------+
    |...     |....     |....   |            |
    +--------+---------+-------+------------+
    Also für jeden nutzer eine Zeile in der Tabelle.
    (erstmal gut so für diese Zwecke?)

    Sieht brauchbar aus.

    So, kommen wir zur eigentlichen Frage.
    Wenn sich jemand registrieren will und die Seite, auf der die Query gesendet wird neu lädt, werden ja zwei Querys gesendet.
    Wie kann ich das verhindern?

    Zwei Queries? - Du meinst, dass sich beim Registrationsvorgang eine Abfrage "ob der Nutzer schon registriert ist" und eine Abfrage "falls nein, Nutzer wird registriert" paaren?

    Falls ja, das wäre normal.   ;)