关于PHP fgets和explode

想做一个简单的PHP登陆界面是task2.html都可以不用管主要是PHP文件已知一个passwd.txt上是用户帐号密码user1:passwd1user2:passw... 想做一个简单的PHP登陆 界面是task2.html都可以不用管
主要是PHP文件 已知一个passwd.txt上是用户帐号密码
user1:passwd1
user2:passwd2
user3:passwd3
这样的形式给出的 这个PHP文件能判断passwd.txt里的信息就可以了

<?php
$passwd = $_POST['passwd'];
$user = $_POST['user'];

if (!checkPasswd($passwd,$user)){
echo "<h2> Wrong password $user . Try again.</h2>";
include('task2.html');
}
else{
echo "<h2> Welcome on board $user !</h2>";
}

function checkPasswd($passwd,$user){
if(!$fh = fopen("passwd.txt", "r")) return false;
while(!feof($fh)){
$line = trim(fgets($fh));
//your code goes below this line
$x = explode(":",$line);
if($user == $x[0] && $passwd == $x[1])
return true;
else
return false;
}
fclose($fh);
return false;
}
?>
</body>
</html>
我是想用 : 把帐号和密码分开来对比但实现不了不知道哪里错了 希望高手帮帮忙
展开
 我来答
kakashi9bi
2009-08-16 · 超过31用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:94.9万
展开全部
错误位置:
if($user == $x[0] && $passwd == $x[1])
return true;
else
return false;//这样写的话当密码或用户名不对的话就会跳出这个循环了。

错误说明:
因为return是函数返回值的标志,也是终止一个函数的标志。
修改如下,加注释的是修改的。

修改后代码:
<?php
$passwd = $_POST['passwd'];
$user = $_POST['user'];

if (!checkPasswd($passwd,$user)){
echo "<h2> Wrong password $user . Try again.</h2>";
include('task2.html');
}
else{
echo "<h2> Welcome on board $user !</h2>";
}

function checkPasswd($passwd,$user){
if(!$fh = fopen("passwd.txt", "r")) return false;
$flag = 0;//这是新增的,用于标志是否找到正确密码
while(!feof($fh)){
$line = trim(fgets($fh));
//your code goes below this line
$x = explode(":",$line);
if($user == $x[0] && $passwd == $x[1])
{
$flag = 1;//新增
break;//新增
}//去掉return true;
else
$flag = 0;//新增
//去掉return false;
}
fclose($fh);
return $flag;//修改返回flag
}
?>

这是个学习PHP的好地方,有人热心回答问题,还有每周免费在线PHP课程观看,和老师0接触哦。http://www.365php.net/bbs/?fromuid=90
helen5106
2009-08-15 · TA获得超过1260个赞
知道小有建树答主
回答量:2015
采纳率:0%
帮助的人:1081万
展开全部
试试这个函数:
function checkPasswd($passwd,$user){
$fh = fopen("passwd.txt", "r");
if($fh) {
while(!feof($fh)){
$line = trim(fgets($fh));
//your code goes below this line
$x = explode(":", $line);
if($user == $x[0] && $passwd == $x[1]) {
return true;
} else {
continue;
}
}
fclose($fh);
return false;
}
else {
return false;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友003d0c83c
2009-08-16 · TA获得超过333个赞
知道小有建树答主
回答量:256
采纳率:0%
帮助的人:383万
展开全部
你的错误有两点,一是读取方法太复杂,
建议直接用读取文章内容为数组的file函数,这样每一行就是一个数组元素。
二是你忘了去掉换行符,windows里的一般是\r\n。
$array=file("passwd.txt");
foreach($array as $row){
$x=explode(":\r\n",$row);
if($user == $x[0] && $passwd == $x[1])
return true;
else
return false;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lishifan
2009-08-16 · TA获得超过350个赞
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:388万
展开全部
function checkPasswd($passwd,$user)
{
if(!$fp = fopen("passwd.txt", "r")) return false;
while ($row=trim(fgetss($fp))) //从文件中读一行
{
if($passwd.":".$user==$row)
{
fclose($fp);
return true;
}
}
fclose($fp);
return false; //如果所有行都不匹配,则视为不正确
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式