2011-11-06 5 views
0

入力されたユーザー名とパスワードを.txtファイルと照合する簡単なログインスクリプトを作成しようとしています。私が見つけた問題は、私のスクリプトが自分の.txtファイルの最初の行だけをチェックすることです。つまり、.txtファイルの最初の行が "test | test123"で、ユーザー名に "test"を入力し、パスワードに "test123"と入力すればすべて動作します。しかし、私が他の行と同じことをすると、 "invalid password or username"文が返されます。私のスクリプトは、入力されたユーザー名とパスワードに対して、自分の.txtファイル内の他の行をチェックしていないと思いますか?どのようにこれを修正することができますか?PHPスクリプトで.txtファイルの複数の行がチェックされない

<?php 

$check = 0; 
if (isset($_POST['submit'])) 
{ 

$username = htmlentities($_POST['name']); 
$username = strtolower($username); 
$password = htmlentities($_POST['apw']); 
$filename = getcwd() . "/atextfile.txt"; 
$lines = file($filename , FILE_IGNORE_NEW_LINES); 
foreach($lines as $key => $line) 
{ 
    list($name, $pw) = explode('|', $line); 
    if($name == $username && $pw == $password) 
$check++; 
break; 
} 
if ($check == 1){ 
header("location: index.php"); 

} 

else{ 
printf("Your username or password are invalid. Please try again."); 

} 

} 

?> 

<form method = "POST" action = "<?php echo $_SERVER['PHP_SELF']; ?>"> 
<p> 
Username:<br /> 
<input type = "text" id="name" name="name" size="20" maxlength="40" /> 
</p> 

<p> 
Password:<br /> 
<input type = "password" id="apw" name="apw" size="20" maxlength="40" /> 
</p> 

<input type="submit" id="submit" name ="submit" name ="submit" value="Log in" /> 

<p> 
<a href="register.php">Register</a></p> 
</form> 

答えて

1

を壊しています:

foreach($lines as $key => $line) 
{ 
    list($name, $pw) = explode('|', $line); 
    if($name == $username && $pw == $password) 
    $check++; 
    break; 
} 

それは

foreach($lines as $key => $line) 
{ 
    list($name, $pw) = explode('|', $line); 
    if($name == $username && $pw == $password) 
    { 
     $check++; 
     break; 
    } 
} 
0

if命令の{}ブロック内にbreak文を配置します。この時点で、それは常に、これはあなたの問題である最初の行の後に

0

する必要があります私はダンに同意します。ちょうどそれをより明確にするために..私は以下の修正されたコードを追加しました。

foreach($lines as $key => $line)  
{ 
    list($name, $pw) = explode('|', $line); 
    if($name == $username && $pw == $password) 

     {     
      $check++; 
      break; 
     } 
} 
関連する問題