我该如何修复 php var_dump 错误

how can i fix php var_dump error

我正在尝试使用 php 验证我的 html 在 中形成一个 file.txt 我有一个登录名和密码。 我的 php 代码中的问题是,即使变量相等,当我比较 them.The 时我也会得到 false,唯一的例外是当我比较第一个登录名和密码时,我都得到 true。

这是我的代码来澄清我的问题。 所以我的 html 表单调用此 php 页面代码。

<?php
echo " begin <br/>";
    $name=$_GET['username'];
    $password=$_GET['password'];
        echo "$name <br/>";
        echo "$password <br/>";
         $f = fopen("file.txt", "r");
         $res="0";  
            while(!feof($f))
           { echo "begin while <br/> ";
                $p3=fgetc($f );
                 while($p3!="|" && !feof($f) )
                 {
                  $user1=$user1.$p3;    
                  $p3=fgetc($f); 

                 } 
                  $p1=fgetc($f);
                    while($p1!="|" && !feof($f))
                     { $pass=$pass.$p1; 
                       $p1=fgetc($f); 
                     }
                     $p2=fgetc($f);
                    while($p2!="|" && !feof($f))
                      {
                        $q=$q.$p2;  
                        $p2=fgetc($f);  
                      }
                      var_dump($user1 == $name);
                    var_dump($password == $pass);
                    echo "<br/> $user1 <br/>";
                    echo "$pass <br/>";
                    echo "compare <br/>";
                    echo "$name <br/>";
                    echo "$password <br/>";
                 if( $name == $user1 && $password == $pass )
                   {  echo "succeeded <br/>";
                      echo "droit: $q <br/>";
                      echo "$res <br/>";
                        $res="1";
                        echo "$res <br/>";
                        break 2;
                    }

                    unset($p3);
                    unset($p1);
                    unset($p2);
                    unset($user1);
                    unset($pass);
                    unset($q);
             }
    fclose($f);
    if($res == "1")
        { echo "ok <br/>";}
    else 
        { echo " error <br/>";}

  echo " fin <br/>"
    ?>

我的file.txt

abc|abc|87|
aaa|ccc|45|
ghi|ghi|67

现在如果我输入登录名 abc 密码 abc ,我的页面就会得到这个结果

 begin
abc
abc
begin while
bool(true) bool(true)
abc
abc
compare
abc
abc
succeeded
droit: 87
0
1 

现在,如果我输入登录名 aaa 和密码 ccc,我会得到

begin
aaa
ccc
begin while
bool(false) bool(false)
abc
abc
compare
aaa
ccc
begin while
bool(false) bool(true)
aaa
ccc
compare
aaa
ccc
begin while
bool(false) bool(false)
ghi
ghi
compare
aaa
ccc
error
fin 

甚至对于第三个用户行,即使变量相等,我也会收到错误消息。

如果有人能帮助我,我将不胜感激。提前致谢

看起来你的 $user1 已损坏...你确定 'aaa' 之后没有字符吗?喜欢 'aaa ' 吗?尝试 trim 它:trim($name) == trim($user1)...否则,尝试比较 "$name" == "$user1" ?

你得到这个结果是因为你的文本文件中有换行符。

当第二个用户被解析时,管道 | 之后的第一个字符是换行符,成为 $user1

的第一个字符

您没有在输出中看到它,因为您正在浏览器中查看它。

您可以按照 "Random" 的建议修剪 $user1 来快速解决这个问题。

或者指示您的代码在第一个块中跳过换行符。

while(!feof($f))
{
    echo "begin while <br/> ";

    $p3=fgetc($f );
    while( $p3 == "\n" || $p3 == "\r" )
    {
        $p3=fgetc( $f );
    }
    // ....