根据文件检查多个变量

时间:2014-10-06 13:17:34

标签: php duplicates

我试图在文本文档中搜索输入到表单中的变量,并检查是否存在重复项。该程序将搜索几个变量(名字,姓氏和电子邮件)。我能够搜索单个变量并让程序返回已经有一个条目,但是当我添加第二个变量时,我会遇到各种各样的麻烦。当前代码仅搜索名字和姓氏。在我成功找到两个当前变量之后,我将添加第三个变量。任何帮助将不胜感激。

我正在使用的代码:

<!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>

1 个答案:

答案 0 :(得分: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)