Doppelten Email-Eintrag in mysql verhindern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Doppelten Email-Eintrag in mysql verhindern

    Hallo Zusammen und einen schönen guten Abend.

    Ich bin neu hier und hoffe mal, das ich mit meiner Anfrage hier richtig bin.

    Ich habe ein kleines Problem und da ich noch relativer Anfänger bin, wäre es toll, wenn mir einer von euch mit helfen könnte.

    Ich versuche hier mal das Problem so verständlich wie möglich zu beschreiben.

    Ich habe ein Formular (siehe unten), mit dem Anrede, Vorname, Name und Email in eine mySql DB mittels der Datei work.php (siehe unten) eingetragen werden.

    Diese soll die Daten in die DB speichern, sofern diese Emailadresse noch nicht vorhanden ist. Ist diese bereits vorhanden, wird eben nichts gespeichert.

    Leider tut es das nicht. Es kommt eine Fehlermeldung (siehe unten) und er speichert die Daten dennoch ab.

    Kann mir bitte jemand sagen, was zum einen diese Fehlermeldung bedeutet und vor allem, wo genau der Fehler liegt und wie es richtig gemacht werden muss?

    Vielen herzlichen Dank jetzt schon an Euch.

    Formular:
    PHP-Code:
    <form action="work.php" method=postAnrede<br>
    <
    input type=text name="Array[anrede]" size5> <br> <br
    Vorname<br> <input type=text name="Array[vorname]" size20
    <
    br> <brName<br> <input type=text name="Array[name]" size20
    <
    br> <brEmail<br>
    <
    input type=text name="Array[email]" size40> <br> <br>
    <
    input type=submit name="SUBMIT" value="ok"> </form
    Ausführung: (work.php)
    PHP-Code:
    $sql "SELECT count(*) AS anzahl FROM $tabelle WHERE email = '".$Array[email]."'"
    $query mysql_query($sql); 
    $row mysql_fetch_object($query); 
    if(
    $row->anzahl 0)   
    echo 
    "E-Mail-Adresse schon vorhanden"
    else {   
    //es folgt der Eintrag in die Datenbank  

    $dbanfrage "INSERT into $tabelle values ('0', '$Array[email]', '$Array[anrede]', '$Array[vorname]', '$Array[name]')";  
    if (
    mysql_db_query ($dbname$dbanfrage$dbverbindung)) { 
    print (
    "Datenbankeintrag erfolgreich."); 
    } else { print (
    "Es traten Probleme auf."); 


    Fehlermeldung:
    PHP-Code:
    Warningmysql_fetch_object(): supplied argument is not a 
    valid MySQL result resource in 
    /var/kunden/webs/user171/html/kontakt/datenbank/work_2.php on line 25 
    Datenbankeintrag erfolgreich


  • #2
    Wo soll man da anfangen? Da ist einiges falsch ...

    register_globals in deiner php.ini ausschalten!
    error_reporting(E_ALL), siehe unsere Regeln!

    <input name="foo" ... > statt <input name="Array[foo]" ... >
    passend dazu $_POST['foo'] statt $Array[foo].

    <form method="post" ...> statt <form method=post ...>
    <input size="20" ... > statt <input size= 20 ... >
    oder allgemein <tag parameter="value" ...>


    Dann mal bitte echo $sql; vor mysql_query().

    Kommentar


    • #3
      legt die spalte für die mail als unique fest und dann kannst du mit mysql_affected_rows prüfen.

      peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Original geschrieben von onemorenerd
        Wo soll man da anfangen? Da ist einiges falsch ...

        register_globals in deiner php.ini ausschalten!
        error_reporting(E_ALL), siehe unsere Regeln!
        Ich verstehe im Moment nur BAHNHOF. Ich dachte, das Forum wäre für Angänger geignet?
        Original geschrieben von onemorenerd
        <input name="foo" ... > statt <input name="Array[foo]" ... >
        passend dazu $_POST['foo'] statt $Array[foo].

        <form method="post" ...> statt <form method=post ...>
        <input size="20" ... > statt <input size= 20 ... >
        oder allgemein <tag parameter="value" ...>
        OK. Das habe ich verstanden und stimme dir vollkommen zu. Auch wenn es mein eigentliches Problem nicht löst.
        Original geschrieben von onemorenerd
        Dann mal bitte echo $sql; vor mysql_query().
        Hier verstehe ich wieder nur BAHNHOF.

        Könntest du mir statt dessen nicht den richtigen CODE posten?

        Kommentar


        • #5
          Um Code betteln kommt hier nicht gut, dass musste ich damals auch schon feststellen, ist aber ja auch nicht verwunderlich, schließlich will man nciht für zig Leute den Code schreiben, man muss ihn schließlich verstehen..
          also:
          1.) error_reporting(E_ALL); hast du in dein Script eingefügt?
          2.) das echo $sql; dient dazu die eigentlich query die du abschickst dir vorher anzugucken und uns evt mitzuteilen; dabei wird dir dann auffallen, dass da was falsch sein muss, daher wahrscheinlich deine Fehlermeldung.
          3.) mysql_db_query ist deprecated, nimm lieber mysql_query und zu jedem mysql_query gehört in der Entwicklungsphase ein OR die(mysql_error());
          4.) das mit dem $_POST['foo'] hast du ja verstanden, musst es dann nur in deine Query einbauen, desweiteren merke: Arrays spricht man so an $array['foo'] und nicht $array[foo]

          Kommentar


          • #6
            Hallo Krel,

            vielen herzlichen Dank für deine kontruktive Antwort.

            NIchts liegt mir ferner als hier um einen Code zu betteln. Ich hatte mich zuletzt vor 5 Jahren mit PHP und mySql beschäftigt und habe ansonsten wenig damit zu tun. Ich benötige diese kleine Hilfe, weil ich einfach nicht die Zeit habe mich erst lange in die Thematik neu einzuarbeiten wegen dieses kleinen Codes. Und wenn ich als Anfänger nicht hier fragen kann, wo dann.

            Nun, wie dem auch sei. Ich habe die Änderungen so weit ich sie verstanden habe umgesetzt, aber immer noch Probleme.

            Original geschrieben von krel
            1.) error_reporting(E_ALL); hast du in dein Script eingefügt
            Habe ich ins Script eingefügt

            Original geschrieben von krel
            2.) das echo $sql; dient dazu die eigentlich query die du abschickst dir vorher anzugucken und uns evt mitzuteilen; dabei wird dir dann auffallen, dass da was falsch sein muss, daher wahrscheinlich deine Fehlermeldung.
            Ich hoffe, ich habe das richtig verstanden und eigefügt. (Sie Code unten 2. Zeile)

            Original geschrieben von krel
            3.) mysql_db_query ist deprecated, nimm lieber mysql_query und zu jedem mysql_query gehört in der Entwicklungsphase ein OR die(mysql_error());
            Das habe ich nicht ganz verstanden. Wie muss die entsprechende Zeile genau ausehen und wo muss diese stehen?

            Original geschrieben von krel
            4.) das mit dem $_POST['foo'] hast du ja verstanden, musst es dann nur in deine Query einbauen, desweiteren merke: Arrays spricht man so an $array['foo'] und nicht $array[foo]
            Ich hoffe, das ich dies richtig verstanden und eingebaut habe.

            Ich wäre dir wirklich sehr dankbar, wenn du mir bei der Lösung des Problems weiterhin helfen könntest.

            Vielen Dank

            Überarbeiteter Code:
            PHP-Code:
            $sql "SELECT count(*) AS anzahl FROM $tabelle WHERE email = '".$_POST['email']."'"
            echo 
            $sql
            $query mysql_query($sql); 
            $row mysql_fetch_object($query); // Zeile 28 Siehe Fehlermeldung
            if($row->anzahl 0)  // Zeile 29 Siehe Fehlermeldung
            echo "E-Mail-Adresse schon vorhanden"
            else {   

            //es folgt der Eintrag in die Datenbank 

            $dbanfrage "INSERT into $tabelle values ('0', '$_POST[email]', '$_POST[anrede]', '$_POST[vorname]', '$_POST[name]')";  
            if (
            mysql_db_query ($dbname$dbanfrage$dbverbindung)) { print ("Datenbankeintrag erfolgreich."); 
            } else { print (
            "Es traten Probleme auf."); } } 
            Fehlermeldung:
            PHP-Code:
            SELECT count(*) AS anzahl FROM kontakt WHERE email 'test@meinedomain.de' 
            Warningmysql_fetch_object(): supplied argument is not a valid MySQL result resource in 
            /var/kunden/webs/user171/html/kontakt/datenbank/work_2.php on line 28  

            Notice
            Trying to get property of non-object in 
            /var/kunden/webs/user171/html/kontakt/datenbank/work_2.php on line 29 
            Datenbankeintrag erfolgreich

            Kommentar


            • #7
              PHP-Code:
              $sql "SELECT count(*) AS anzahl FROM $tabelle WHERE email = '".$_POST['email']."'"
              echo 
              $sql
              $result mysql_query($sql) OR die(mysql_error()); // <--- wichtig, denn dann bekommen wir den mysql_error..
              $row mysql_fetch_object($result); // Zeile 28 Siehe Fehlermeldung
              if($row->anzahl 0) { 
               echo 
              "E-Mail-Adresse schon vorhanden"
              } else {   
               
              $sql "INSERT INTO 
                 
              $tabelle VALUES (0, //<--- ist wahrscheinlich ein int in der DB dann ohne ' '
                '"
              .$_POST['email']."', 
                '"
              .$_POST['anrede']."',
                '"
              .$_POST['vorname']."', 
                '"
              .$_POST['name']."')";  
               
              mysql_query($sql) OR die(mysql_error());
               if (
              mysql_affected_rows() > 0){ 
                print (
              "Datenbankeintrag erfolgreich."); 
               } else { 
                print (
              "Es traten Probleme auf."); 
               }

              Kommentar


              • #8
                Gibt es irgendwo in deinem Code ein mysql_connect()?

                Kommentar


                • #9
                  Original geschrieben von onemorenerd
                  Gibt es irgendwo in deinem Code ein mysql_connect()?
                  Hallo onemorenerd.

                  Ja den gibt es. Bevor ich die Abfrage nach der email auf
                  Vorhandensein eingefügt habe, hat das speichern funktioniert.
                  Die Fehler traten erst danach auf.

                  Zumindest bekomme ich jetzt dank der Hilfe von "krel" diese
                  Fehlermeldung:
                  PHP-Code:
                  SELECT count(*) AS anzahl FROM kontakt WHERE email 'test@meinedomain.de'No database selected 
                  Ich vermute mal, das es, wie du wahrscheinlich vermutest, daran liegt.

                  Vielleicht könntest du mir da weiterhelfen. Das wäre super.
                  Hier nochmal mein kompletter Code:
                  PHP-Code:
                  <?php
                  ini_set
                  ('error_reporting'E_ALL);  
                  $host "localhost"
                  $user "user***"
                  $password "*********"
                  $dbname "usr_user******"
                  $tabelle ="kontakt";  

                  $dbverbindung mysql_connect ($host$user$password);  

                  $sql "SELECT count(*) AS anzahl FROM $tabelle WHERE email = '".$_POST['email']."'";  
                  echo 
                  $sql;  
                  $result mysql_query($sql) OR die(mysql_error());  
                  $row mysql_fetch_object($result); 
                  if(
                  $row->anzahl 0) {  
                   echo 
                  "E-Mail-Adresse bereits vorhanden";  
                  } else { 
                  $sql "INSERT INTO     $tabelle VALUES (0,    
                  '"
                  .$_POST[email]."',    
                  '"
                  .$_POST[anrede]."',   
                  '"
                  .$_POST[vorname]."',   
                   '"
                  .$_POST[name]."')";    
                  mysql_query($sql) OR die(mysql_error());  
                  if (
                  mysql_affected_rows() > 0){    
                  print (
                  "Datenbankeintrag erfolgreich.");   
                  } else {    print (
                  "Es traten Probleme auf.");   

                  }  

                  mysql_close ($dbverbindung);  ?>

                  Kommentar


                  • #10
                    mysql_select_db()

                    Kommentar


                    • #11
                      Original geschrieben von lennart
                      mysql_select_db()
                      Toll. Und wo muss das in meinem Code hin?
                      Ich bin Anfänger.

                      Kommentar


                      • #12
                        und vielleicht mal das hier lesen

                        peter
                        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                        Meine Seite

                        Kommentar


                        • #13
                          Original geschrieben von quantumfire
                          Toll. Und wo muss das in meinem Code hin?
                          Ich bin Anfänger.
                          Heieiei. Da wo du die Datenbank auswählen willst.

                          Kommentar


                          • #14
                            Original geschrieben von Kropff
                            und vielleicht mal das hier lesen

                            peter
                            Super. Das war genau das, was ich gebraucht habe.
                            Konnte das Problem lösen. Funktioniert jetzt.

                            P.S. Deine Seite mit dem Tutorial ist sehr gut verständlich.
                            Vielen Dank.

                            Kommentar


                            • #15
                              Original geschrieben von quantumfire
                              Konnte das Problem lösen. Funktioniert jetzt.
                              dann bitte auch für die anderen den fehler und die lösung posten. falls mal einer ein ähnliches problem hat.

                              peter
                              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                              Meine Seite

                              Kommentar

                              Lädt...
                              X