Malte: Kleinen Fehler im Loginscript

Hi,

ich habe irgendwoe in der achten Zeile, dass ist die Zeile mit dem Username einen kleinen Fehler.
Wäre vielleicht nett, wenn irh mir ein Tipp geben könnte woran es leigt. Nicht bitte die Lösung nur ein Tipp. Danke

Parse error: parse error, unexpected ';' in D:\Xampp\xampp\htdocs\Jugend\forum\function\forum\checkuser.php on line 8

  
<?php  
session_start ();  
error_reporting(E_ALL);  
include ("../verbindung.php");  
  
 $sql = sprintf("SELECT id, username, password FROM user WHERE  
           mysql_real_escape_string(".$_REQUEST['username']."),  
           mysql_real_escape_string(".$_REQUEST['password']."))";  
$result = mysql_query ($sql);  
  
if (mysql_num_rows ($result) > 0)  
{  
  $data = mysql_fetch_array ($result);  
  
  $_SESSION["user_id"] = $data["id"];  
  $_SESSION["user_username"] = $data["username"];  
  $_SESSION["user_password"] = $data["password"];  
  
  header ("Location: ../../forum.php");  
}  
else  
{  
  header ("Location: forum.php?fehler=1");  
}  
?>  

  1. Hallo,

    $sql = sprintf("SELECT id, username, password FROM user WHERE
               mysql_real_escape_string(".$_REQUEST['username']."),
               mysql_real_escape_string(".$_REQUEST['password']."))";

    Sollte wohl lauten:
    $sql = sprintf
           (
             "SELECT id, username, password FROM user WHERE ".
             mysql_real_escape_string($_REQUEST['username']).
             ",".
             mysql_real_escape_string($_REQUEST['password'])
           );

    Bei dir waren die mysql_real_escape_string()-Aufrufe direkt
    in den String eingebettet.

    Mario

    1. Bekomme jetzt folgende MEldung:

      Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\Xampp\xampp\htdocs\Jugend\forum\function\forum\checkuser.php on line 16

      1. Hallo Malte,

        Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\Xampp\xampp\htdocs\Jugend\forum\function\forum\checkuser.php on line 16

        *seufz* was sagt mysql_error() an dieser Stelle und wie sieht der Query aus?

        Grüße aus Nürnberg
        Tobias

        1. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '== Malte AND password == kroatien' at line 1

          und mein Code:

            
          <?php  
          session_start ();  
          error_reporting(E_ALL);  
          include ("../verbindung.php");  
            
          $username = addslashes(htmlspecialchars($_POST['username']));  
          $password = addslashes(htmlspecialchars($_POST['password']));  
            
          $sql ="SELECT id, username, password FROM user WHERE username == ".$username." AND password == ".$password."";  
            
          $result = mysql_query ($sql) or die(mysql_error()); ;  
            
          if (mysql_num_rows ($result) > 0)  
          {  
            $data = mysql_fetch_array ($result);  
            
            $_SESSION["user_id"] = $data["id"];  
            $_SESSION["user_username"] = $data["username"];  
            $_SESSION["user_password"] = $data["password"];  
            
            echo "<meta http-equiv=\"refresh\" content=\"0; ../../forum.php\">";  
            
          }  
          else  
          {  
          echo "<meta http-equiv=\"refresh\" content=\"15; ../../forum.php?fehler=1\">";  
          }  
          ?>  
          
          
          1. Hallo Malte,

            $username = addslashes(htmlspecialchars($_POST['username']));
            $password = addslashes(htmlspecialchars($_POST['password']));

            Warum verwendest du auf einmal addslashes() statt mysql_real_escape_string()? Warum verwendest du hier htmlspecialchars()?

            $sql ="SELECT id, username, password FROM user WHERE username == ".$username." AND password == ".$password."";

            Schau dir bitte nochmal an, wie Vergleichsoperatoren bei MySQL aussehen, außerdem fehlen die Anführungszeichen um die Werte.

            $result = mysql_query ($sql) or die(mysql_error()); ;

            warum stehen hier zwei ; am Ende der Zeile?

            Grüße aus Nürnberg
            Tobias

            1. Bekomme weiterhin folgende Fehlermeldung:

              You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '== Malte AND password == kroatien' at line 1

              Mein Code:

                
              <?php  
              session_start ();  
              error_reporting(E_ALL);  
              include ("../verbindung.php");  
                
              $username = mysql_real_escape_string($_POST['username']);  
              $password = mysql_real_escape_string($_POST['password']);  
                
              $sql ="SELECT id, username, password FROM user WHERE username == ".$username." AND password == ".$password."";  
                
              $result = mysql_query ($sql) or die(mysql_error());  
                
              if (mysql_num_rows ($result) > 0)  
              {  
                $data = mysql_fetch_array ($result);  
                
                $_SESSION["user_id"] = $data["id"];  
                $_SESSION["user_username"] = $data["username"];  
                $_SESSION["user_password"] = $data["password"];  
                
                echo "<meta http-equiv=\"refresh\" content=\"0; ../../forum.php\">";  
                
              }  
              else  
              {  
              echo "<meta http-equiv=\"refresh\" content=\"15; ../../forum.php?fehler=1\">";  
              }  
              ?>  
              
              
              1. Hallo Malte,

                $sql ="SELECT id, username, password FROM user WHERE username == ".$username." AND password == ".$password."";

                Lies und befolge meine Hinweise bzgl. dieser Zeile doch bitte.

                Grüße aus Nürnberg
                Tobias

                1. Hi,

                  sorry habe den Teil nicht gesehen. Habe es jetzt gemacht, Bekomme keine Fehlermeldung mehr, aber ich kann mich immer noch nicht einloggen:

                    
                  <?php  
                  session_start ();  
                  error_reporting(E_ALL);  
                  include ("../verbindung.php");  
                    
                  $username = mysql_real_escape_string($_POST['username']);  
                  $password = mysql_real_escape_string($_POST['password']);  
                    
                  $sql ="SELECT id, username, password FROM user WHERE 'username == ".$username."' AND 'password == ".$password."'";  
                    
                  $result = mysql_query ($sql) or die(mysql_error());  
                    
                  if (mysql_num_rows ($result) > 0)  
                  {  
                    $data = mysql_fetch_array ($result);  
                    
                    $_SESSION["user_id"] = $data["id"];  
                    $_SESSION["user_username"] = $data["username"];  
                    $_SESSION["user_password"] = $data["password"];  
                    
                    echo "<meta http-equiv=\"refresh\" content=\"0; ../../forum.php\">";  
                    
                  }  
                  else  
                  {  
                  echo "<meta http-equiv=\"refresh\" content=\"15; ../../forum.php?fehler=1\">";  
                  }  
                  ?>  
                  
                  
                  1. Hallo Malte,

                    $sql ="SELECT id, username, password FROM user WHERE 'username == ".$username."' AND 'password == ".$password."'";

                    *ganztiefseufz* Du hast jetzt als Bedingung sowas drinstehen: "WHERE 'string' AND 'string'" - was soll MySQL deiner Meinung nach damit machen? Du willst wohl eher vergleichen ob in der Spalte username der Inhalt aus $username steht - also wäre "... WHERE username = '".$username."' AND ..." wohl richtiger (auch meinem Hinweis auf die Vergleichsoperatoren bist du nicht gefolgt).

                    echo "<meta http-equiv="refresh" content="0; ../../forum.php">";

                    nur so am Rande bemerkt: wenn du hier ' zum Begrenzen des Strings nimmst, tust du dir leichter weil die " im String nicht mehr maskiert werden müssen:
                      echo '<meta http-equiv="refresh" content="0; ../../forum.php">';

                    Grüße aus Nürnberg
                    Tobias

  2. Tag Malte.

    ich habe irgendwoe in der achten Zeile, dass ist die Zeile mit dem Username einen kleinen Fehler.
    $sql = sprintf("SELECT id, username, password FROM user WHERE
               mysql_real_escape_string(".$_REQUEST['username']."),
               mysql_real_escape_string(".$_REQUEST['password']."))";

    Deine WHERE-Klausel erscheint mir nicht korrekt, irgendwie fehlt da ein Vergleich. Und die sprintf-Anweisung scheint ebenfalls nicht ganz korrekt zu sein. Was soll denn Ergebnis der Abfrage sein? Willst du nachschauen, ob es den User mit dem Passwort bereits gibt? Dann wäre sowas denkbar:

    $sql = sprintf("SELECT id, username, password FROM user WHERE username='%s' AND password='%s'",  
             mysql_real_escape_string($_REQUEST['username']),  
             mysql_real_escape_string($_REQUEST['password']));
    

    Siechfred