2017-01-05 9 views
0

bin eine einfache Anwendung zu erstellen, um ein- und ausloggen mit einer dateibasierten Authentifizierung zu testen, aber ich habe in ein bisschen eine enge gerannt, ich kann nicht meinen Kopf wickeln.var_dump zeigt mir unerwartete Ergebnisse

Hier sind die Inhalte der Textdatei, die meine Anwendung testen bin mit der filetest_02.txt gestattet

david, codeslave 
chris, bigboss 

Am auch PHP-Skripte verwenden, sind die Tests zu tun Hier werden die Inhalte für login.php

<?php 

    $error = ''; 

    if (isset($_POST['login'])) { 
    session_start(); 
    $username = trim($_POST['username']); 
    $password = trim($_POST['pwd'] ); 
    // location of usernames and passwords 
    $userlist = 'C:/private/filetest_02.txt'; 
    // location to redirect on success 
    $redirect = 'http://localhost/php/powers/solutions/ch09/menu.php'; 
    require_once './includes/authenticate.inc.php'; 
    } 

    ?> 
    <!DOCTYPE HTML> 
    <html> 
    <head> 
     <meta charset="utf-8"> 
     <title>Login</title> 
    </head> 
    <body> 
     <?php if ($error) : ?> 
     <p><?php echo $error; ?></p> 
     <?php endif; ?> 
     <form id="form1" method="post" action=""> 
      <p> 
       <label for="username">Username:</label> 
       <input type="text" name="username" id="username"> 
      </p> 
      <p> 
       <label for="pwd">Password:</label> 
       <input type="password" name="pwd" id="pwd"> 
      </p> 
      <p> 
       <input name="login" type="submit" id="login" value="Log in"> 
      </p> 
     </form> 
    </body> 
</html> 

Und hier sind die Inhalte für authenticate.inc.php

<?php 

if (!file_exists($userlist) || !is_readable($userlist)) { 
    $error = 'Login facility unavailable. Please try later.'; 
} else { 
    // read the file into an array called $users 
    $users = file($userlist); 
    // loop through the array to process each line 
    for ($i = 0; $i < count($users); $i++) { 
     // separate each element and store in a temporary array 
     $tmp = explode(', ', $users[$i]); 
     var_dump($tmp); 
     $name = trim($tmp[0]); 
     $pwd = trim($tmp[1]); 
     var_dump($name, $pwd); 
     var_dump($_POST); 
     // check for a matching record 
     if ($name == $username && $pwd == $password) { 
      $_SESSION['authenticated'] = 'Jethro Tull'; 
      session_regenerate_id(); 
      break; 
     } 
    } 
    // if the session variable has been set, redirect 
    if (isset($_SESSION['authenticated'])) { 
     /* header("Location: $redirect"); 
     exit; */ 
    } else { 
     $error = 'Invalid username or password.'; 
    } 
} 

Das Problem ist, wenn ich auf den Button Login klicken Sie auf login.php, erhalte ich die folgende Ausgabe enter image description here

Warum ist die var_dump Ausgang die Länge der Zeichenfolge ‚David‘ zu sein, zeigt gleich 8 sogar bis 8 auch nach dem Trimmen? Was könnte das alles verursachen? Danke.

Antwort

-1

var_dump zeigte Ihnen wahrscheinlich die Initialisierung von David mit Leerzeichen, aber Sie können sehen, dass es danach geschnitten wurde. Macht das etwas Unerwünschtes in Ihrem Code?

Auch wenn dies für eine tatsächliche Website ist und Sie einfach nicht herumspielen, würde ich keine Passwörter in Ihren Dateien speichern, ohne dass sie gesalzen und gehackt werden.

Auch unter dem PHP-Handbuch:

string (32) "Das sind ein paar Worte :) ..." string (16) "Beispiel string " string (11) " Hallo Welt“

string (28) "Das sind ein paar Worte :) ..." string (24) "Das sind ein paar Worte :)" string (5) "o Wor" string (9) "ello Worl" string (14) "Beispielstring"

var_dump zeigte die Initialisierung und die Trims danach.

+0

Ja, ich spiele herum, aber wie Sie aus dem Code, den ich geschrieben habe, sehen, soll ich auf den Benutzernamen und das Passwort aus der Datei mit dem Benutzernamen und Passwort aus meinem Formular auf Gleichheit testen und ich denke, der Grund der Sitzung wird nicht gesetzt, weil der Benutzername aus der Datei und aus dem Formular offensichtlich nicht gleich sind, da dort Längen – kellymandem

+0

vergessen, nur debuggen und verfolgen Sie Ihren Code. Ich habe ein Login-System, aber es sieht zu anders aus als Sie es teilen. Ich würde es debuggen, aber ich habe die Dateien nicht. – bedtime21