Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Mysql Such anfrage

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Mysql Such anfrage

    Hallo Zusammen,

    hab ein kleines Problem mit einer MySQL Such Anfrage. Ich würde gerne prüfen ob der eingegebene Benutzername in der Datenbank steht und ob das Passwort über ein stimmt.

    Code:
    <html>
    <head>
    <title>...</title>
    </head>
    <body>
    	<center>
    		<h1>Login</h1>
    		<form action="login.php" method="post">
    			<p><input name="benutzer" value="Benutzername" /></p>
    			<p><input name="passwort" type="password" value="Passwort" /></p>
    			<p><input type="submit" /><input type="reset" /></p>
    		</form>
    	</center>
    </body>
    </html>
    PHP-Code:
    <html>
    <head>
    <title>...</title>
    </head>
    <body>
    <?php
        mysql_connect
    ("...","...","...");
        
    mysql_select_db("login");
        
        
    $benutzer $_POST["benutzer"];
        
    $passwort $_POST["passwort"];
        
        echo 
    $benutzer;
        
        
    $sql "SELECT * FROM login WHERE benutzer = ".$benutzer." limit 1";
        
        
    $res mysql_query($sql);
        
    $num mysql_num_rows($res);
        
        if(
    $num==1){
            
    header("Location: blabla.php");
        }else{
            echo 
    "<p>Login nicht akzeptiert!</p>";
        };
    ?>
    </body>
    </html>
    Leider funktioniert das ganze nicht wirklich und ich lande immer bei Login nicht akzeptiert. Der passende Eintrag existiert. Und wie man dazu das Pw prüft weiß ich auch nicht. Hoffe ihr könnt helfen.

    Viele Grüße DsKing


  • #2
    Selber finden, debuggen gehört zum programmieren dazu. Grenze deinen Fehler damit ein, und wenn du dann noch konkrete Fragen hast .. gerne.

    http://php-de.github.io/#debugging

    Ansatz: Prüfe mit var_dump() was in $_POST übergeben wird, prüfe was du dann damit machst - (Kontrollausgaben etc..) prüfe deine Query (mit echo ausgeben lassen), aktiviere Fehlerausgabe von PHP und die von der Datenbankschnittstelle etc.. Das Übliche halt.

    Ein Tipp noch:
    PHP-Code:
    $sql "SELECT * FROM login WHERE benutzer = ".$benutzer." limit 1"
    In SQL-Statemants werden Strings immer mit 'Hochkommas' angegeben. Aber das würde dir PHP sogar sagen, wenn du ihm die Chance dazu gibst.


    Ansonsten noch:

    * mysql_ Erweiterung wird es bald nicht mehr geben http://php.net/manual/en/migration55.deprecated.php

    * deine query ist offen für SQL-Injections http://php-de.github.io/jumpto/sql-injection/

    => Nutze PDO oder mysqli_ mit prepared Statements und du erschlägst beide Punkte oben

    * SELECT * ist pfui http://php-de.github.io/jumpto/code-smells/#select-

    Aktiviere vor allem mal error reporting, da bekommst du notices beim ersten Aufruf der Seite. Du fragst vorher nicht ob die überhaupt vorhanden sind:
    PHP-Code:
    $benutzer $_POST["benutzer"]; 
    $passwort $_POST["passwort"]; 
    Zu header():

    PHP-Code:
    <html> 
    <head>
    <title>...</title> 
    </head> 
    <body> 
    <?php 
    ...     
        if(
    $num==1){ 
            
    header("Location: blabla.php");
    Vor header() darf keine Ausgabe kommen, daher beherzige gleich von Anfang an das EVA Prinzip! http://php-de.github.io/jumpto/eva-prinzip/
    Weiters verlangt header(Location: ) gem. HTTP Spezifikation nach einer absoluten URI, kannst auch in der PHP Doku zu header() nachlesen.

    LG
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Info: Ich habe oben noch ein paar Punkte ergänzt.
      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Ich komm leider nicht weiter... Hba versucht alles umzusetzen (außer das EVA Prinzip kommt noch) und kriege die Ausgabe:
        string(5) "bruno" string( "Passwort" Notice: Undefined variable: num in /var/www/TODO/login.php on line 27

        Login nicht akzeptiert!
        PHP:
        PHP-Code:
        <html>
        <head>
        <title>...</title>
        </head>
        <body>
        <?php
            error_reporting
        (-1);
            
        ini_set('display_errors''On');
            
            
        $link mysqli_connect(...);
            
            if(isset(
        $_POST["benutzer"])){
                
        $benutzer $_POST["benutzer"];
            }
            if(isset(
        $_POST["passwort"])){
                
        $passwort $_POST["passwort"];
            }
            
        var_dump($benutzer);
            
        var_dump($passwort);
            
            
        $sql 'SELECT benutzer FROM login WHERE benutzer = '.$benutzer.' limit 1';
            
            if(
        $res mysqli_query($link$sql)){
                
        $num mysqli_num_rows($res);
            }
            
            if(
        $num==1){
                echo 
        "Test";
                
        //header("Location: blabla.php");
            
        }else{
                echo 
        "<p>Login nicht akzeptiert!</p>";
            };
            
        mysqli_close($link);
        ?>
        </body>
        </html>

        Kommentar


        • #5
          $num ist nicht gesetzt, vermutlich weil es bei der DB-Ausführung einen Fehler gab und daher der Code im if () nicht ausgeführt wurde.

          Hier:
          PHP-Code:
          if($res mysqli_query($link$sql)){
              
          $num mysqli_num_rows($res);

          Frag mal die errors ab bzw. lass dir die query mit echo ausgeben, ev. siehst du schon so was, ansonsten bekommst sicher eine Fehlemeldung.

          http://php.net/manual/de/mysqli.error.php
          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            string(5) "bruno" string( "Passwort" Unknown column 'bruno' in 'where clause' Notice: Undefined variable: num in /var/www/TODO/login.php on line 32

            Login nicht akzeptiert!
            Aber über phpmyadmin finde ich bruno

            Kommentar


            • #7
              In SQL-Statemants werden Strings immer mit 'Hochkommas' angegeben. ....
              was hier nicht der Fall ist

              PHP-Code:
              $sql 'SELECT benutzer FROM login WHERE benutzer = '.$benutzer.' limit 1'
              DU machst:

              Code:
              SELECT benutzer FROM login WHERE benutzer = bruno limit 1
              musst aber

              Code:
              SELECT benutzer FROM login WHERE benutzer = 'bruno' limit 1
              an die DB schicken.

              Somit:

              PHP-Code:
              $sql "SELECT benutzer FROM login WHERE benutzer = '".$benutzer."' limit 1"
              ACHTUNG: Diese Abfrage ist aber noch nicht gegen Injections sicher !! Siehe dazu oben etc..

              LG
              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Vielen Dank für die Hilfe

                Hab ich das so richtig gemacht :
                PHP-Code:
                $sql "SELECT benutzer FROM login WHERE benutzer = '"mysqli_real_escape_string($link$benutzer) ."' limit 1"

                Kommentar

                Lädt...
                X