Sponsor-Board.de

Normale Version: *gelöst* Login von PHP Seite ist Fehlerhaft
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tag liebe Community,

Mein Name ist Stephen M. bin 21 Jahre alt und komme aus Luxemburg.

Aktuell habe ich wieder ein Problem, das mir letztes Jahr nicht aufgefallen beziehungsweise nicht aufgetretten ist. Für mein Schulprojekt soll ich einen simplen Login erstellen und mir ist aufgefallen, dass man sich unter egal welchen Eingaben einloggen kann.

Hier einmal mein Code

Code:
//Eingabe des Datenbankdaten
    $con = mysqli_connect($SQLIP, $SQLAccount, $SQLPassword)
        or die("Verbindungsaufbau Fehlschlag.");
    
    //Auswahl der Datenbank
    mysqli_select_db($con, "RaspPiThermo");
    
    
    function CheckNow()
    {
      echo shell_exec("sudo ./TempNow.sh");
    }
    
    function LogOff()
    {
      unset($_SESSION['LoggedIn']);
      unset($_SESSION['Username']);
      unset($_SESSION['Password']);
      unset($_SESSION['LoggedIn']);
      unset($Check3);
      echo "
        <script type='text/javascript'>
          window.setTimeout(location.href='index.php', 500);
        </script>
      ";
    }
    
    
    echo"
      <form method='post' action='index.php'>
    ";
        
    echo "
      <body>
        <div>
          <div>  
            <p>
    ";
    
    if (isset($_SESSION['LoggedIn']))
    {
        
      echo"   <input type='submit' name='logout' value='Log Off' onclick='LogOff()' /> Eingeloggt
            </p>
      ";
    }
    else
    {
      echo"
        <table border='0'>
          <tr>
            <td>
              Username:    
            </td>
            <td>
              <input type='text' name='Username' maxlength='20' >
            </td>
          </tr>
          <tr>
            <td>
              Passwort:    
            </td>
            <td>
              <input type='password' name='Password' maxlength='20'>
            </td>
          </tr>
          <tr>
            <td colspan='2'>
              <input type='submit' name='Login' value='Login'>      
            </td>
          </tr>
        </table>
      ";
    
    
      //übergabe der Registrationsdaten
      $Username = $_POST['Username'];
      
      $Password = $_POST['Password'];
      
      
      //Prüfen ob Daten eingegeben wurden
      if (isset($_POST['Username']) AND
          isset($_POST['Password']))
      {
        
        //Code für Logindaten Überprüfung
        $sqlLoginData = "SELECT * FROM `tblUser`
          WHERE `Name` = '$Username'
          AND `Password` = '$Password'
        ";
          
          
        //Ausführung des MySQL-Befehls
        $ausführen = mysqli_query($con, $sqlLoginData)
          or die("Login Fehler");
        
        if ($ausführen)
        {
          $_SESSION['Username'] = $Username;
          $_SESSION['Password'] = $Password;
          $_SESSION['LoggedIn'] = "Set";
          $Check3 = "OK";
          
          echo "
          <script type='text/javascript'>
            window.setTimeout(location.href='index.php', 500);
          </script>
          ";
        }
        else
        {
          echo "Login Fehlgeschlagen!";
        }
        
        if (isset($Check3))
        {
          
        }
      }
    }


Ich würde außerdem noch gerne das Problem mit meinem Include lösen, wobei ich leider keine Ahnung habe, was genau ich ändern soll. Mittlerweile habe ich schon die richtige Datei gefunden, in der es geändert werden muss.

Die Rede ist von "/etc/php5/apache2/php.ini". Dort gibt es die Zeile

Code:
PHP's default setting for include_path is ".;/path/to/pehp/pear"


Die Frage ist, wie muss ich den Pfad verändern, dass er in den Ordner /var/www/Include die Dateien suchen geht. In der /var/log/apache2/error.log steht immer wieder

Code:
PHP Warning: include(Include/table.php): failed to open stream: Permission denied in /var/www/index.php on line 145
PHP Warning: include(): Failed opening 'Include/table.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/index.php on line 145


Würde mich über eure Hilfe freuen

Mit freundlichen Grüßen
VarmintLP

PHP-Code:
//Eingabe des Datenbankdaten
    
