Eintrag in Datenbank nicht doppelt

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

  • Eintrag in Datenbank nicht doppelt

    Hallo. Habe ein Registrierungsscript in PHP geschrieben:

    PHP-Code:
    $connect = @ mysql_connect($dbserver$dbuser$dbpass);
    if (!
    $connect)
    {
    header("Location: index.php?loc=main.php"); 
    exit;
    }
    mysql_select_db($dbname,$connect);
    $reg "INSERT INTO user (name, pass, email, geburtstag, wohnort, geschlecht) VALUES ('$regname', '$regpass', '$regmail', '$regbirth', '$regwohnort', '$reggeschlecht')";
    $reg2 mysql_query($reg);
    mysql_close($connect); 
    So, es funktioniert auch ganz einwandfrei. Nur möchte ich irgendwie sichergehen, dass kein Username doppelt registriert werden kann. Hat jemand ne Lösung? Thx.

  • #2
    vorher durch ne select Abfrage prüfen, ob dieser Benutzername bereits
    in der DB vorhanden ist
    TBT

    Die zwei wichtigsten Regeln für eine berufliche Karriere:
    1. Verrate niemals alles was du weißt!


    PHP 2 AllPatrizier II Browsergame

    Kommentar


    • #3
      ...oder du machst den usernamen UNIQUE und checkst mit
      mysql_affected_rows() ob er was eingetragen hat...
      eval(str_pad(aa|db,4,slarti^~äü_i_)." \"áú¾ïùû䶳Ðäýï©üèíþç£þé\"^~\"no bugs, only features\";");

      Kommentar


      • #4
        letzteres ist auch die sauberste lösung, da du die DB dafür sehr gut nutzen kannst.. )
        ein zusätzlicher select kostest performance. besonders, wenn du viele user in der DB hast.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Original geschrieben von slarti
          ...oder du machst den usernamen UNIQUE und checkst mit
          mysql_affected_rows() ob er was eingetragen hat...
          Könnte(s)t du/ihr das mal näher erklären? Danke.

          Kommentar


          • #6
            klick mal in phpMyAdmin auf UNIQUE beim feld username.
            schon ist es UNIQUE.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Nixpeil?! Vielleicht steh ich einfach nur gerade auf der Leitung, aber bitte wo und wie "UNIQUE"? (Ich mach das übrigens gerade zum testen in ner DB bei Tripod) Wie schreib ich dann die Abfrage ob der Name schon existiert? Ich möchte sicherstellen das kein Username zweimal registriert werden kann, falls ich mich da vielleicht etwas ungünstig ausgedrückt hab.

              Kommentar


              • #8
                du schreibst normal in die DB rein.
                nach dem INSERT oder UPDATE
                checkst du mit mysql_affected_rows() was passiert ist. du bekommt codes zurück, ob alles ok war, oder ob es ein UNIQUE-feld verletzt hat. letzteres tritt bei doppeleinträgen auf.
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  Sorry, finde aber mit bestem Willen bei Tripod - Datenbankverwaltung nix mit UNIQUE. Ich hab leider z. Zt. keinen anderen Server und deswegen muss ich meine Scripte auf dem Tripod-Server testen ...

                  PHP-Code:
                  mysql_affected_rows(name);
                  if 
                  name !UNIQUE
                  {
                  header("Location: index.php?loc=regstep1.php");
                  exit;

                  So? Dann? Sorry, aber ich steh echt gerade voll auf der Leitung?!?

                  Kommentar


                  • #10
                    hier mal ein SQL zum anlegen einer usertabelle. kannste mit phpMyAdmin ausführen, dann ist es direkt bei dir in der DB drin.
                    Code:
                    CREATE TABLE User (
                      UserKey int(11) NOT NULL auto_increment,
                      Name varchar(25) NOT NULL default 'Name',
                      Vorname varchar(25) NOT NULL default 'Vorname',
                      user varchar(12) NOT NULL default '',
                      pwd varchar(32) NOT NULL default '',
                      eMail varchar(30) default NULL,
                      PRIMARY KEY  (UserKey),
                      UNIQUE KEY user (user)
                    );
                    schau die mal die letzte zeile vor der klammer zu ')' an.

                    und hier ein wenig code von php.net -> http://de.php.net/manual/de/function...ected-rows.php

                    PHP-Code:
                    <?php
                        
                    /* Verbindung zur Datenabank */
                        
                    mysql_pconnect("localhost""mysql_user""mysql_password") or
                            die (
                    "Could not connect");

                        
                    /* Update von Datensätzen */
                        
                    mysql_query("UPDATE mytable SET used=1 WHERE id < 10");
                        
                    printf ("Veränderte Datensätze: %d\n"mysql_affected_rows());
                        
                    mysql_query("COMMIT");
                    ?>
                    musst du nun nur noch anpassen.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      Wenn ich das richtig verstanden habe müsste das dann so aussehen:

                      PHP-Code:
                      $connect = @ mysql_connect($dbserver$dbuser$dbpass);
                      if (!
                      $connect)
                      {
                      header("Location: index.php?loc=main.php"); 
                      exit;
                      }
                      mysql_select_db($dbname,$connect);
                      $reg "INSERT INTO user (name, pass, email, geburtstag, wohnort, geschlecht) VALUES ('$regname', '$regpass', '$regmail', '$regbirth', '$regwohnort', '$reggeschlecht')";
                      $reg2 mysql_query($reg);
                      $namecheckmysql_affected_rows(name);
                      if 
                      $namecheck 0
                      {
                      header("Location: index.php?loc=main.php"); 
                      exit;
                      }
                      mysql_close($connect); 

                      Kommentar


                      • #12
                        fast.

                        if $namecheck > 0

                        darf es NICHT heissen. sondern

                        if $namecheck = 0

                        denn wenn nichts geändert worden ist, soll ja der exit erfolgen.

                        hast du auch die tabelle so verändert, dass dort ein unique ist?
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          hab noch einen fehler gesehen.

                          es darf NICHT

                          mysql_affected_rows(name)

                          heissen, sondern nur

                          mysql_affected_rows()
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            Tabelle habe ich jetzt erfolgreich und ohne Probleme erstellt.

                            Bei der Ausführung des INSERTS kommt eine Fehlermeldung: "Parse error: parse error, expecting `'('' in register2.php on line 16"

                            Der Code der register2.php ist folgender (ich entdecke keinen Fehler in Zeile 16 oder in deren Nähe):

                            PHP-Code:
                            <?php
                            $dbserver 
                            "**";
                            $dbname "**";
                            $dbuser "**";
                            $dbpass "**";
                            $connect = @ mysql_connect($dbserver$dbuser$dbpass);
                            if (!
                            $connect)
                            {
                            header("Location: index.php?loc=main.php"); 
                            exit;
                            }
                            mysql_select_db($dbname,$connect);
                            $reg "INSERT INTO user (rang, vorname, nachname, username, passwort, email, homepage, icq, aim, yim, msn, geburtsdatum, geschlecht, interessen, motto, startrek, schauspieler, serie, schiff, rasse, wohnort, bundesland, land) VALUES ('0', '$vorname', '$nachname', '$username', '$passwort', '$email', '$homepage', '$icq', '$aim', '$yim', '$msn', '$geburtsdatum', '$geschlecht', '$interessen', '$motto', '$startrek', '$schauspieler', '$serie', '$schiff', '$rasse', '$wohnort', '$bundesland', '$land')";
                            $reg2 mysql_query($reg);
                            $namecheck mysql_affected_rows();
                            if 
                            $namecheck 0
                            {
                            header("Location: index.php?loc=register3.php"); 
                            exit;
                            }
                            mysql_close($connect);
                            ?>

                            Kommentar


                            • #15
                              deine zeile 16:

                              if $namecheck = 0

                              du hast die klammern vergessen. und das = muss doppelt beim vergleich

                              RICHTIG:
                              if ($namecheck == 0)
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar

                              Lädt...
                              X