mysql_query + ausgabewert

blck

blck

Routinier
Hallo,
bin dabei grade ein Loginsystem zu schreiben.
Auf jedenfall bin ich jetzt an der Stelle angelangt, an der das System überprüfen soll, ob ein Username exestiert, falls einer exestiert soll sich die Javabox öffnen mit der Fehlermeldung. Das klappt auch, allerdings sagt er mir das im Moment auch, obwohl ich noch gar nichts in betreffender Datenbanktabelle stehen habe, das käme etwas später (siehe code). Falls die mysql_query nicht erfolgreich sein sollte, so wie es im Moment ist, sollte er den user anlegen.
Ich find den Fehler nicht, aber vllt. ist mein Gedankengang auch falsch.
PHP:
#Überprüfen ob Nutzer in Datenbank exestiert
$userex=mysql_query ("SELECT user
			FROM usercontroll	
				WHERE user='$username'");

	echo "<div id=main>".mysql_error()."</div><br>";
	echo "<div id=main>".$userex."</div><br>";

if ($userex)
 {
  echo "<script type='text/javascript'>alert('Benutzername bereits vorhanden');</script>";
  die();
 }
#Überprüfen ob E-Mail in Datenbank exestiert
$emailex=mysql_query ("SELECT email
			FROM usercontroll
				WHERE email='$email'");

	echo "<div id=main>".$emailex."</div><br>";

if ($emailex)
 {
  echo "<script type='text/javascript'>alert('E-Mail bereits vorhanden');</script>";
  die();
 }

#Nutzer in Datenbank aufnehmen
if ((!$userex)&&(!$emailex))
 {
  mysql_query("INSERT INTO usercontroll
		(user,passwd,email)
			VALUES ('$username','$passwd,'$email')");
 }
$userex spuckt auch nichts aus und mysql_error(), bringt auch keine Fehlermeldung.
MfG Blck
 
Du musst die Daten auch mit mysql_fetch_assoc() aus dem result auslesen. Anders bringt das doch nix...

PHP:
#Überprüfen ob Nutzer in Datenbank exestiert
$userex=mysql_query ("SELECT user
            FROM usercontroll    
                WHERE user='".$username."'");
$username = mysql_fetch_assoc($userex);

    echo "<div id=main>".mysql_error()."</div><br>";
    echo "<div id=main>".$username['user']."</div><br>";

if (mysql_num_rows($userex)>0)
 {
  echo "<script type='text/javascript'>alert('Benutzername bereits vorhanden');</script>";
  die();
 }
#Überprüfen ob E-Mail in Datenbank exestiert
$emailex=mysql_query ("SELECT email
            FROM usercontroll
                WHERE email='".$email."'");
$email = mysql_fetch_assoc($emailex);

    echo "<div id=main>".$email['email']."</div><br>";

if (mysql_num_rows($emailex)>0)
 {
  echo "<script type='text/javascript'>alert('E-Mail bereits vorhanden');</script>";
  die();
 }

#Nutzer in Datenbank aufnehmen
if (mysql_num_rows($userex)<1 && mysql_num_rows($emailex)<1)
 {
  mysql_query("INSERT INTO usercontroll
        (user,passwd,email)
            VALUES ('".$username."', '".$passwd."', '".$email."')");
 }

Ist ungetestet, aber so müsste es gehen.
 
Ich würde irgendwie mit mysql_fetch_array() (http://de3.php.net/manual/de/function.mysql-fetch-array.php) oder mysql_fetch_object (http://de3.php.net/manual/de/function.mysql-fetch-object.php) überprüfen, ob ein element in deiner Abfrage existiert, indem du es einmal drüber laufen lässt und checkst, ob die Ausgabe dir irgendwelche Werte zurückgibt. ich glaube, so wie du das machst klappt das nicht.
Hast du mal
PHP:
print_r ($userex);
versucht? Das dürfte immer ein existierendes Abfrageergebnis sein, egal, ob die Mail existiert oder nicht.
 
PHP:
$sql = "SELECT user, email FROM usercontroll WHERE user='".$username."' OR email = '".$email."';"
$result=mysql_query ($sql);

$row = mysql_fetch_assoc(result);

if (mysql_num_rows > 0)
{
   # Username oder E-Mail vorhanden
   if ($row['user'])
   {
      # USERNAME ist vorhanden
   } elseif ($row['email'])
   {
      # EMAIL vorhanden
   }
} else {
   # Datensatz anlegen
}
 
Und ich empfehle wärmstens, sich eine Template-Engine wie Smarty anzugucken. Mithilfe einer Template-Engine wird die Programmierung (in dem Fall PHP) von der Struktur und dem Inhalt (HTML) getrennt. So wie das aussieht, wird das doch ein etwas größeres Programm, oder? Und gerade dann ist es wichtig, den Code gut lesbar und wartbar zu machen.
 
Weiß nicht, ob es gut ist, hier jetzt diese Diskussion zu starten...
Man kann in PHP durchaus PHP und HTML trennen, man muss es nur wirklich machen. Sachen wie Smarty sind dann meist eher überflüssig, denn eigentlich ist PHP ja so was wie ein umfangreiches Template-Engine. Ein Grund wäre vielleicht noch das Caching, was bei Smary z.B. schon dabei ist, sich mit PHP aber auch schnell und je nach Anwendung effektiver machen lässt.
Darüber gibt es aber in vielen PHP-Foren endlose Diskussionen.

Wie auch immer: Ich würde einem Anfänger nicht gleich Smarty empfehlen, denn dann hat er ja keine Chance richtig PHP zu lernen, wenn er sich von Anfang an auf fremden Code verlässt: Wenn er nicht weiß, wie man eine Webanwendung gescheit ohne eigene Template-Sprache aufbaut und damit das ganze schneller, einfach und effektiver macht.
 
So nochmal zum Thema:

Hallo,
also nach einigem gefrickel hat das mit dem überprüfen geklappt, fast.
Erstmal der code:
PHP:
$sql = "SELECT user, email FROM usercontroll WHERE user='".$username."' OR email = '".$email."'";
$result=mysql_query ($sql);

$row = mysql_fetch_assoc($result);
	#echo "<div id=main>Jetzt hier<br></div>";
$anzahl= mysql_num_rows($result);

if ($anzahl > 0)
{
   # Username oder E-Mail vorhanden
   if ($row['user']==$username)
   {
    echo "<script type='text/javascript'>alert('Benutzername exestiert bereits.');</script>";
    die();
   } 
    elseif ($row['email']==$email)
    {
          echo "<script type='text/javascript'>alert('E-Mail Adresse bereits vergeben.');</script>";
	  die();
    }
} 
 
 else 
 {
  mysql_query("INSERT INTO usercontroll
		(user,passwd,email)
			VALUES ('$username','$passwd','$email')");

 }

Interessanterweise funktioniert der Abfangmechanismus nur bei der E-Mail Adresse, nicht jedoch beim Username, obwohl der mitlerweile schon mehr als einmal in der Datenbank exestiert :D.
Danke für eure Hilfe, Blck
PS SQL-Injection kommt dann irgendwie noch ;)
 
So sollte es gehen:
PHP:
$error=false;
$sql_user = "SELECT user FROM usercontroll WHERE user='".$username."'";
$res_user=mysql_query ($sql_user);

$sql_mail = "SELECT email FROM usercontroll WHERE email = '".$email."'";
$res_mail=mysql_query ($sql_mail);

if (mysql_num_rows($res_user)>0) {
   echo "<script type='text/javascript'>alert('Benutzername exestiert bereits.');</script>";
   $error=true;
} 
if (mysql_num_rows($res_mail)>0) {
   echo "<script type='text/javascript'>alert('E-Mail Adresse bereits vergeben.');</script>";
   $error=true;
}
 
if($error) {
   echo "Die Benutzerdaten existieren bereits!";
} else {
  mysql_query("INSERT INTO usercontroll
		(user,passwd,email)
			VALUES ('$username','$passwd','$email')");

 }

Interessanterweise funktioniert der Abfangmechanismus nur bei der E-Mail Adresse, nicht jedoch beim Username, obwohl der mitlerweile schon mehr als einmal in der Datenbank exestiert. :D
Das liegt daran, das er nach einem Datensatz sucht, wo email und username gleich der angegebenen werte sind.
 
Hmm, nein da funktioniert es wieder nur mit der E-Mail Adresse :D
Muss ich da ne foreach schleife drumwickeln?
MfG und Danke,
Blck
 
Dann stimmen die Inhalte der Variablen $username und $email nicht.
Am Script kann es nicht mehr liegen...

Gib einfach mal via echo den Inhalt der Variablen aus.
 
Das Problem ist bei deinem Script sim4000, dass du 1 Abfrage mehr hast, und du den Vorteil nicht nutzt, zu wissen, ob die Mail oder der Username schon mal vergeben ist. Das dürfte für den Nutzer schon einen Unterschied machen,w enn der Username schon mal vergeben ist, dann nimmt er einen anderen, ist die Mail schon vergeben, erinnert er sich vll. an einen älteren Account. Im übrigen lässt du das die(); weg, was möglicherweise noch wichtig wird, je nachdm was danach kommt.
Wie auch immer blck's Script müsste klappen, man kann ja mal alternativ auch den Variablen einfach feste Wete zuweisen.
 
Das Problem ist bei deinem Script sim4000, dass du 1 Abfrage mehr hast
Geht ja nicht anders, weil man ja beides unabhängig checken möchte.

und du den Vorteil nicht nutzt, zu wissen, ob die Mail oder der Username schon mal vergeben ist
Öm. Was mache ich dann? Ich checke Username und Email unabhängig von einander, ob es die schon gibt.

Im übrigen lässt du das die()
Ist auch gut so. Mit einem die() zerlegst du Unter umständen das ganze Websitedesign. So wird zB hier im Unixboard der Footer nicht mehr angezeigt, wenn bei einem Fehlgeschlagenen Login eine Fehlermeldung ausgegeben wird.
Sowas macht man mit einer selbst geschriebenen Funktion und entsprechenden return Werten.

//edit
Amöbe hat nicht unrecht, deswegen nehme ich die Funktion lieber mal wieder raus...
 
Zuletzt bearbeitet:
Öm. Was mache ich dann? Ich checke Username und Email unabhängig von einander, ob es die schon gibt.
Schon aber du verarbeitest es nicht getrennt, womit das Ganze wenig Sinn ergibt und das verändert das Ergebnis ohne Nutzen.

Ist auch gut so. Mit einem die() zerlegst du Unter umständen das ganze Websitedesign. So wird zB hier im Unixboard der Footer nicht mehr angezeigt, wenn bei einem Fehlgeschlagenen Login eine Fehlermeldung ausgegeben wird.
Sowas macht man mit einer selbst geschriebenen Funktion und entsprechenden return Werten.
Ich mag das die() auch nicht sonderlich, aber es wird schon seinen Zweck erfüllen. Ich gehe mal davon aus, dass nach dem Script nach sowas kommt, wie vielen dank usw., was dann weg bleibt.

Also irgendwie würde ich das Scriptchen mal ein bisschen in seinem Zusammenhang lassen, du veränderst ja seine Funktion total und schaffst damit möglicherweise weitere Fehler. Wäre doch gut, wenn wenigstens das Prinizp mal laufen würde, dann kann man ja immer noch Schönheitsfehler, wie die() und SQL-Injection beheben.
 
womit das Ganze wenig Sinn ergibt und das verändert das Ergebnis ohne Nutzen.
Wiso? Ich prüfe getrennt, ob es die Werte in der DB schon gibt. Und wenn eines der Werte in der Datenbank ist, wird halt nicht eingetragen.

Ich mag das die() auch nicht sonderlich, aber es wird schon seinen Zweck erfüllen. Ich gehe mal davon aus, dass nach dem Script nach sowas kommt, wie vielen dank usw., was dann weg bleibt.
Na gut, kann man ja erst mal lassen...

Also irgendwie würde ich das Scriptchen mal ein bisschen in seinem Zusammenhang lassen, du veränderst ja seine Funktion total und schaffst damit möglicherweise weitere Fehler. Wäre doch gut, wenn wenigstens das Prinizp mal laufen würde
Recht haste. Da hab ich vielleicht ein bissl übertrieben...

Aber ich verstehe das Problem nicht, und auch nicht, wo du bei deiner ersten aussage hinaus willst...
Kann auch an meinem Schlafmangel liegen, aber ich halte das Script für richtig.

//edit
Arg! Ich sag ja, Schlafmangel. ^^
 
Ups.. hab 2 Zeilen übersehen.. passt schon ;) ich glaub ich geh mal Schlafen =))
 

Ähnliche Themen

CentOS 5.8 –SQL Abfrage– HTML wird generiert und daraus müssen mehrere Mails versendet werden

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

Windows clients können nicht mehr auf lange laufendes System zugreifen

JBidWatcher: Problem bei loading Auctions in Verbindung mit mySQL

dovecot und postfix Konfiguration Problem

Zurück
Oben