如何使用PHP将登录表单错误返回到同一页面?

如何使用PHP将登录表单错误返回到同一页面?,php,html,forms,login,Php,Html,Forms,Login,我对PHP比较陌生,为了找到这个问题的答案,我在互联网上花了很多时间。我看过无数的例子,但人们的登录系统似乎与我的非常不同,我很难破译它 以下是我目前的代码: index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.o

我对PHP比较陌生,为了找到这个问题的答案,我在互联网上花了很多时间。我看过无数的例子,但人们的登录系统似乎与我的非常不同,我很难破译它

以下是我目前的代码:

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Video for Education Log In</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>



<body>
<div id="wrapper">
<div id="header">
    <div id="logo">
        videoedu.edu    </div>
    <div id="menu">
        <ul>
            <li><a href="account.html" class="menua">Create Account</a></li>
            <li><a href="about.html" class="menua">About Us</a></li>
        </ul>
    </div>
</div>
<br><br><br><br>
<div id="page">

<div id="content">
    <h2>Video for Education helps you connect and share with the videos in your life.</h2>
    <h3>Upload Share Create Using video for your education purposes. Lecturers Welcome
    Upload Share Create Using video for your education purposes. Lecturers Welcome
    Upload Share Create Using video for your education purposes. Lecturers Welcome</h3>
    <div class= "form">
    <form name="login" method="post" action="checklogin.php">
        Username: <input type="text" name="myusername" id="myusername" class="textb"/><br />
        Password  :  <input type="password" name="mypassword" id="mypassword" class="textb"/><br />
        <br>
        <input type="submit" name="login" value="Login" id="login" class="texta" />
    </form>
    </div>
</div>
</div>
</div>
</body>
</html>
…但它只是一直在页面底部显示其中一个错误(“错误的用户名或密码”)


我希望这样,如果用户输入错误的用户名或密码,或将必填字段留空,错误将在同一页面上弹出,而不是转到新的丑陋的空白PHP页面,错误消息位于左上角。

您希望将index.html页面设为PHP页面,并让表单提交到自己,即到index.php。通过这种方式,您的索引页面可以对表单值进行登录检查,并适当地显示页面的输出,或者在所有内容都验证时使用标题重定向


很难判断您的尝试在没有完整上下文的情况下所产生的效果,但情况的要点是您需要表单提交给自己并处理它的登录处理。

在checklogin.php中,不要重复错误,而是使用以下命令:

die(header("location:index.html?loginFailed=true&reason=password"));
或者类似的,在index.html页面中,让PHP生成html消息,如下所示:

    <input type="submit" name="login" value="Login" id="login" class="texta" /><br /><br />
    <?php $reasons = array("password" => "Wrong Username or Password", "blank" => "You have left one or more fields blank."); if ($_GET["loginFailed"]) echo $reasons[$_GET["reason"]]; ?>
</form>
echo "<script language=\"JavaScript\">\n";
echo "alert('Username or Password was incorrect!');\n";
echo "window.location='login.php'";
echo "</script>";



另外,使用
标题重定向页面时,请确保
die()
exit()
,否则脚本的其余部分将继续运行。

如果数据无效,请重定向回页面。将错误放入会话并显示在第页:

e、 g:


看起来您希望/需要将其与jQuery或其他Javascript/AJAX库集成 使事物更体面。jQuery有一个表单验证插件,很容易集成到项目中(显然jQuery库是最低要求)。 和 .
您也可以考虑使用PHP框架,它也有一个非常有用的形式验证库。CodeIgniter一开始很可怕(就像所有基于MVC的编程库/框架一样),但它是值得的。您可以在netTuts+上观看一些教程,他们创建了一系列教程,名为,并非来自最新版本,但易于调整。

在checklogin.php中,如果用户输入了错误的用户名或密码,请使用以下代码:

    <input type="submit" name="login" value="Login" id="login" class="texta" /><br /><br />
    <?php $reasons = array("password" => "Wrong Username or Password", "blank" => "You have left one or more fields blank."); if ($_GET["loginFailed"]) echo $reasons[$_GET["reason"]]; ?>
</form>
echo "<script language=\"JavaScript\">\n";
echo "alert('Username or Password was incorrect!');\n";
echo "window.location='login.php'";
echo "</script>";
echo“\n”;
echo“警报('用户名或密码不正确!');\n”;
echo“window.location='login.php';
回声“;

它将在同一页面(登录页面)上弹出错误消息,而不是进入空白的PHP页面。

使用JavaScript检查所需空白更容易(jQuery或其他框架工作良好)。在回答错误的用户名或密码消息之前,您需要在哪个文件(可能是div)中显示该消息?澄清这一点,我会发布我的答案。谢谢大家,我现在正在审查你们的所有答案,当我得到一些工作时,我会发布反馈!我对PHP非常陌生,所以弄清楚你的修复程序在做什么需要一些时间。这是一个很好的解决方案。它既与PRG兼容,又避免将错误信息附加到查询字符串中。谢谢大家,我现在正在查看您的所有答案,当我发现一些有用的东西时,我会发布反馈!我对PHP非常陌生,因此要弄清楚您的修复程序正在做什么需要一些时间。
header
之后的脚本的其余部分不一定会继续运行(通常不会),但技术上可以忽略更改的header而不重定向(这会导致脚本继续运行)。因此,是的,强烈建议在设置标题后立即停止脚本。Hi-Travesty3。我理解您使用数组输出错误的概念,这取决于导致错误的原因,但是在if($\u GET[“loginFailed”]我收到一个错误,说loginFailed是一个未定义的索引。这个条件从何而来?这是一个PHP通知,而不是一个错误。这意味着您在PHP.ini中设置了错误报告设置以显示通知。请尝试
if(isset($\u GET[“loginFailed”])
。仍然没有!loginFailed在哪里条件来自?如果(isset($_GET[“loginFailed”])检查是什么?如何检查?谢谢大家,我现在正在查看您的所有答案,当我发现一些问题可行时,我会发布反馈!我对PHP非常陌生,所以弄清楚您的修复程序正在做什么需要一些时间。这是可行的(我将其用作临时解决方案).但我需要一个比这个更优雅的解决方案。@AlpiGC你说的优雅解决方案是什么意思?
    <input type="submit" name="login" value="Login" id="login" class="texta" /><br /><br />
    <?php $reasons = array("password" => "Wrong Username or Password", "blank" => "You have left one or more fields blank."); if ($_GET["loginFailed"]) echo $reasons[$_GET["reason"]]; ?>
</form>
<?php if(isset($_SESSION['Login.Error'])  { echo $_SESSION['Login.Error'];
 unset($_SESSION['Login.Error']); } ?>
<form ....
 $_SESSION["Login.Error"] = 'Invalid credentials';//redirect back to your login page
echo "<script language=\"JavaScript\">\n";
echo "alert('Username or Password was incorrect!');\n";
echo "window.location='login.php'";
echo "</script>";