0

我正在用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 连接数据库?

4

3 回答 3

1

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

然后,如果您想在不重新加载页面的情况下执行此操作,请编写一个 AJAX 脚本并将其连接到提交按钮(并禁用表单提交)

这样,如果禁用了 javascript,一切仍然有效。

于 2012-05-02T07:04:30.413 回答
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 是服务器端。

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

卢卡斯

于 2012-05-02T07:21:08.280 回答
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'] = "";
}

在检查数据库以获得有效答案后,我对所有字段执行此操作,如果出现错误,则在数组中输入一个新键。然后在 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"]重定向到登录用户的相应页面。

简而言之,这是一个非常基本的示例,但希望您能从中获得乐趣。

希望这可以帮助

于 2012-05-02T07:28:43.667 回答