Starthilfe für PHP Login

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

  • Starthilfe für PHP Login

    Ich habe mich heute zum ersten Mal mit PHP und mySQL beschäftigt. Nachdem ich längere Zeit mit verschiedenen Versionen gekämpft hatte und generell von all den manuellen Einstellungen überschwemmt wurde, bin ich auf xampp gestossen, welches nun wunderbar läuft. Als Editor verwende ich PHP Coder. PHP ist in der Version 4.3.3 und MySQL in der Version 4.0.14 installiert. Nun zu meiner Frage:
    Ich habe ein simples englisches Logintutorial verfolgt, und dabei eine kleine html Seite mit einem Login Formular erstellt, welches die Daten per POST an ein Validierungs-PHPSkript sendet. Der Code des Skriptes sieht folgendermassen aus (genau wie im Tutorial):
    Code:
    <html>
    <head>
    <title>Login Validation</title>
    </head>
    <body>
    <?php
    	session_start();
    
    	$db_host = 'localhost';
    	$db_user = 'root';
    	$db_pass = '';
    	$db_name = 'wizardry';
    	$db_table = 'wizards';
    
    	$user_name = $_POST['user_name'];
    	$password = $_POST['password'];
    
    	//connect to the DB and select it
    	$connection = mysql_connect($db_host, $db_user, $db_pass)
                 or die(mysql_error());
    	mysql_select_db($db_name);
    
    	//set up the query
    q	$query = "SELECT * FROM $db_table WHERE user_name='$user_name'
            AND password='$password'";
    
    	//run the query and get the number of affected rows
    *	$result = mysql_query($query, $connection) or die('error making query');
    	$affected_rows = mysql_num_rows($result);
    
    	//if there is exactly one row, validate the user, else, invalidate him :)
    	if($affected_rows == 1)
    	{
    		$_SESSION['user_name'] = $user_name;
    		print 'validated';
    	}
    	else
    	{
    		print 'invalid login';
    	}
    
    ?>
    </body>
    </html>
    Das Problem ist nun, dass, unabhängig von den eingegebenen Informationen, immer "error making query" (siehe * im Code) ausgegeben wird. Kann mir jemand sagen wieso? Und könnte mir auch noch jemand sagen, wie man in PHP Coder (oder in einem anderen Editor) ein Skript auf Korrektheit prüfen kann? Run scheint irgendwie nicht viel zu bringen...
    Zuletzt geändert von zagibu; 29.07.2003, 09:57.

  • #2
    was sagt mysql_error() ?
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Ehrlich gesagt weiss ich nicht wovon du sprichst. Die Datenbank verwalte ich mit phpAdmin...
      Ich habe den Fehler mehr oder weniger gefunden. Das Problem ist die erste Variable in der query (siehe q im Code) namens '$db_table'. An dieser Stelle ist anscheinend keine Variable erlaubt, oder sie muss irgendwie anders angegeben werden. Ich habe sie mal vorläufig direkt durch "wizards" ersetzt, und jetzt kommen zumindest keine "error making query" Meldungen mehr.
      Dafür gibt er mir jetzt jedesmal einen "invalid login" an, auch wenn ich in der Datenbank gespeicherte Namen und Passwörter verwende.

      Kommentar


      • #4
        also bei mir sieht das so aus, war auch mein erster versuch, aber funktioniert

        PHP-Code:
        /* Daten aus dem Formular */
        $benutzer $_POST['benutzer'];
        $pass $_POST['pass'];

        /*    Tabellenname */
                
        $tabelle "Benutzer";

        /* Erstellt Connect zu Datenbank her */
                
        $db mysql_connect($db_server$db_user$db_passwort);
                
        mysql_select_db ($db_name$db);
                
        $querry "SELECT user, password, FROM $tabelle WHERE user='$benutzer'";
                
        $result mysql_query ($querry$db);
                
        $affectedrows mysql_affected_rows ($db);
                if (
        $affectedrows == '1')
                {
                    while (
        $row mysql_fetch_row($result))
                    {
                        
        $user $row[0];
                        
        $password =$row[1];
                        if (
        $benutzer == $user)
                        {
                             if(
        $password == $pass)
                             {
                                       echo 
        'Login erfolgreich';
                             }
                             else
                             {
                                       echo 
        'Falsches Passwort';
                             }
                        }
                        else
                        {
                             echo 
        'Falscher Benutzername';
                        }
                    }
                }
                else
                {
                          echo 
        'Benutzername nicht in der Datenbank';
                } 
        und dann halt mit den logischen if else anweisungen weiter verschachteln.


        noch n tip am rande, verschlüssel die passwörter in der datenbank wenn nicht nur du alleine zugriff auf die daten hast.

        Kommentar


        • #5
          Hmm. Sieht mir ein bisschen umständlich aus. Und eigentlich machst du ja dasselbe wie ich, du hast nämlich auch einen mysql_affected_rows drin, welcher bei mir aber nie 1 zurückgibt. Vielleicht liegt es ja doch an der Datenbank...
          Naja, jedenfalls habe ich den folgenden Code komplett verstanden und bin mir ziemlich sicher, dass er auch stimmt. Nur weiss ich nicht, was ich jetzt mit dem $result machen soll:
          Code:
          <html>
          <head>
          <title>Login Validation</title>
          </head>
          <body>
          <?php
          	session_start();
           
          	$db_host = 'localhost';
          	$db_user = 'root';
          	$db_pass = '';
          	$db_name = 'wizardry';
          	$db_table = 'wizards';
          
          	$user_name = $_POST['user_name'];
          	$password = $_POST['password'];
          
          	//connect to the DB and select it
          	$connection = mysql_connect($db_host, $db_user, $db_pass)
                       or die(mysql_error());
          	mysql_select_db($db_name, $connection);
          
          	//set up the query
          	$query = "SELECT * FROM $db_table WHERE user_name='$user_name'
                  AND password='$password'";
          
          	//run the query
          	$result = mysql_query($query, $connection) or die('error making query');
          
          	//now what to do next?
          ?>
          </body>
          </html>

          Kommentar


          • #6
            session_start()

            Mir wurde vor kurzem beigebracht die
            Session_start();
            gehört immer ganz an den Anfang vom Script

            erfolgreichen tag noch

            Session

            Kommentar


            • #7
              Ist doch ganz am Anfang. Oder meinst du noch VOR dem html code?
              Nun, ich bin mir jetzt fast sicher, dass mit der Datenbank etwas nicht stimmt. Ich werde mich also dort mal etwas weiterbilden und diesen Thread vorerst auf Eis legen. Danke für die Hilfe bisher.

              Kommentar


              • #8
                Ich habe jetzt meine Datenbank intensiv überprüft, und sie funktioniert tadellos. Also muss es fast an den $_POST Variablen liegen...
                Zuletzt geändert von zagibu; 29.07.2003, 14:09.

                Kommentar


                • #9
                  JAAA! Ich habe es endlich hingekriegt!
                  Der Fehler war im Login Formular. Ich hatte statt method="post" message="post" geschrieben. Nun funktioniert es wunderbar. Vielen Dank für eure Geduld mit einem Newbie wie mir.

                  P.S. Wenn jemand den gesamten Code vom funktionierenden Login haben will, soll er sich melden, auf dass ihm mein Ärger erspart bleibt.

                  Kommentar

                  Lädt...
                  X