2011-07-12 8 views
1

ユーザーが入力したユーザー名とパスワードがデータベースではなくファイル内に格納されていることを確認しようとしています。私はユーザー名とパスワードの2つしか書いておらず、それらをtestPass.filというファイルに入れ、ユーザー名とパスワードをタブ(\ t)で区切っています。ファイルに保存されているユーザー名とパスワードを確認するためにPHPを使用する際に問題が発生しました。

explode関数を使用してファイルから取得したユーザー名またはパスワードの値を表示するようにテストすると、自分のコードが動作するようです。しかし、ユーザがログインページで入力したユーザ名とパスワードを確認しようとすると、ファイルに保存されているユーザとの間で問題が発生します。私はそれを検証するためにecho文を使ってみましたが、まったく同じ文字列であるように見えますが、等しいかどうかを調べるIf文を実行しません。申し訳ありませんが、愚かで紛らわしい質問がありましたら、私はこれをしばらく試しています。少しのPHPしか知りません。助けを借りて、このコードを下記に投稿します。

<?php 

    $userName=$_POST['userName']; 
    $userPass=$_POST['userPass']; 
    $correctPass=0; 

    $file=fopen("testPass.fil","r"); 
    $record=fgets($file); 

    while(!feof($file)) 
    { 
    $fileData=explode("\t",$record); 
    //echo "$fileData[0] <br> $userName <br><br> $fileData[1] <br> $userPass<br><br>"; 
    //this line was used to make sure that the username entered and my stored username were the same. 

    if($userName==$fileData[0]) 
    { 
     if($userPass==$fileData[1]) 
     {  
     $correctPass=1; 
     break; 
     } 
    } 

    $record=fgets($file); 
    } 

if($correctPass == 1) 
{ 
    echo "UserName and Password are present"; 
} 
else 
{ 
    echo "The UserName or Password you entered is incorrect."; 
} 

fclose($file); 

?>あなたのユーザ名とパスワードから空白を除去する必要があるかもしれません

+1

コードの将来のバージョンで塩漬けハッシュを使用することをお勧めしますか?プレーンテキストのパスワードを保存することは悪いです.... – Zoredache

+0

ところで、あなたは爆発をスキップし、ちょうど[fgetcsv](http://php.net/manual/en/function.fgetcsv.php)を使うことができます。デリミタとして '\ t'を指定するだけです。 – Zoredache

+0

そうですね。このコードは基本的にPHPを使用してユーザーのパスワードが正しいことを確認してから、次のページにリダイレクトするためのテストです。 iPhone Web Appのためのものなので、フォームが正しく送信されていることを確認したいだけです。助けを借りて皆様に感謝します。 – Alan

答えて

0

Sinanによると、文字列の空白を削除する必要があるかもしれません。たとえば、trim()関数を使ってそれらを比較することができます。また、ログインチェックの大文字と小文字を区別しないようにするために、strtolower()でソース文字列と比較ユーザー名文字列の両方を実行すると便利です。

0

ええと、基本的なiniファイルを作成してparse_ini_fileを呼び出すだけで、面倒さが少なくなります。

0

fgetsは最後に改行文字を含む行全体を返しますが、削除しないので、等しくない"password""password\n"を比較しています。

あなたはrtrim()であなたがfgetsを呼び出すたびに改行文字をストリッピングすることにより、それを修正することができます:

$record = rtrim(fgets($file)); 

あなたがパスワードにスペースを許可したい場合は、それが唯一のキャリッジリターンと改行を削除することを指定することができます。

$record = rtrim(fgets($file, "\r\n")); 
関連する問題