Php 如何确定文件文本搜索是否返回不匹配项?

Php 如何确定文件文本搜索是否返回不匹配项?,php,Php,我创建了一段代码,用于在一组文件中检查用户提交的字符串。代码搜索目录,返回文件,然后搜索文件中的字符串。用户将通过输入字段输入自定义字符串,然后单击提交按钮 我已经成功地创建了一个条件,如果用户没有输入任何信息,输出会说,您的搜索没有结果。但是,我还没有弄清楚如何创建一个条件,如果用户输入一个在文件中找不到的字符串,那么输出也将是,您的搜索不会产生结果 到目前为止,我拥有的现有条件的代码如下: if ((isset($query)) && (empty($query))) {

我创建了一段代码,用于在一组文件中检查用户提交的字符串。代码搜索目录,返回文件,然后搜索文件中的字符串。用户将通过输入字段输入自定义字符串,然后单击提交按钮

我已经成功地创建了一个条件,如果用户没有输入任何信息,输出会说,您的搜索没有结果。但是,我还没有弄清楚如何创建一个条件,如果用户输入一个在文件中找不到的字符串,那么输出也将是,您的搜索不会产生结果

到目前为止,我拥有的现有条件的代码如下:

if ((isset($query)) && (empty($query))) {
    echo "Your search produced no results";
}
搜索文件和字符串的代码可以在这里找到,这是整个PHP文件,实际上,它包括我上面发布的条件。我需要关于如何创建另一个条件的帮助,如果在任何文件中都找不到用户输入,该条件将抛出消息

如果这似乎不清楚,我道歉,并将澄清您需要的任何信息,如果您认为这会有所帮助

呼叫码

查找\u文件

检查文件


如果查询不是空的,则只执行find_files函数,如果返回false,则不指示执行操作,因此需要评估调用find_files的结果。例如,您可以执行以下操作:

if ((isset($query)) && (empty($query))) {
    echo "<p style=\"color:darkgray; font-family:arial\">Your search produced no results</p>";
}
elseif (!find_files('.'))
{
    echo "<p style=\"color:darkgray; font-family:arial\">Your search produced no results</p>";
}
在更新的条件下,对于所有失败的情况,find_files函数将返回false

或者,您可以更新find_files函数,以在出现错误时返回字符串,并为成功执行返回空字符串

if ((isset($query)) && (empty($query))) {
    echo "<p style=\"color:darkgray; font-family:arial\">Your search produced no results</p>";
}
else 
{
    $result = find_files('.');
    if (!empty($result))
    {
        echo "<p style=\"color:darkgray; font-family:arial\">".$result."</p>";
    }
}
关于您的代码的几个注释将提高可读性和代码质量:

适当的压痕将节省大量的维护时间; 使用if-else叠瓦时,始终使用花括号,即使它只是一个说明。提高可读性并避免错误。 访问过程代码中函数外部声明的变量时,请使用全局关键字。例如,要访问check_files函数中的查询变量,请使用global$query;而不是从post中再次检索变量。 除非有特殊原因,否则请使用$\u REQUEST而不是$\u POST或$\u GET。统一代码,使代码更具可读性,从GET到POST或从GET到POST的更改可以在不更改代码的情况下完成。
如果查询不是空的,则只执行find_files函数,如果返回false,则不指示执行操作,因此需要评估调用find_files的结果。例如,您可以执行以下操作:

if ((isset($query)) && (empty($query))) {
    echo "<p style=\"color:darkgray; font-family:arial\">Your search produced no results</p>";
}
elseif (!find_files('.'))
{
    echo "<p style=\"color:darkgray; font-family:arial\">Your search produced no results</p>";
}
在更新的条件下,对于所有失败的情况,find_files函数将返回false

或者,您可以更新find_files函数,以在出现错误时返回字符串,并为成功执行返回空字符串

if ((isset($query)) && (empty($query))) {
    echo "<p style=\"color:darkgray; font-family:arial\">Your search produced no results</p>";
}
else 
{
    $result = find_files('.');
    if (!empty($result))
    {
        echo "<p style=\"color:darkgray; font-family:arial\">".$result."</p>";
    }
}
关于您的代码的几个注释将提高可读性和代码质量:

适当的压痕将节省大量的维护时间; 使用if-else叠瓦时,始终使用花括号,即使它只是一个说明。提高可读性并避免错误。 访问过程代码中函数外部声明的变量时,请使用全局关键字。例如,要访问check_files函数中的查询变量,请使用global$query;而不是从post中再次检索变量。 除非有特殊原因,否则请使用$\u REQUEST而不是$\u POST或$\u GET。统一代码,使代码更具可读性,从GET到POST或从GET到POST的更改可以在不更改代码的情况下完成。 您可以使find_files函数返回一个布尔值:如果至少找到一个匹配的文件,则返回true,否则返回false。然后更新您的if条件:

if ((isset($query)) && (empty($query)) && !find_files('.')) {
    echo "<p style=\"color:darkgray...";
}
由于&&是延迟计算的,因此仅当$query不为空时才会调用find_文件。

您可以使用find_files函数返回一个布尔值:如果找到至少一个匹配的文件,则返回true,否则返回false。然后更新您的if条件:

if ((isset($query)) && (empty($query)) && !find_files('.')) {
    echo "<p style=\"color:darkgray...";
}

因为&&是延迟计算的,所以只有在$query不是空的情况下才会调用find_文件。

为什么缩进如此混乱?您的代码不可读。您缩进或不缩进代码块的方式几乎肯定会导致错误、问题等。特别是像iflong-chain检查{ifa其他长链{dosomethingmurky by time you havetenhere;}}这样的检查都在一行上。这是一个坏习惯。将您的代码分隔为人类可读的代码块。另外:如果isset$query&&empty$query,则应使用IMO如果isset$query&&empty$query。你不需要绕过每一个条件子句。此外,我取出了标记以使其更易于理解。嗨,Jared,代码实际上在我的文件中缩进了,但我总是在将代码导入此网站时遇到问题。有没有更简单的方法可以一步复制/粘贴代码?为什么您的缩进
这么糟糕?您的代码不可读。您缩进或不缩进代码块的方式几乎肯定会导致错误、问题等。特别是像iflong-chain检查{ifa其他长链{dosomethingmurky by time you havetenhere;}}这样的检查都在一行上。这是一个坏习惯。将您的代码分隔为人类可读的代码块。另外:如果isset$query&&empty$query,则应使用IMO如果isset$query&&empty$query。你不需要绕过每一个条件子句。此外,我取出了标记以使其更易于理解。嗨,Jared,代码实际上在我的文件中缩进了,但我总是在将代码导入此网站时遇到问题。有没有更简单的方法可以一步复制/粘贴代码?谢谢,TigOldBitties…哈。我确实需要添加另一个isset$query条件以等待输入,但您的答案是trickI不同意使用$\u请求而不是$\u GET或$\u POST。有一个问题。换句话说,GET请求应该提供一个资源,POST应该执行某种类型的确定性操作INSERT、DELETE等。。您是否允许通过GET登录?这可能是一个所谓的特殊原因,但在我看来,最好理解为什么两者都存在,除非完全理解,否则不要依赖像$u请求这样的拐杖。显然,将两者分开是有原因的。但在这种情况下,它并不适用。这就是建议。谢谢,蒂戈尔比特……哈。我确实需要添加另一个isset$query条件以等待输入,但您的答案是trickI不同意使用$\u请求而不是$\u GET或$\u POST。有一个问题。换句话说,GET请求应该提供一个资源,POST应该执行某种类型的确定性操作INSERT、DELETE等。。您是否允许通过GET登录?这可能是一个所谓的特殊原因,但在我看来,最好理解为什么两者都存在,除非完全理解,否则不要依赖像$u请求这样的拐杖。显然,将两者分开是有原因的。但在这种情况下,它并不适用。因此建议。