Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Duplicate entry 'nickname' for key 2

Einklappen

Neue Werbung 2019

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

  • Nomexus
    hat ein Thema erstellt [Erledigt] Duplicate entry 'nickname' for key 2.

    [Erledigt] Duplicate entry 'nickname' for key 2

    Moinsen,

    ich habe folgendes Problem:

    Ich habe ein Registrationsscript geschrieben, aber finde keine Lösung wie ich diese "Duplicate entry 'Nomexus' for key 2" Fehlermeldung ausblenden kann.

    Eine Kontrolle mit Fehlerausgabe habe ich schon für vorhandene Emails und Nicknames aber wie kann ich die obrige Fehlermeldung abschalten? Das Script bricht ja dann immer sofort ab und das will ich nicht.

    mfg Nomexus

  • Wolla
    antwortet
    Alternative:

    PHP-Code:

    $sql 
    ="INSERT IGNORE INTO tbl ...";
    mysql_query($sql);
    if ( 
    mysql_affected_rows() == ) {
      
    $fehler "Name oder Emailadresse ist schon gespeichert";

    Einen Kommentar schreiben:


  • Nomexus
    antwortet
    So Danke an euch! Funktioniert nun alles genau so wie ich es haben will! Habe meine persönlichen wünsche dann daran auch noch verwirklichen können!

    mfg Nomexus

    Einen Kommentar schreiben:


  • David
    antwortet
    Zitat von Nomexus
    Könntest du mir vielleicht schnell erklären was du da auch grade genau gemacht hast?
    Ein Mini-Singleton für die Datenbankverbindung erstellt. Beim ersten Aufruf von defaultDbConnection() ist $con NULL, daher wird der Code zum Verbinden mit der Datenbank ausgeführt. static $con bewirkt, dass beim erneuten Aufrufen der Funktion der alte Wert erhalten bleibt. Die Verbindung wird also nur einmal aufgebaut und dann immer wieder aus der Funktion zurückgegeben.
    siehe PHP: Variable scope - Manual

    Einen Kommentar schreiben:


  • Nomexus
    antwortet
    Fehlermeldung wird nun nichtmehr angezeigt, dafür kommt das Forumular danach wieder nicht.

    Könntest du mir vielleicht schnell erklären was du da auch grade genau gemacht hast? Wäre echt nett

    Einen Kommentar schreiben:


  • David
    antwortet
    Versuch es mal mit
    PHP-Code:
    function defaultDbConnection()
    {
      static 
    $con null;
      if ( 
    is_null($con) ) {
        
    $conmysql_connect('localhost','root','') or die(mysql_error());
        
    mysql_select_db('login',$con) or die(mysql_error());
      }
      return 
    $con;

    und dann
    PHP-Code:
    define('MYSQL_DUPLICATE_KEY'1062);
    $mysql defaultDbConnection();
    $eintragen "
      INSERT INTO
        users
        (UserName, UserPass, UserMail, RegDate)
      VALUES (
        '"
    mysql_real_escape_string($_REQUEST["form_name"], $mysql) ."',
        '"
    mysql_real_escape_string($_REQUEST["form_password"], $mysql) ."',
        '"
    mysql_real_escape_string($_REQUEST["form_email"], $mysql) ."',
        Now()
      )
    "
    ;
    $result mysql_query$eintragen );
    if ( 
    false===$result ) {
      if ( 
    mysql_errno($mysql)==MYSQL_DUPLICATE_KEY ) {
        echo 
    '<p>Benutzername oder EMail-Adresse wird bereits verwendet</p>';
      }
      else {
        echo 
    '<p>Fehler beim Eintragen des neuen Datensatzes</p>';
      }
    }
    else {
      echo 
    '<p>Datensatz erfolgreich eingetragen</p>';

    Einen Kommentar schreiben:


  • Nomexus
    antwortet
    hab grad versucht mit return() $con global zu machen. geht das nicht über include dann in ne andere datei mit rein?

    oder muss der connect code so direkt mit in dem script stehen?

    Einen Kommentar schreiben:


  • David
    antwortet
    Damit ist $con außerhalb der Funktion nicht mehr verfügbar, was suboptimal ist.

    Einen Kommentar schreiben:


  • Nomexus
    antwortet
    ich habe diesen Code per include aus einer datei :

    PHP-Code:
    function connect()
    {
        
    $conmysql_connect('localhost','root','') or die(mysql_error());
         
    mysql_select_db('login',$con) or die(mysql_error());

    Einen Kommentar schreiben:


  • David
    antwortet
    Unwahrscheinlich, wenn Du auch
    PHP-Code:
    $mysql mysql_connect('..''..''..') or die(mysql_error());
    mysql_select_db('..'$mysql) or die(mysql_error()); 
    übernommen oder den Code entsprechend hast.

    Einen Kommentar schreiben:


  • Nomexus
    antwortet
    Nun bekomme ich folgende Fehlermeldung:

    "mysql_errno(): supplied argument is not a valid MySQL-Link resource"

    Einen Kommentar schreiben:


  • David
    antwortet
    "mysql_num_rows($control_email) > 0;"
    Das ist eine Zeichenkette, kein Vergleich.

    Bei einem duplicate key Fehler liefert [man]mysql_error[/man]() einen bestimmten Wert zurück. Diesen kannst Du im Fehlerfall abtesten.
    PHP-Code:
    <?php
    define
    ('MYSQL_DUPLICATE_KEY'1062);

    $mysql mysql_connect('..''..''..') or die(mysql_error());
    mysql_select_db('..'$mysql) or die(mysql_error());


    $eintragen "
      INSERT INTO
        users
        (UserName, UserPass, UserMail, RegDate)
      VALUES (
        '"
    mysql_real_escape_string($_REQUEST["form_name"], $mysql) ."',
        '"
    mysql_real_escape_string($_REQUEST["form_password"], $mysql) ."',
        '"
    mysql_real_escape_string($_REQUEST["form_email"], $mysql) ."',
        Now()
      )
    "
    ;
    $result mysql_query($eintragen$mysql);
    if ( 
    false===$result ) {
      if ( 
    mysql_errno($mysql)==MYSQL_DUPLICATE_KEY ) {
        echo 
    '<p>Benutzername oder EMail-Adresse wird bereits verwendet</p>';
      }
      else {
        echo 
    '<p>Fehler beim Eintragen des neuen Datensatzes</p>';
      }
    }
    else {
      echo 
    '<p>Datensatz erfolgreich eingetragen</p>';
    }

    Einen Kommentar schreiben:


  • Nomexus
    antwortet
    Nee da dieser Komplette code auch in einer IF-abfrage steht:

    PHP-Code:
    if($error_msg ==  "")
                {
    ...
    hier der eben gepostete code
                

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    nicht? oops wie denn?

    edit: ja ähm du schreibst auf jedenfall in die db, das is der weg den ich gegangen wäre, aber um dein in die db schreiben gehört ein else { }

    Einen Kommentar schreiben:


  • Nomexus
    antwortet
    Das habe ich dort stehen:

    PHP-Code:
    $control_name   =   'SELECT UserName FROM users WHERE UserName="$_REQUEST["form_name"]"';
                    
                    if(
    "mysql_num_rows($control_name) > 0;")
                    {
                        echo
    "Name schon Vorhanden!<br>";
                    }
                    
                    
    $control_email   =   'SELECT UserMail FROM users WHERE UserMail="$_REQUEST["form_email"]"';
                    
                    if(
    "mysql_num_rows($control_email) > 0;")
                    {
                        echo
    "Email schon Vergeben!<br>";
                    }
                    
                    
    // In die Datenbank schreiben wenn alles geklappt hat
                    
                    
    $eintragen  =   "INSERT INTO users (UserName, UserPass, UserMail, RegDate) VALUES ( ";
                    
    $eintragen .=   " '" $_REQUEST["form_name"] . "', ";
                    
    $eintragen .=   " '" $_REQUEST["form_password"] . "', ";
                    
    $eintragen .=   " '" $_REQUEST["form_email"] . "', ";
                    
    $eintragen .=   " '" $datum "' )";
                    
                    
    $result =   mysql_query$eintragen ); 

    Einen Kommentar schreiben:

Lädt...
X