编辑:作业工作。请不要提及外部图书馆或处理安全问题的复杂程序。
我想实现一个非常基本的登录页面,将用户的用户名和密码与存储在数据库中的用户名和密码进行比较(使用MySql),然后重定向到另一个仅供登录用户使用的网页。我看过这两个教程:
http://frozenade.wordpress.com/2007/11/24/how-to-create-login-page-in-php-and-mysql-with-session/
http://www.phpro.org/tutorials/Basic-Login-Authentication-with-PHP-and-MySQL.html
我尝试使用这两种技术。第二个一直给我服务器错误,第一个给我登录页面,并没有返回任何错误,但是当按下提交按钮时,它只是没有做任何事情。我几乎一字不差地跟着它,只改变文件名和一些数据库列名以适应我原先存在的东西,但无济于事。这个登录页面给了我一个全能的头痛,我真的想让这个完成并完成。
登录页面
<?php
// Inialize session
session_start();
// Check, if user is already login, then jump to secured page
if (isset($_SESSION['username'])) {
header('Location: RecordEvents.php');
}
?>
...跳过所有不必要的部分
<h1>Login</h1>
<?php
if(!empty($errorMessage))
{
echo("<p>There was a problem with your login:</p>\n");
echo("<ul>" . $errorMessage . "</ul>\n");
}
?>
<form action="loginscript.php" method="post">
Username:
<input type="text" name="username" /> </br>
Password:
<input type="password" name="password" /> </br>
<p>
<!--the submit button with an altered value. once selected the validation script will run-->
<input type="submit" name="login" value="Allons-y!" />
</p>
</form>
CONFIG.INC(我首先尝试命名文件.php,但没有区别。)
<?php
$hostname = 'localhost';
$dbname = 'clubresults';
$username = 'newuser';
$password = 'password';
// Let's connect to host
mysql_connect($hostname, $username, $password) or DIE('Connection to host is failed, perhaps the service is down!');
// Select the database
mysql_select_db($dbname) or DIE('Database name is not available!');
?>
LOGINSCRIPT.PHP
<?php
// Inialize session
session_start();
// Include database connection settings
include('Inlcude\config.inc');
// Retrieve username and password from database according to user's input
$login = mysql_query("SELECT * FROM admin_passwords WHERE (Username = '" . mysql_real_escape_string($_POST['username']) . "') and (Password = '" . mysql_real_escape_string(md5($_POST['password'])) . "')");
// Check username and password match
if (mysql_num_rows($login) == 1) {
// Set username session variable
$_SESSION['username'] = $_POST['username'];
// Jump to secured page
header('Location: RecordEvents.php');
}
else {
// Jump to login page
header('Location: Login.php');
}
?>
RECORDEVENTS.PHP
<?php
// Inialize session
session_start();
// Check, if username session is NOT set then this page will jump to login page
if (!isset($_SESSION['username'])) {
header('Location: Login.php');
}
Include ('Include\eventscript.php');
?>
......等等等等
<?php
if(!empty($errorMessage))
{
echo("<p>There was an error with your form:</p>\n");
echo("<ul>" . $errorMessage . "</ul>\n");
}
?>
<form action="RecordEvents.php" method="post">
Name: <input type="text" name="EventName" value="<?php print $varEventname;?>" /> </br>
Date: <input type="text" name="EventDate" placeholder="yyyy-mm-dd hh:mm:ss" value="<?php print $varEventdate;?>" /> </br>
Location: <input type="text" name="Location" value="<?php print $varLocation;?>" /> </br>
<p>
<!--the submit button with an altered value. once selected the validation script will run-->
<input type="submit" name="formSubmit" value="Allons-y!" />
<!--the reset button to empty the form and start again-->
<input type="reset" name="formReset" value="Try Again" />
</p>
</form>
db称为clubresults,我使用的表是admin_passwords,列名是:Username,Password。
有人能发现我明显犯的错误吗?
答案 0 :(得分:1)
检查你的拼写。
include('Inlcude\config.inc');
请看这个。
$login = mysql_query("SELECT * FROM admin_passwords WHERE username = '" .mysql_real_escape_string($_POST['username']) . "' and password = '" .mysql_real_escape_string($_POST['password']) . "'");
我删除了md5()函数。
http://php.net/manual/en/function.md5.php
当您的查询中有md5时,会发生这种情况。 让我们说你输入ff。
用户名=用户名 密码=密码
你的查询将是这样的,你的$ _POST ['密码']中有md5()。
SELECT * FROM admin_passwords WHERE username = 'username' and password = '5f4dcc3b5aa765d61d8327deb882cf99'
请参阅上面的链接以获取更多信息!
答案 1 :(得分:0)
我看到的第一件事是
include('Inlcude\config.inc');
显然,路径是错误的。此外,清理您的代码。例如。 include
不需要括号,应始终以小写字母书写,如
include 'Include\config.inc';
接下来,您确定,您的数据库中只有一个条目吗?因为它被定义为仅加载
上的记录修复脚本mysql_num_rows($login) == 1
有时在开发过程中,您可能会有两行相同的行。