我正在尝试使用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/>"
?>
my 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
即使对于第三个用户行,即使变量相等,我也会收到错误。
我很感激,如果有人能帮助我的话。并提前感谢
答案 0 :(得分:0)
看起来你的$ user1已损坏了...你确定'aaa'之后没有字符吗?喜欢'aaa'?试着修剪它:trim($name) == trim($user1)
...否则,尝试比较"$name" == "$user1"
?
答案 1 :(得分:0)
您得到此结果是因为您的文本文件中有换行符。
在解析第二个用户后,管道|
之后的第一个字符是换行符,并成为$user1
的第一个字符
您在输出中没有看到,因为您正在浏览器中查看它。
您可以通过修改$user1
作为“随机”建议来快速解决此问题。
或指示您的代码跳过第一个区块中的换行符。
while(!feof($f))
{
echo "begin while <br/> ";
$p3=fgetc($f );
while( $p3 == "\n" || $p3 == "\r" )
{
$p3=fgetc( $f );
}
// ....