【问题标题】:Fetch data from a text file using php使用 php 从文本文件中获取数据
【发布时间】:2020-06-12 19:13:50
【问题描述】:

我有一个文本文件,它是用另一个 php 脚本创建的,其中包含以下信息:姓名、电话和地址。以这样的格式: 姓名 电话 地址 我想用另一个 php 脚本来搜索给定名称的文本文件。如果名称存在,则将结果放在搜索框下,否则将显示错误消息。 到目前为止,这是我的代码:

<!DOCTYPE HTML>
<html>
    <head>
        <title>Phonebook Search</title>
    </head>
    <body>
        <form action="" method="post">//my search box.
            <div><h1>Phonebook Search</h1>
                <label>Enter name: <input type="text" name="name" /></label>
                <input type="submit" value="Search" />
            </div>
        </form>

        <?php
            if ($_SERVER["REQUEST_METHOD"] == "POST")//the condition after pressing the search button.
            {
                $name = $_POST["name"];
                $filename = 'phonebook.txt';
                $file = file_get_contents($filename);
                if (strpos($file, "$name"))
                {
                    echo "$name";
                }

                $lines = file("phonebook.txt", FILE_IGNORE_NEW_LINES);

            }
        ?>
    </body>
</html>

任何帮助都会得到帮助。如果您需要更多信息,我会提供。

【问题讨论】:

  • 你到底卡在哪里了?
  • 它似乎不起作用。当我在搜索框中写一个名字时(一个我知道它存在的名字,来测试它)它没有找到显示给我的名字。
  • 为什么将"$name" 传递给strpos 而不是变量$name?此外,您必须检查strpos(...) !== false,因为0 的位置也将被评估为FALSE (php.net/manual/en/function.strpos.php)。使用!== 进行比较可确保它实际上是一个布尔值而不是0
  • 以 JSON 等不同的格式存储数据会更容易

标签: php html search text-files


【解决方案1】:

除了清理代码的一些小部分(将"$name" 替换为$name)之外,您还必须检查strpos(...) !== false,因为0 的位置将被评估为FALSE。看看php.net/manual/en/function.strpos.php)。 !== 将考虑类型,而不仅仅是两个变量的值。

<!DOCTYPE HTML>
<html>
    <head>
        <title>Phonebook Search</title>
    </head>
    <body>
        <form action="" method="post">//my search box.
            <div><h1>Phonebook Search</h1>
                <label>Enter name: <input type="text" name="name" /></label>
                <input type="submit" value="Search" />
            </div>
        </form>

        <?php
            if ($_SERVER["REQUEST_METHOD"] == "POST")
            {
                $name = $_POST["name"];
                $filename = 'phonebook.txt';
                $file = file_get_contents($filename);

                // transform $name to e.g. lowercase (ignores case entered by user)

                if (strpos($file, $name) !== false)
                {
                    echo $name;
                }

                // what is this needed for?
                $lines = file($filename, FILE_IGNORE_NEW_LINES);

            }
        ?>
    </body>
</html>

我同意@PeterSH 的评论:使用另一种格式,例如JSON,它具有可以搜索或使用数据库的预定义结构。

【讨论】:

  • 谢谢你的工作。但它会显示其他人的信息,比如电话和地址吗?
  • 不,你已经将它编程为echo$name。为了实现这种行为,我们需要知道您的文本文件的结构,即每一新行是一个人的记录还是使用了不同的格式。通常,为此存在几个教程,例如tutorialsmade.com/find-string-get-line-number-file-using-php
  • 谢谢,我想我找到了方法。文本文件结构是这样的:名称(一行)电话(第二行)地址(第三行),当搜索在文件中找到该名称时,我想显示所有三行。现在,如果名称不存在,我会尝试显示错误消息
  • 如果答案解决了您的问题,请标记为已接受,以帮助其他用户更快地找到解决方案!
猜你喜欢
  • 2016-05-14
  • 1970-01-01
  • 2012-02-29
  • 2013-06-12
  • 2011-02-08
  • 1970-01-01
  • 2023-03-19
  • 2019-05-15
  • 1970-01-01
相关资源
最近更新 更多