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
Ankündigung
Einklappen
Keine Ankündigung bisher.
[Erledigt] Duplicate entry 'nickname' for key 2
Einklappen
Neue Werbung 2019
Einklappen
X
-
[Erledigt] Duplicate entry 'nickname' for key 2
Stichworte: -
-
Alternative:
PHP-Code:
$sql ="INSERT IGNORE INTO tbl ...";
mysql_query($sql);
if ( mysql_affected_rows() == 0 ) {
$fehler = "Name oder Emailadresse ist schon gespeichert";
}
-
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:
-
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.Zitat von NomexusKönntest du mir vielleicht schnell erklären was du da auch grade genau gemacht hast?
siehe PHP: Variable scope - Manual
Einen Kommentar schreiben:
-
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:
-
Versuch es mal mitund dannPHP-Code:function defaultDbConnection()
{
static $con = null;
if ( is_null($con) ) {
$con= mysql_connect('localhost','root','') or die(mysql_error());
mysql_select_db('login',$con) or die(mysql_error());
}
return $con;
}
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:
-
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:
-
Damit ist $con außerhalb der Funktion nicht mehr verfügbar, was suboptimal ist.
Einen Kommentar schreiben:
-
ich habe diesen Code per include aus einer datei :
PHP-Code:function connect()
{
$con= mysql_connect('localhost','root','') or die(mysql_error());
mysql_select_db('login',$con) or die(mysql_error());
}
Einen Kommentar schreiben:
-
Unwahrscheinlich, wenn Du auchübernommen oder den Code entsprechend hast.PHP-Code:$mysql = mysql_connect('..', '..', '..') or die(mysql_error());
mysql_select_db('..', $mysql) or die(mysql_error());
Einen Kommentar schreiben:
-
Nun bekomme ich folgende Fehlermeldung:
"mysql_errno(): supplied argument is not a valid MySQL-Link resource"
Einen Kommentar schreiben:
-
Das ist eine Zeichenkette, kein Vergleich."mysql_num_rows($control_email) > 0;"
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:
-
Nee da dieser Komplette code auch in einer IF-abfrage steht:
PHP-Code:if($error_msg == "")
{
...hier der eben gepostete code
}
Einen Kommentar schreiben:
-
Ein Gast antwortetenicht? 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:
-
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:

Einen Kommentar schreiben: