2014-10-06 59 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