关于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>
我是想用 : 把帐号和密码分开来对比但实现不了不知道哪里错了 希望高手帮帮忙 展开
主要是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>
我是想用 : 把帐号和密码分开来对比但实现不了不知道哪里错了 希望高手帮帮忙 展开
4个回答
展开全部
错误位置:
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
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
展开全部
试试这个函数:
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;
}
}
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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的错误有两点,一是读取方法太复杂,
建议直接用读取文章内容为数组的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;
}
}
建议直接用读取文章内容为数组的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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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; //如果所有行都不匹配,则视为不正确
}
{
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; //如果所有行都不匹配,则视为不正确
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询