datenbank + script fehler
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfragen
adresse
angelegt message
bedingung
befehl
benutzer
code
datenbank
datum
email
ergebnis
jemand
message
not
null
spieler
string
verbindung
vorhanden code
zeile
-
kann mir jemand erklären anhand meiner datenbank und script warum diese meldungen ausgegeben werden :
Der Benutzer wurde nicht angelegt
Dein Nickname ist schon vorhanden!
Dein Nickname ist schon vorhanden!
obwohl die datenbank leer ist?
<- die dbCREATE TABLE Spieler ( Spieler_ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Statistik_ID INTEGER UNSIGNED NOT NULL, Nickname CHAR() NULL, Passwort CHAR NULL, EMail CHAR NULL, umod BOOL NULL, löschen BOOL NULL, sitting BOOL NULL, Skin INTEGER UNSIGNED NULL, Volk CHAR NULL, Volksbild CHAR NULL, Volksbeschreibung CHAR NULL, Plani_Sortierung CHAR NULL, Allianz INTEGER UNSIGNED NULL, Foerderation INTEGER UNSIGNED NULL, Premium BOOL NULL, Level INT NULL, Session VARCHAR(20) NULL, PRIMARY KEY(Spieler_ID), INDEX Spieler_FKIndex1(Statistik_ID) );
script:
<?php error_reporting(E_ALL); $message =""; // ausgabe nachricht (zb fehlermeldungen noch einbauen) $dbname =""; $dbuser = ""; $dbhost = "mysql.lima-city.de"; $dbpass = ""; //variablen if(isset($_POST['submit'])) { $nickname = $_POST['nickname']; $passwort = $_POST['passwort1']; $passwort2 = $_POST['passwort2']; $email = $_POST['email']; $email2 = $_POST['email2']; // Passwort vergleich und Überprüfung leereingabe if ($_POST['passwort1'] == "" || $_POST['passwort2'] == "") { echo "<p>Du hast in min. einem Feld kein Passwort eingetragen</p>";}; //<--- hier schon mit echo getestet 0 reaktion if ($_POST['passwort1'] == $_POST['passwort2']) {$passwort= $_POST['passwort2'];} else {echo "<p>Die beiden Passwörter sind nicht identisch!</p>";}; // E-Mail vergleich und Überprüfung leereingabe if ($_POST['email'] == "" || $_POST['email2'] == "") echo "<p>Du hast in min. einem Feld keine E-Mail-Adresse eingetragen</p>"; if ($_POST["email"] == $_POST['email2']) {$email = $_POST['email2'];} else {$message.= "<p>Die beiden E-Mail-Adressen sind nicht identisch!</p>";}; //Nickname auf Leereingabe überprüft if ($nickname == "" ) {$message.= "<P>Du hast keinen Nickname eingetragen!</p>"; }; // Pw verschlüsseln $hash = crypt($passwort); // doppel registrierung verhindern + variablen noch ändern !!!!!!!!!! if(empty($_POST['checkID'])) { $_POST["checkID"] = md5(microtime() ); } else { if(preg_match('/^[a-f0-9]{32}$/',$_POST['checkID'])); } //Verbindung mit der Datenbank $db = mysql_connect($dbhost,$dbuser,$dbpass) or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); mysql_select_db($dbname) or die ("Datenbank konnte nicht ausgewählt werden"); // Nickname und Emaildresse abfragen (ob vorhanden) //Nickname $sql = "SELECT * FROM Spieler WHERE Nickname = $nickname"; $ergebnis = mysql_query($sql); if ($ergebnis == $nickname); else $message="Dein Nickname ist schon vorhanden!"; echo"<p>$ergebnis</p>"; if ($sql != "") $message.="<p>Dein Nickname ist schon vorhanden!</p>"; // Emailadresse $sql2 = mysql_query("SELECT Spieler.Email FROM spieler WHERE email ='".$email."' "); if ($sql2 != "") $message.="<p>Dein E-Mail-Adresse ist schon vorhanden!</p>"; //agb kontrollkästchen //if ($_POST[agb] == "") // $message.="<p>Du musst die AGB akzeptieren!"; // db eintragungen if ($message ==""){ mysql_query("INSERT INTO Spieler (Nickname, Passwort, Email) VALUES (' ".$nickname."' , '".$hash."','". $email."' )"); echo"<p> Der Benutzer wurde angelegt!</p>";} else echo"<p>Der Benutzer wurde nicht angelegt<p> $message"; } ?>
kann mir das jemand bitte erklären? wäre echt lieb
mfg grave
Beitrag zuletzt geändert: 5.10.2010 21:27:19 von gravedesign -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Nehm mal schnell deine Datenbank daten aus dem beitrag ;)
Sonst vergisst du es und später räumt jeder deine Datenbank leer =D
Beitrag zuletzt geändert: 5.10.2010 21:15:24 von demonic-legends -
// Nickname und Emaildresse abfragen (ob vorhanden) //Nickname $sql = "SELECT * FROM Spieler WHERE Nickname = $nickname"; $ergebnis = mysql_query($sql); if ($ergebnis == $nickname); else $message="Dein Nickname ist schon vorhanden!"; echo"<p>$ergebnis</p>"; if ($sql != "") $message.="<p>Dein Nickname ist schon vorhanden!</p>";
Sehr merkwürdige Zeilen sind da drin zu finden. Zum einen:
if ($ergebnis == $nickname); else $message="Dein Nickname ist schon vorhanden";
Wenn die Bedingung zutrifft passiert... öhm.. ja was? Außerdem... wie willst du die Variable $nickname mit einer db-Anfrage vergleichen? Wo ist denn ein fetch_array oder fetch_assoc? Sprich es fehlt ein $row = mysql_fetch_array($ergebnis); und daher kann die if-Bedingung nicht zutreffen, ergo immer else-Fall. Du müsstest vergleichen: if($nickname == $row["Nickname"])
Dann geht es weiter mit:
if ($sql != "")
Diese Bedingung kann nur immer zutreffen, da du ja einige Zeilen höher schreibst: $sql = "SELECT * FROM Spieler WHERE Nickname = $nickname"; ergo $sql ist immer ungleich "", da ja $sql mit deinem Query-String definiert ist.
Deshalb kommen deine beiden Meldungen mit "Dein Nickname ist schon vorhanden".
if ($message ==""){ mysql_query("INSERT INTO Spieler (Nickname, Passwort, Email) VALUES (' ".$nickname."' , '".$hash."','". $email."' )"); echo"<p> Der Benutzer wurde angelegt!</p>";} else echo"<p>Der Benutzer wurde nicht angelegt<p> $message";
Die Fehlermeldung, der User sei nicht eingetragen worden stammt von diesem Code, da ja durch die vorherigen Fehler die Variable $message nicht leer ist.
Zu guterletzt steht in deinem create_table folgendes: Nickname CHAR() NULL,
Die () hast du bei allen nachfolgenden CHAR's weg gelassen. Ich weiß allerding nicht, ob dies auch eine Fehlerursache ist, zumindest aber ist es merkwürdig.
-
Außerdem hast du in der Zeile
$sql = "SELECT * FROM Spieler WHERE Nickname = $nickname";
den $nickname Teil nicht als Variable, sondern als String.
Solche Einbindungen würde ich an deiner Stelle sowieso nicht nach deiner Art - variablen in Befehl mit aufnehmen - machen, da du diese Daten vom User bekommst.
bei PDO heißt der befehl, um dies zu lösen: bindValue(1, $nickname);
Wie er bei mysql heißt, weiß ich nicht. -
ich hab es jetzt hinbekommen^^ funktioniert prima
eine frage hab ich noch und zwar die fehler möchte ich auf der regisrierungsseite erscheinen lassen wenns welche gibt bzw die erfolgsmeldungen wie setzt ich das am einfachsten um? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage