2012-07-03 131 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