2012-07-03 102 views
4

有人可以帮助我吗?我的用户名是Blimeo,我的密码是“密码”,但是当我将我的凭证放进去时,它说“拒绝访问”就像我告诉它的那样。我100%确定我正确配置了mySQL数据库。在PHP中创建登录系统

<html> 
<body> 
<?php 
echo sha1('Blimeo'); 
if (isset($_REQUEST['attempt'])) { 

    $link = mysql_connect('localhost', 'root', 'password') or die('Could not connect to database'); 
    $user = mysql_real_escape_string($_POST['user']); 
    $password = sha1(mysql_real_escape_string($_POST['password'])); 
    mysql_select_db('test_users'); 
    $query = mysql_query(
     "SELECT user 
     FROM users 
     WHERE user = '$user' 
     AND password = '$password' 
     ") or die(mysql_error()); 
    mysql_fetch_array($query); 
    $total = mysql_num_rows($query); 
    if ($total > 0) { 
     session_start(); 
     $_SESSION['user'] = 'blah'; 
     header('location: dashboard.php'); 
    } 
    else { 
     echo '<br>Access denied!'; 

    } 
} 


?> 
<form method="post" action="login.php?attempt"> 
    Enter your username:<input type="text" name="user"/><br/> 
    Enter your password:<input type="password" name="password"/><br/> 
    <input type="submit"/> 
</form> 
</body> 
</html> 
+11

欢迎堆栈溢出!请不要将'mysql_ *'函数用于新代码。他们不再被维护,社区已经开始[弃用流程](http://goo.gl/KJveJ)。请参阅[**红框**](http://goo.gl/GPmFd)?相反,您应该了解[准备好的语句](http://goo.gl/vn8zQ)并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能决定,[本文](http://goo.gl/3gqF9)将有助于选择。如果你关心学习,[这里是很好的PDO教程](http://goo.gl/vFWnC)。 –

+0

只是抬头,mysql已过时。 mysqli是一个更好的选择。 – Amaerth

+1

为什么会有'echo sha1('Blimeo');'在开头?我有一种你想要的感觉'echo sha1('password');' – Roman

回答

0

首先,您应该在页面的第一行开始会话。

你应该更新你的代码来使用PDO语句,而不是mysql函数。这些速度较慢,容易发生。

然后,您需要检查返回的num行是否等于1且不大于0.这将是一个安全问题,因为您的脚本可以被操纵返回多于1行,然后它将验证并进入安全区域。

问题在我看来,你的密码与数据库不匹配。回应你的密码sha1,看看它是否与表匹配。

0

看起来好像脚本破坏的地方在于它正在测试mysql_num_rows()。

权利之前:

if ($total > 0) 
{ 

也许尝试添加以下行来测试并确保$总确实是> 0:

echo $total; 

其他,尝试测试MySQL查询确保它会从数据库返回至少1行。

15

UPDATE 2016

请只使用现有的登录系统,这是在几乎所有的PHP框架提供外的开箱!绝对没有理由自己写这篇文章,因为用户身份验证是一个很大的话题,编写一个严肃,稳定和现代的登录解决方案需要几个月的时间。

原文,从2012年:

如登录系统是一个安全问题,每个人都会犯同样的错误一遍又一遍,我可以明确地说:

以一个专业的剧本和合作,通过了解发生了什么的代码,哈希和盐析是什么以及会话可以遇到什么问题。

试试这个宝贝:http://php-login.net

+2

这很好,资源+1 +1 –

0
make database in mysql then run this code:: 

<table border="0" align="center" cellpadding="0" cellspacing="0" width="300"> 
<tr> 
    <td> 
     <form method="post" action="flogin.php"> 
      <table width="100%" cellpadding="7" cellspacing="0" border="0"> 
       <tr> 
        <td colspan="3"><center><strong>Insert Values In DataBase </strong></center><br /></td><br /> 
       </tr> 
       <tr> 
       <td width="30%">Name</td> 
       <td width="10%">:</td> 
       <td width="60%"><input type="text" name="name" /></td> 
       </tr> 
       <tr> 
       <td width="30%">Last Name</td> 
       <td width="10%">:</td> 
       <td width="60%"><input type="text" name="lastname" /></td> 
       </tr> 
       <tr> 
       <td width="30%">Email</td> 
       <td width="10%">:</td> 
       <td width="60%"><input type="text" name="email" /></td> 
       </tr> 
       <tr> 
       <td colspan="3"><center><input type="submit" name="submit" /></center><br /></td> 
       </tr> 
      </table> 
     </form> 
    </td> 
</tr> 
</table> 









<?php 
mysql_connect("localhost", "root", "") or die("can not connect to database"); 
mysql_select_db("flogin")or die("can not connect"); 

if (isset($_POST['submit'])){ 
    $name=$_POST['name']; 
    $lastname=$_POST['lastname']; 
    $email=$_POST['email']; 

    $query=mysql_query("INSERT INTO info(name, lastname, email)VALUES('$name', '$lastname', '$email')"); 
    if($query){ 
     echo "successful"; 
     echo "<br>"; 
     echo "<a href='insert.php'>Back to main page</a>"; 
    } 
    else { 
     echo "error"; 
    } 

    } 
?> 
<?php 
mysql_close(); 
?> 
+0

嗯,这不是一个登录页面,它是一个注册表单。它不检查是否存在这样的用户alrady。那么你应该使用参数化查询来避免SQL注入。 – martinstoeckli