登录失败后返回尝试PHP

时间:2012-05-02 06:57:07

标签: php javascript html

我在PHP中开发登录表单 表格如下

<form method="post" action="Login.php" id="Log">
<select id="Login" name="Type">
<option value="Sel" selected="selected">Select Login type</option>
<option value="Student">Student</option>
<option value="Faculity">Faculity</option>
</select>
<div id="type">
<p id="Ch">Group Id: &nbsp;<input id="l" name="log" type="text"/></p>
<p id="Pass">Password: &nbsp; <input id="p" name="Pass" type="password" /></p>
<input id="Cond" type="Text" />
<input type="submit" value="Login"  />
<p id="Invalid" style="padding-top:.75em; color:#FF0000;">Invalid Login Or Password</p>
</form>

在post.php中我连接数据库并检查登录名和密码。

我希望在密码或登录不匹配的情况下显示<p id="invalid">标记,并且不会有任何延迟。

<p id="invalid">隐藏在开头,只有在登录或密码错误时才会显示

如何通过PHP实现此/连接数据库?

3 个答案:

答案 0 :(得分:1)

执行此操作的正确方法是将表单操作设置为包含表单的同一页面。在php页面的开头,应检查用户名/密码,以便在加载表单html时,您已经知道登录结果并显示错误。

然后,如果你想在没有页面重新加载的情况下这样做,你可以编写一个AJAX脚本并将其挂钩到提交按钮(并禁止提交表单)

这样一来,如果javascript被禁用,一切都会有效。

答案 1 :(得分:1)

我同意盖伦的回答。您应该将登录处理内容放在同一页面上。如果你不知道该怎么做,你应该这样做:

<?php
$itswrong = false;
if (isset($_POST['Pass']) && isset($_POST['log'])) {
$sql = 'SELECT * FROM your_database_name WHERE group_id = '{$_POST['log']}' AND password = SHA1('{$_POST['Pass']}')";
$result = @mysql_query($sql) or die (mysql_error());
if (mysql_num_rows($result) == 1) {
// Match was found!
// Do whatever here, e.g. session registering (starting a session), etc.
} else {
// Oh damn, it's wrong!
$itswrong = true;
// Do stuff here
}
} else {
// Move your form in here
}
?>

您需要在表单中执行的操作是将其移至// Move your form in here下,然后进行更改 这样:

<p id="Invalid" style="padding-top:.75em; color:#FF0000;">Invalid Login Or Password</p>

到此:

<?php
if (isset($_POST['Pass']) && isset($_POST['log']) && $itswrong == true) {
?>
<p id="Invalid" style="padding-top:.75em; color:#FF0000;">Invalid Login Or Password</p>
<?php
}
?>

并更改SQL查询中的值以满足您的需要。然后它会工作。我希望您在// Move your form in here下移动表单,因为如果表单未提交,则会显示。

编辑:同时更改表单标题

由此:

<form method="post" action="Login.php" id="Log">

对此:

<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>" id="Log">

这将使页面只是将数据发布到自身,使我的代码成为可能。

我不建议使用ajax,因为黑客攻击PHP然后是JavaScript相关技术更难,因为JavaScript是客户端而PHP是服务器端。

如果您还有问题,请通知我。

卢卡斯

答案 2 :(得分:0)

这是一个基本的例子;这就是我使用的,简而言之:

$entered_password = $_POST['pword'];
$php_self = $_SERVER['PHP_SELF'];

if ($password != $entered_password) {
   $error['pword'] = "<span class=\"errormess\">You entered wrong Password</span>";
} else {
    $error['pword'] = "";
}

我为所有字段执行此操作,在检查DB以获取有效答案后,如果出现错误,则在数组中输入新密钥。然后在HTML中:

<form method="post" action="<?php echo $php_self?>">
   <input type="password" name="pword" />
   <?php echo $error['pword']?>
   <input type="submit" name="submit" />
</form>

如果出现错误,则会显示在<input>下,如果没有,则表示没有显示任何内容。在我的CSS中,类errormess是红色/粗体字母。我为所有输入做这个。如果在任何字段中出现错误,我只是php_self页面,如果没有错误,那么header["Location: confirm.html"]重定向到用户登录的相应页面。

这是一个非常基本的,简而言之,但希望你能开玩笑。

希望这有帮助