-2

txt ファイルに多数のパスワードとユーザー名が保存されており、一致を確認する必要があります。これは安全な方法ではありませんが、学習目的のためです。

このコードは、ユーザー名とパスワードを txt ファイルに書き込みます。

  if(isset($_POST['register'])) //  
   {
    $user  = $_POST['username'];
    $password=$_POST['password'].PHP_EOL;
    $fh = fopen("file.txt","a+");
    fwrite($fh,$user." ".$password); //write to txtfile

    fclose($fh);
 }

これが私が問題を抱えているコードです。

ユーザー名とパスワードはこのように結果に保存されます

      username1 passwords1 username2 password2 etc. 

したがって、result[0] = userinput かどうかを確認する必要があり、存在する場合は、result[1] = passwordInput などを確認する必要があります。

   if(isset($_POST['Logg']))
   {
   //$_SESSION['username']=$user; 
   //$_SESSION['password']=$password;

    $file = file_get_contents("file.txt"); // Returns a string

    $result = explode(" ",$file);
    $boolC= false;

    for($i=0; $i< count($result); $i++)
    {
   if($result[$i] === $user)
   {
    $boolC=true;
    $i =$i+1; 
    if($boolC === true)
    {
        if($result[$i]===$password)
        {
            echo 'Password and Username Correct';
        }
    }

   }
     }

  }
4

3 に答える 3

1

パスワードに記号などのスペースが含まれる可能性を考慮してください。おそらく、改行 ("\n") で分割する必要があります。

if( $result[$i] === $user && $result[$i+1] === $password )

2 番目の部分が評価されるには、ステートメントの最初の部分が true でなければなりません。$i 変数は決して変更されません

$file = "username1 passwords1 username2 password2";
$result = explode(" ",$file);
$user = "username1";
$password = "passwords1";

for($i=0; $i< count($result); $i++){

    if($result[$i] === $user && $result[$i+1] === $password)
    {

        echo 'Password and Username Correct';
   }
}
于 2013-03-03T19:19:11.730 に答える
1

このコードを修正する前に、プレーン テキスト ファイルにパスワードを保存しないことを強くお勧めします。これは、システムの巨大なセキュリティ ホールです。

私が見ることができる別のアーキテクチャの問題は、ユーザー名またはパスワードにスペースが含まれているとコードが失敗することです。代わりに区切り文字として行ジャンプを使用する必要があります (\n)。

于 2013-03-03T18:59:15.847 に答える
0

元の投稿のロジックに問題はないと思います。

すべての変数を出力して、それらが正しい値を保持しているかどうかを確認する必要があります。

「$user」変数と「$password」変数は、他の if ブロックのブレース内、つまり $_POST['logg'] をチェックするブロック内では認識されないため、グローバル変数かグローバル変数ではありません。

于 2013-03-03T21:15:51.127 に答える