mysql_query + ausgabewert

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von blck, 13.07.2008.

  1. blck

    blck Routinier

    Dabei seit:
    15.01.2007
    Beiträge:
    268
    Zustimmungen:
    0
    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
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 sim4000, 13.07.2008
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    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)<&& 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.
     
  4. amöbe

    amöbe Tripel-As

    Dabei seit:
    21.01.2007
    Beiträge:
    188
    Zustimmungen:
    0
    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.
     
  5. daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
  6. #5 uzumakinaruto, 13.07.2008
    uzumakinaruto

    uzumakinaruto Tripel-As

    Dabei seit:
    23.05.2008
    Beiträge:
    246
    Zustimmungen:
    0
    Ort:
    Gifhorn
    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
    }

     
  7. #6 sim4000, 13.07.2008
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    Was mir grad noch einfällt:

    Ich empfehle wärmstens, die Querys noch gegen SQL Injection zu schützen.
    http://de3.php.net/mysql_real_escape_string

    Beispiel:
    PHP:
    select from table where field='".mysql_real_escape_string($var)."'
     
  8. #7 donsimon1991, 14.07.2008
    donsimon1991

    donsimon1991 Eroberer

    Dabei seit:
    23.12.2007
    Beiträge:
    70
    Zustimmungen:
    0
    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.
     
  9. amöbe

    amöbe Tripel-As

    Dabei seit:
    21.01.2007
    Beiträge:
    188
    Zustimmungen:
    0
    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.
     
  10. blck

    blck Routinier

    Dabei seit:
    15.01.2007
    Beiträge:
    268
    Zustimmungen:
    0
    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>";
    $anzahlmysql_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 ;)
     
  11. #10 sim4000, 14.07.2008
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    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')");

     }  
    Das liegt daran, das er nach einem Datensatz sucht, wo email und username gleich der angegebenen werte sind.
     
  12. blck

    blck Routinier

    Dabei seit:
    15.01.2007
    Beiträge:
    268
    Zustimmungen:
    0
    Hmm, nein da funktioniert es wieder nur mit der E-Mail Adresse :D
    Muss ich da ne foreach schleife drumwickeln?
    MfG und Danke,
    Blck
     
  13. #12 sim4000, 14.07.2008
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    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.
     
  14. amöbe

    amöbe Tripel-As

    Dabei seit:
    21.01.2007
    Beiträge:
    188
    Zustimmungen:
    0
    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.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 sim4000, 14.07.2008
    Zuletzt bearbeitet: 14.07.2008
    sim4000

    sim4000 Lebende Foren Legende

    Dabei seit:
    12.04.2006
    Beiträge:
    1.933
    Zustimmungen:
    0
    Ort:
    In meinem Zimmer
    Geht ja nicht anders, weil man ja beides unabhängig checken möchte.

    Öm. Was mache ich dann? Ich checke Username und Email unabhängig von einander, ob es die schon gibt.

    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...
     
  17. amöbe

    amöbe Tripel-As

    Dabei seit:
    21.01.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Schon aber du verarbeitest es nicht getrennt, womit das Ganze wenig Sinn ergibt und das verändert das Ergebnis ohne Nutzen.

    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.
     
Thema:

mysql_query + ausgabewert

Die Seite wird geladen...

mysql_query + ausgabewert - Ähnliche Themen

  1. mysql_query

    mysql_query: Hallo, ich bin grad dabei, rein aus Übung, ein Telefonbuch mit PHP und MYsql zu schreiben. Genaugenommen geht es aber nur Datenbanken im...
  2. PHP und MySQL CREATE TABLE in mysql_query

    PHP und MySQL CREATE TABLE in mysql_query: Neue Frage: Ich habe einen String, der Stück für Stück auseinander genommen wird und jeder Buchstabe wird nun angeschaut! Kommt nun ein...