2016-04-07 16 views
0

私は登録ページを作成し、txtファイルにユーザが存在しないかどうかを確認する必要があります。私はいくつかの答えをオンラインで見つけ出し、それらを適用しようとしましたが、私にとってはうまくいかないようです。彼が検証する必要がある部分を除いてすべてが機能します。 ここに私のコードです:これは指定されたユーザ名が既にtxtファイルに存在するかどうかを確認する、

<?php 
if($_POST['formSubmit'] == "Submit") 
{ 
    $errorMessage =""; 
    $link_Create = "CreateAnAccount.php"; 
    $Username = $_POST['userName']; 
    $password = $_POST['Password']; 

    if(empty($_POST['userName'])) 
    { 
     echo "<li>You forget to enter a UserName</li><a href='".$link_Create."'>Start again</a>"; 
     header("Location:PopUp.html"); 
     exit; 
    } 

    if(empty($_POST['Password'])) 
    { 
     echo "<li>You forget to enter a Password</li><a href='".$link_Create."'>Start again</a>"; 
     header("Location:PopUp.html"); 
     exit; 
    } 
    if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[[email protected]#$%]{4,24}$/', $password)) 
    { 
     echo "<li>Your Password input was wrong, please notice Paswword most be at least 4 characters long, have at least one letter and at least one digit. </li><a href='".$link_Create."'>Start again</a>"; 
     header("Location:PopUp.html"); 
     exit; 
    } 

    if(empty($errorMessage)){ 
     $userlist = fopen("login.txt","r"); 
     $success = true; 
     foreach ($userlist as $user) { 
      $user_details = explode('|', $user); 
      if ($user_details[0] == $Username) { 
       $success = false; 
       break; 
      } 
     } 

     fclose($userlist); 
     if ($success==true) { 
      $writer = fopen("login.txt", "a") or die("Unable to open file."); 
      fwrite($writer,$Username."|"); 
      fwrite($writer,$password."\n"); 
      fclose($writer); 

      echo "<br>You have been logged in. <br>"; 
      header("Location:PopUp.html"); 
      exit; 
     } 
     else { 
      echo "<li>This User Name already exist!</li><a href='".$link_Create."'>Start again</a>"; 
      header("Location:PopUp.html"); 
      exit; 
     } 
    } 
} 
?> 

は私のhtmlコードの必要性があるなら、私を知ってみましょうが、私はそれが問題に影響を持っているとは思わない私のコードです。 ご協力いただきありがとうございます。

+0

あなたの現在の出力は何を?何かエラーがありますか? – cmorrissey

+0

あなたは実際にファイルを読むことはありません。あなたは '$ userlist = fopen(" login.txt "、" r ");'だけそれを開きます。 'fopen()'は、それが開くファイルの内容を読み取ることはありません。あなたは本当にあなたが使用する関数のドキュメントを読むはずです。 – arkascha

+0

'$ _POST ['userName']'を検証する必要があります。名前に区切り文字( '|')が含まれていると、将来あなたのパーサが破られます。私はこれにDBを使用します。あなたは 'file_get_contents'を使って' | 'を' explode'してから名前を繰り返すことができます。もし何もする必要がなければ 'in_array'を使用してください – chris85

答えて

0

あなたはユーザリストファイルの各行の上に、この反復処理に置き換えることを試してみてください

$userlist = fopen("login.txt","r"); 
$success = true; 
foreach ($userlist as $user) { 
    $user_details = explode('|', $user); 
    if ($user_details[0] == $Username) { 
     $success = false; 
     break; 
    } 
} 

fopen機能を返すリソースを反復処理に問題があります。

$file = new \SplFileObject("login.txt"); 
// Loop until we reach the end of the file 
while (!$file->eof()) { 
    $user = $file->fgets(); 
    $user_details = explode('|', $user); 
    if ($user_details[0] == $Username) { 
     $success = false; 
     break; 
    } 
} 
+0

ありがとうございました。あなたのコードに追加されます:$成功=真; whileループの直前の – lior

関連する問題