$con mysqli_connect($SQLIP$SQLAccount$SQLPassword
        or die(
"Verbindungsaufbau Fehlschlag.");
    
    
//Auswahl der Datenbank
    
mysqli_select_db($con"RaspPiThermo"); 
    
    
    function 
CheckNow()
    {
      echo 
shell_exec("sudo ./TempNow.sh");
    }
    
    function 
LogOff()
    {
      unset(
$_SESSION['LoggedIn']);
      unset(
$_SESSION['Username']);
      unset(
$_SESSION['Password']);
      unset(
$_SESSION['LoggedIn']);
      unset(
$Check3);
      echo 
"
        <script type='text/javascript'>
          window.setTimeout(location.href='index.php', 500);
        </script>
      "
;
    }
    
    
    echo
"
      <form method='post' action='index.php'>
    "
;
        
    echo 
"
      <body>
        <div>
          <div>  
            <p>
    "
;
    
    if (isset(
$_SESSION['LoggedIn']))
    {
        
      echo
"   <input type='submit' name='logout' value='Log Off' onclick='LogOff()' /> Eingeloggt
            </p>
      "

    }
    else
    {
      echo
"
        <table border='0'>
          <tr>
            <td>
              Username:    
            </td>
            <td>
              <input type='text' name='Username' maxlength='20' >
            </td>
          </tr>
          <tr>
            <td>
              Passwort:     
            </td>
            <td>
              <input type='password' name='Password' maxlength='20'>
            </td>
          </tr>
          <tr>
            <td colspan='2'>
              <input type='submit' name='Login' value='Login'>      
            </td>
          </tr>
        </table>
      "
;
    
    
      
//übergabe der Registrationsdaten
      
$Username $_POST['Username'];
      
      
$Password $_POST['Password'];
      
      
      
//Prüfen ob Daten eingegeben wurden
      
if (isset($_POST['Username']) AND 
          isset(
$_POST['Password']))
      {
        
        
//Code für Logindaten Überprüfung
        
$sqlLoginData "SELECT * FROM `tblUser`
          WHERE `Name` = '
$Username
          AND `Password` = '
$Password'
        "
;
          
          
        
//Ausführung des MySQL-Befehls
        
$ausführen mysqli_query($con$sqlLoginData)
          or die(
"Login Fehler");
         
        if (
$ausführen)
        {
          
$_SESSION['Username'] = $Username;
          
$_SESSION['Password'] = $Password;
          
$_SESSION['LoggedIn'] = "Set";
          
$Check3 "OK";
          
          echo 
"
          <script type='text/javascript'>
            window.setTimeout(location.href='index.php', 500);
          </script>
          "
;
        }
        else
        {
          echo 
"Login Fehlgeschlagen!";
        }
        
        if (isset(
$Check3))
        {
          
        }
      }
    } 


Du checkst nur ob der Query ausgeführt wird.

PHP-Code:
if($ausführen) { [...] 


Versuch mal das hier

PHP-Code:
//Eingabe des Datenbankdaten
    
$con mysqli_connect($SQLIP$SQLAccount$SQLPassword
        or die(
"Verbindungsaufbau Fehlschlag.");
    
    
//Auswahl der Datenbank
    
mysqli_select_db($con"RaspPiThermo"); 
    
    
    function 
CheckNow()
    {
      echo 
shell_exec("sudo ./TempNow.sh");
    }
    
    function 
LogOff()
    {
      unset(
$_SESSION['LoggedIn']);
      unset(
$_SESSION['Username']);
      unset(
$_SESSION['Password']);
      unset(
$_SESSION['LoggedIn']);
      unset(
$Check3);
      echo 
"
        <script type='text/javascript'>
          window.setTimeout(location.href='index.php', 500);
        </script>
      "
;
    }
    
    
    echo
"
      <form method='post' action='index.php'>
    "
;
        
    echo 
"
      <body>
        <div>
          <div>  
            <p>
    "
;
    
    if (isset(
$_SESSION['LoggedIn']))
    {
        
      echo
"   <input type='submit' name='logout' value='Log Off' onclick='LogOff()' /> Eingeloggt
            </p>
      "

    }
    else
    {
      echo
"
        <table border='0'>
          <tr>
            <td>
              Username:    
            </td>
            <td>
              <input type='text' name='Username' maxlength='20' >
            </td>
          </tr>
          <tr>
            <td>
              Passwort:     
            </td>
            <td>
              <input type='password' name='Password' maxlength='20'>
            </td>
          </tr>
          <tr>
            <td colspan='2'>
              <input type='submit' name='Login' value='Login'>      
            </td>
          </tr>
        </table>
      "
;
    
    
      
//übergabe der Registrationsdaten
      
$Username $_POST['Username'];
      
      
$Password $_POST['Password'];
      
      
      
//Prüfen ob Daten eingegeben wurden
      
if (isset($_POST['Username']) AND 
          isset(
$_POST['Password']))
      {
        
        
//Code für Logindaten Überprüfung
        
$sqlLoginData "SELECT * FROM `tblUser`
          WHERE `Name` = '
$Username
          AND `Password` = '
$Password'
        "
;
          
          
        
//Ausführung des MySQL-Befehls
        
$ausführen mysqli_query($con$sqlLoginData)
          or die(
"Login Fehler");
$checkforRow mysqli_num_rows($ausführen);
         
        if (
$checkforRow != 0)
        {
          
$_SESSION['Username'] = $Username;
          
$_SESSION['Password'] = $Password;
          
$_SESSION['LoggedIn'] = "Set";
          
$Check3 "OK";
          
          echo 
"
          <script type='text/javascript'>
            window.setTimeout(location.href='index.php', 500);
          </script>
          "
;
        }
        else
        {
          echo 
"Login Fehlgeschlagen!";
        }
        
        if (isset(
$Check3))
        {
          
        }
      }
    } 

Naja mit dem Code funktion iert es zwar, dass nicht alle gleich eingeloggt werden mit egal welchen werten, aber ich kann mich auch nicht mit anderen Usern die existieren einloggen.

Leider funktioniert es auch nur einmal :/

P.S.: brauchst nicht den ganzen Code zu schreiben. Der betreffende Ausschnitt reicht.
Du lieferst auch keinen kompletten Code.
Was steht denn noch vor dem Abschnitt hier:

PHP-Code:
/Eingabe des Datenbankdaten
    $con 
mysqli_connect($SQLIP$SQLAccount$SQLPassword
        or die(
"Verbindungsaufbau Fehlschlag."); 


Außer das die Variablen da irgendwo definiert werden ?
Du bräuchtest auch noch ein session_start() ganz am Anfang.

Und die Variablen sollten auch mal escaped werden (SQL Injection).
Würde das ganze ja mal gerne Lokal bei mir testen.

Zudem kann ich Dir vorweg sagen, dass dein LogOff() nicht funktionieren wird. Du kannst keine PHP-Funktion mit onclick="" aufrufen.

VarmintLP schrieb:

Code:
[...]

    function LogOff()
    {
      unset($_SESSION['LoggedIn']);
      unset($_SESSION['Username']);
      unset($_SESSION['Password']);
      unset($_SESSION['LoggedIn']);
      unset($Check3);
      echo "
        <script type='text/javascript'>
          window.setTimeout(location.href='index.php', 500);
        </script>
      ";
    }

    [...]

    if (isset($_SESSION['LoggedIn']))
    {
        
      echo"   <input type='submit' name='logout' value='Log Off' onclick='LogOff()' /> Eingeloggt
            </p>
      ";
    }
    
    [...]


MfG
Freddy

Du hast da verdammt noch mal das aller wichtigste im Umgang mit Sessions vergessen.
Hier lesen:
[Link: Registrierung erforderlich]

und Sessions verstehen und zu benutzen verstehen.

PS: Wenn du entwickelst, lerne zu debuggen.
Ansonsten wirst du vor jeder 2. Zeile fragend stehen und nicht weiter wissen.


Ahh myfarynet.eu war schneller. Ich wollte lieber das er den Fehler selber erkennt und sich informiert. Sonst lernt er nicht weil er scheinbar nicht weiß wie Sessions funktionieren oder er hat es vergessen(wobei ich auf erstes tippe).
Mfg Scharock
@myfarynet.eu der session_start ist vorhanden. Und im Header stehen nun wirklich keine weiteren relevanten Informationen nur das Übliche Titel, Charset und nach dem Header die Variablen für den Server (die ich nicht zeigen möchte, da man ja weiß, dass das große weite Internet von Überall zugänglich ist. Das mal vorweg.

@Scharock ich kann richtig Debuggen, nur manchmal komme ich auch nicht weiter, da nicht jedes Problem vorgekommen ist.

@Freddy die Funktion habe ich nur eben so dahin gesetzt, damit ich das später ändern kann. Sogesehen, kann man die Funktion einfach entfernen und so tun, als ob sie nicht da gewesen wäre.

@all Ich habe in der Zwischenzeit ein wenig weiter an der Index.php gearbeitet, aber da mir das nötige Material hier Zuhause fehlt und mir manche Möglichkeiten einfach nicht gegeben sind, kann ich nicht so ohne weiteres meinen Raspberry Pi Permanent eingeschaltet lassen.

Außerdem kenne ich mich sehr wohl ausreichend mit Sessions aus, um diese ohne weiteres Verwenden zu können.

Das Gesamtprojekt ist außerdem nur dafür gedacht in einem geschlossenen Firmennetz verwendet zu werden. Das soll heißen: Von außen wird man später nicht auf die Geräte Zugriff erhalten, außer man ist innerhalb des Firmen/Schulnetzwerks.

Um wieder auf das Problem zurück zu kommen. Mit der Idee

PHP-Code:
if($ausführen) { [...] 


durch folgendes zu ersetzen, hat leider nicht geholfen.

PHP-Code:
//Ausführung des MySQL-Befehls
        
$ausführen mysqli_query($con$sqlLoginData)
          or die(
"Login Fehler");
$checkforRow mysqli_num_rows($ausführen);
         
        if (
$checkforRow != 0)[...] 


Leider bin ich jetzt genau so entfernt von der Lösung als vorher. -_-

Vlt hat ja einer von euch eine andere Lösung parat.

VarmintLP schrieb:
@myfarynet.eu der session_start ist vorhanden. Und im Header stehen nun wirklich keine weiteren relevanten Informationen nur das Übliche Titel, Charset und nach dem Header die Variablen für den Server (die ich nicht zeigen möchte, da man ja weiß, dass das große weite Internet von Überall zugänglich ist. Das mal vorweg.

@Scharock ich kann richtig Debuggen, nur manchmal komme ich auch nicht weiter, da nicht jedes Problem vorgekommen ist.

@Freddy die Funktion habe ich nur eben so dahin gesetzt, damit ich das später ändern kann. Sogesehen, kann man die Funktion einfach entfernen und so tun, als ob sie nicht da gewesen wäre.

@all Ich habe in der Zwischenzeit ein wenig weiter an der Index.php gearbeitet, aber da mir das nötige Material hier Zuhause fehlt und mir manche Möglichkeiten einfach nicht gegeben sind, kann ich nicht so ohne weiteres meinen Raspberry Pi Permanent eingeschaltet lassen.

Außerdem kenne ich mich sehr wohl ausreichend mit Sessions aus, um diese ohne weiteres Verwenden zu können.

Das Gesamtprojekt ist außerdem nur dafür gedacht in einem geschlossenen Firmennetz verwendet zu werden. Das soll heißen: Von außen wird man später nicht auf die Geräte Zugriff erhalten, außer man ist innerhalb des Firmen/Schulnetzwerks.

Um wieder auf das Problem zurück zu kommen. Mit der Idee

PHP-Code:
if($ausführen) { [...] 


durch folgendes zu ersetzen, hat leider nicht geholfen.

PHP-Code:
//Ausführung des MySQL-Befehls
        
$ausführen mysqli_query($con$sqlLoginData)
          or die(
"Login Fehler");
$checkforRow mysqli_num_rows($ausführen);
         
        if (
$checkforRow != 0)[...] 


Leider bin ich jetzt genau so entfernt von der Lösung als vorher. -_-

Vlt hat ja einer von euch eine andere Lösung parat.

Ich kann dir rein gar nichts davon glauben.

Ich habe den Code komplett kopiert und bei mir getestet.
Mit dem Code von myfarynet.eu hat alles perfekt funktioniert.

Sorry, ich kann dir nicht ansatzweise glauben, dass du deinen Code gedebuggt hast.
Der Code funktioniert fehlerfrei.
Dann debugge das und schreib uns wo genau welcher Wert fehlt oder falsch ist.

Deine Aussagen sind recht grob.
Und wie gesagt bei mir lokal läuft der Code Problemlos.

Scharock schrieb:
Ich kann dir rein gar nichts davon glauben.

Ich habe den Code komplett kopiert und bei mir getestet.
Mit dem Code von myfarynet.eu hat alles perfekt funktioniert.

Sorry, ich kann dir nicht ansatzweise glauben, dass du deinen Code gedebuggt hast.
Der Code funktioniert fehlerfrei.
Dann debugge das und schreib uns wo genau welcher Wert fehlt oder falsch ist.

Deine Aussagen sind recht grob.
Und wie gesagt bei mir lokal läuft der Code Problemlos.


Ok dann welches System benutzt du und welche PHP Version verwendest du. Bei mir kommt halt Login Fehler dahinstehen, ich bekomme dann die Eingegebenen Werte angezeigt und das wars dann. Mehr kommt da echt nicht bei mir.

Wenn da "Login Fehler" steht, hast du nen Fehler in der Mysql Abfrage - check das mit mysqli_error() - da wären wir wieder beim Thema: richtig debuggen ... was du ja laut eigener Aussage drauf hast Tongue

Das hat hier auch nichts mit dem OS oder der PHP Version zu tun - wie kommst du da drauf?
Seiten: 1 2
Referenz-URLs