daniel: doppelte einträge verbieten

hallo forum,

ich habe ein kleines problem:

für ein gewinnspiel will ich die mailadresse des teilnehmers speichern. diese soll natürlich nur einmal erlaubt sein, man soll ja nicht mehrmals teilnehmen können.

ich habe also in meiner mySQL-DB eine spalte mail varchar(254), deren wert einmalig in der DB sein soll (d.h. nicht 2mal z.B. daniel_haller@gmx.de).

ich habe als atrribut von mail UNIQUE gesetzt , aber das scheint mySQL egal - ich kann trotzdem mehrmals dieselbe mailadresse einsetzen ?

funktioniert das mit dem Unique gar nicht bei varchar? oder bin ich irgendwie auf dem holzweg??
gibt es irgendwas, worauf ich achten müßte?

vielen dank für eure hilfe !!
grüße daniel

---------------------------------
P.S.: ich hatte dann eigentlich weiterführend vor, mit php mysql_errno() die fehlernummer für einen duplicate_entry auszulesen und dann eine entsprechende meldung zurückgeben...

  1. hallo forum,

    ich habe ein kleines problem:

    für ein gewinnspiel will ich die mailadresse des teilnehmers speichern. diese soll natürlich nur einmal erlaubt sein, man soll ja nicht mehrmals teilnehmen können.

    ich habe also in meiner mySQL-DB eine spalte mail varchar(254), deren wert einmalig in der DB sein soll (d.h. nicht 2mal z.B. daniel_haller@gmx.de).

    ich habe als atrribut von mail UNIQUE gesetzt , aber das scheint mySQL egal - ich kann trotzdem mehrmals dieselbe mailadresse einsetzen ?

    funktioniert das mit dem Unique gar nicht bei varchar? oder bin ich irgendwie auf dem holzweg??
    gibt es irgendwas, worauf ich achten müßte?

    vielen dank für eure hilfe !!
    grüße daniel


    P.S.: ich hatte dann eigentlich weiterführend vor, mit php mysql_errno() die fehlernummer für einen duplicate_entry auszulesen und dann eine entsprechende meldung zurückgeben...

    Ich hatte ein ähnliches Problem und habe dann auf Grund von Zeitmangel die unelegante Methode gewählt - in etwa wie folgt:

    if(mysql_num_rows(mysql_query("select <feldname> from <tabelle> where mail='".$mail."'")) <> 0)
    {
    //einmalig
    }
    else
    {
    //doublette
    }

    Hoffe das hilft Dir weiter...

    Gruß

    Axel

    1. KORREKTUR!!!

      Ich hatte ein ähnliches Problem und habe dann auf Grund von Zeitmangel die unelegante Methode gewählt - in etwa wie folgt:

      if(mysql_num_rows(mysql_query("select <feldname> from <tabelle> where mail='".$mail."'")) <> 0)
      {

      Doublette

      }
      else
      {

      einmalig

      }

      Hoffe das hilft Dir weiter...

      Gruß

      Axel

      1. hi alex,

        das ganze direkt von der DB aus zu machen wäre schon eleganter, das stimmt. aber ich finde deine idee auch nicht schlecht.
        denke mal, so mach ichs auch ;-)

        vielen dank für diene hilfe, du hast mir auf jeden fall weitergeholfen !!

        grüße daniel

        1. Hallo,

          ich halte den select und abfrage der eventuell bereits vorhandenen adresse für besser...

          wenn du über eine sql-abfrage gehst, die das feld nicht mit duplikaten zuläßt und der eintrag demzufolge fehlschlägt würde der user eine db-fehlermeldung erhalten...

          per select abfragen und mit php auswerten ist besser, da du den user nun zurückleiten kannst,das form mit den werten wieder parat hältst und zur verbesserung aufforderst...

          Odium

          1. ich halte den select und abfrage der eventuell bereits vorhandenen adresse für besser...

            wenn du über eine sql-abfrage gehst, die das feld nicht mit duplikaten zuläßt und der eintrag demzufolge fehlschlägt würde der user eine db-fehlermeldung erhalten...

            Nicht wenn Du vernünftiges Exception Handling machst.

            1. Nicht wenn Du vernünftiges Exception Handling machst.

              das heißt?

              Odium