2016-04-07 5 views
0

Ich habe eine Aufgabe, wo ich eine Registerseite erstellen muss und überprüfen, ob ein Benutzer nicht bereits in einer TXT-Datei vorhanden ist. Ich habe einige Antworten online gefunden und versucht, sie anzuwenden, scheint aber nicht für mich zu funktionieren. alles funktioniert außer dem Teil, den er überprüfen muss. hier mein Code: dies ist mein CodeÜberprüfung, ob Benutzername existiert bereits in einer TXT-Datei, mit PHP

<?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; 
     } 
    } 
} 
?> 

Lassen Sie mich wissen, ob es die Notwendigkeit meines HTML-Code ist, aber ich glaube nicht, dass keine Auswirkungen auf die Frage hat. Vielen Dank Ich schätze die Hilfe.

+0

was ist Ihre aktuelle Ausgabe? Erhalten Sie Fehler? – cmorrissey

+0

Sie lesen die Datei nie wirklich. Sie öffnen es nur: '$ userlist = fopen (" login.txt "," r ");'. 'fopen()' liest _nicht_ den Inhalt der geöffneten Datei. Sie sollten wirklich anfangen, die Dokumentation der Funktionen zu lesen, die Sie verwenden. – arkascha

+0

Sie sollten '$ _POST ['userName']' validieren. Wenn der Name Ihr Trennzeichen ('|') enthält, wird Ihr Parser in der Zukunft unterbrochen. Ich würde dafür eine DB benutzen. Du könntest 'file_get_contents' verwenden, dann' explode' auf '' '' und dann iteriere durch die Namen .. oder benutze 'in_array' wenn du nichts mit ihnen machen musst – chris85

Antwort

0

Sie haben Problem mit Iterieren über Ressource, die fopen Funktion

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

Try senden Sie es mit diesem Iterieren über jede Zeile von Userlist-Datei zu ersetzen:

$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

Vielen Dank, dass das funktioniert hat, das einzige was ich hinzugefügt in Ihrem Code ist: $ Erfolg = wahr; kurz vor der while-Schleife. – lior

Verwandte Themen