【问题标题】:php - search TXT file by users $_post from formphp - 通过用户 $_post 从表单中搜索 TXT 文件
【发布时间】:2014-04-03 22:56:25
【问题描述】:

我有一个小问题。

我有一个 txt 文件,我可以写用户名。 没关系!

但我试图通过用户输入 ($_POST['username']) 搜索 txt 文件。 我让用户一直不存在..

谁能给我一些建议?

我的 txt 文件包含:
管理员
谢尔顿
一分钱

代码如下:

$user = $_POST['username'];

function CreateAccount($user){

if($_POST['reg']){

    $file = 'test.txt';
    $data = $user ."\n";
    fopen($file, 'a');
    file_put_contents($file, $data, FILE_APPEND);

}


}

function userSearch($user){

if($_POST['read']){

    $file = 'test.txt';
    $searchUser = $user;
    fopen($file, 'r');
    $content = file_get_contents($file);

    if(strpos($content, $user)){
        echo "exist";
    }else{
        echo "nope..";
    }

}
}

【问题讨论】:

  • 对我来说似乎是 db 的工作
  • 这只是一个关于如何通过用户帖子读取文本文件的小实验。
  • 我可能会使用file(),然后是in_array()我自己
  • 我也会使用 Dagon 的方法,但是在这种情况下为什么不使用 strstr()?
  • 您也不必在 file_get_contents 之前打开文件

标签: php forms file post input


【解决方案1】:

strpos 的字符串位置从 0 而不是 1 开始。因此,如果位置为 0,它将等同于 false。

对 if 语句的简单修复可能会有所帮助

if(strpos($content, $user) !== FALSE){

PHP strpos

此函数可能返回布尔值 FALSE,但也可能返回计算结果为 FALSE 的非布尔值。请阅读有关布尔值的部分以获取更多信息。使用 === 运算符测试此函数的返回值。

【讨论】:

  • 为了 100% 的准确度,然后检查布尔值 false 代替:if(strpos($content, $user) !== false)
  • 可以,我几年前刚养成检查它的习惯 > -1
  • 我尝试了 if(strpos($content, $user) !== false) 但我仍然得到“nope..”
  • 查看phpfiddle 以获取示例。我将读取的文件替换为文件中内容的字符串表示形式。
  • 感谢您的回答!它适用于字符串表示,但我希望它适用于用户从表单中发布的名称。
【解决方案2】:

t.txt:

管理员
谢尔顿
伦纳德

t.php

<?php
$file = "t.txt";
$name = "Sheldon";
$string = file_get_contents($file);
$array = file($file, FILE_IGNORE_NEW_LINES);

if(in_array($name,$array)){
    echo "found ";
}else{
    echo "nope ";
}

if(strstr($string,$name)){
    echo "found ";
}else{
    echo "nope ";
}
?>

输出: found found

【讨论】:

  • 可能是因为这只是您提供一些代码,而不是结构化答案或信息性帮助。此外,如果文件只包含 php,最好避免关闭 php 标签,以避免空格注入。您的回答也替换了 OP 的代码,并且对他们的原始代码没有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
相关资源
最近更新 更多