使用php创建登录页面 - 无法查看错误所在

时间:2012-06-01 07:00:44

标签: php mysql login

编辑:作业工作。请不要提及外部图书馆或处理安全问题的复杂程序。

我想实现一个非常基本的登录页面,将用户的用户名和密码与存储在数据库中的用户名和密码进行比较(使用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。

有人能发现我明显犯的错误吗?

2 个答案:

答案 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

有时在开发过程中,您可能会有两行相同的行。