【问题标题】:how can i fix php var_dump error我该如何修复 php var_dump 错误
【发布时间】:2015-04-21 12:22:28
【问题描述】:

我正在尝试使用 php 来验证我的 html 表单中的 file.txt 女巫我有一个登录名和密码。 我的 php 代码中的问题是,即使变量相等,当我比较它们时,我也会得到假。唯一的例外是当我比较第一次登录和密码时,两者都为真。

这是我的代码来澄清我的问题。 所以我的 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/>"
    ?>

我的文件.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 

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

如果有人可以帮助我,我将不胜感激。并提前感谢

【问题讨论】:

  • 代码看起来像是从(或者,至少是经过考虑的)C 语言移植过来的。PHP 提供了几个非常方便的函数来处理文件和字符串。阅读file()explode(),它们可以帮助您读取文件并将行拆分为几行代码。
  • 说实话 - 你的代码很乱,很难理解发生了什么。如果您希望有人帮助您,至少要确保您的代码井井有条。

标签: php html var-dump


【解决方案1】:

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

【讨论】:

  • 好的,如果解决了问题,请采纳。
【解决方案2】:

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

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

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

您可以通过按照“随机”建议修剪 $user1 来快速解决此问题。

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

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

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

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 2015-11-05
    • 2022-10-06
    • 2021-11-30
    • 2021-06-02
    • 2017-03-31
    • 1970-01-01
    • 2023-02-16
    • 2023-01-17
    相关资源
    最近更新 更多