我正在使用.txt文件而不是数据库进行登录功能的php分配,但我在这里遇到了某种问题。据说是在一个不存在的详细信息键后显示“无效的电子邮件或密码”,但是当页面加载时,msg默认显示,下面是我的代码
<?php
$lines= file("customers.txt");
$matchFound=false;
$errmsg = 'Invalid email or password';
for($i=0;$i<count($lines);$i++)
{
if ($i!=0)
{
$line=trim($lines[$i]);
$cells=explode("\t",$line);
$_SESSION['email'] = isset($_POST['email'])? $_POST['email'] : null;
$_SESSION['password'] = isset($_POST['password']) ? $_POST['password'] : null;
if ($_SESSION['email']==$cells[2] && $_SESSION['password']==$cells[3])
{
$matchFound=true;
break;
}
}
}
if ($matchFound == true)
{
header('Location: login2.php');
}
else
{
echo $errmsg;
}
?>
答案 0 :(得分:1)
这是因为您没有检查用户是否正确提交了表单输入。默认情况下,$matchFound
的值为FALSE
,并且在运行脚本时将始终显示错误消息。
为表单提交按钮指定name
属性,然后添加if
块以确保表单已正确提交:
if (isset( $_POST['submitButton'] )) {
# code...
}
这样,如果未收到用户输入,则if
块内的代码将无法运行,并且您可以避免每次加载页面时都显示错误。
此外,您错过了脚本顶部的session_start()
语句。如果您希望会话正常工作,则需要这样做。
答案 1 :(得分:0)
尝试:
if ($matchFound == true)
{
header('Location: login2.php');
}
else if(isset($_POST['email']))
{
echo $errmsg;
}
您还需要session_start才能使用$ _SESSION数组