2014-10-06 44 views
0

我正在嘗試搜索文本文件以查找輸入到表單中的變量,並檢查是否有重複項。該程序將搜索多個變量(名字,姓氏和電子郵件)。我能夠搜索一個變量並讓程序返回已經有一個條目,但是一旦我添加了第二個變量,我就會遇到各種各樣的麻煩。目前的代碼只是搜索名字和姓氏。我可以在成功找到兩個當前的變量後添加第三個變量。任何幫助將不勝感激。根據文件檢查多個變量

我使用的代碼:

<!DOCTYPE html> 

<html> 
    <body> 
     <?php 
      if(isset($_POST['submit'])) { 
       $fname = stripslashes($_POST['firstname']); 
       $lname = stripslashes($_POST['lastname'] . PHP_EOL); 
       $existingnames = array(); 
       $namefile = fopen("test_dupes.txt", "a+"); 


       if(file_exists("test_dupes.txt")){ 
        $existingnames = file("test_dupes.txt"); 

        if(in_array($fname, $existingnames)){ 

         if(in_array($lname, $existingnames)){ 
          echo "<p>The name is already in the file!<br>"; 
          echo "Please enter another name.</p>"; 
         } 

        } else { 
         fwrite($namefile, "$fname" . " "); 
         fwrite($namefile, "$lname"); 
         fclose($namefile); 
         echo "Your name has been successfully added to the list."; 
        } 

       } else { 

        if($namefile === false) { 
        echo "There was an error saving your name to the file."; 

        } else{ 
         fwrite($namefile, "$fname" . " "); 
         fwrite($namefile, "$lname"); 
         fclose($namefile); 
         echo "Your name has been successfully to the list."; 
        } 
       } 
      } 
     ?> 

     <form action="test_dupes.html"> 
      <input type="submit" value="Return to Name Entry" /> 
     </form> 
    </body> 
</html> 

回答

0

總體來說,我覺得這似乎是一個數據庫,一個更好的工作,但我想我可以解釋一下你用它具有當前的問題。

如果你有一個包含這樣的全名的列表的文件:

John Moran 
Someone Else 
Another Name 
... 

然後,當你閱讀到使用file()數組你最終將包含全名像這樣的數組:

array("John Moran\n", "Someone Else\n", "Another Name\n", etc.); 

當您使用in_array($fname, $existingnames),試圖找到一個現有的名字,它會嘗試與陣列中的值相匹配$fname,但由於該數組包含全名,什麼都不會匹​​配。如果你只想用in_array來檢查名字,你需要同時使用姓名和首字母來檢查它(我想這可能就是爲什麼當你只有一個變量時它正在工作。)有了兩個變量,你可以把它們回到一起,像這樣:

in_array("fname $lname", $existingnames) 
+0

這對我有效。非常感謝你。我假定當$ fname被添加到文件時,它會保留自己作爲$ fname而不是與$ lname相結合。 – 2014-10-06 15:10:37