2013-04-20 64 views
-1

我看了所有的地方。我無法弄清楚這一點。校驗值「1」

<?php 
session_start(); 
if (!empty($_POST[username])) 
{ 
    require_once("connect.php"); 

    // Check if he has the right info. 
    $query = mysql_query("SELECT * FROM members 
          WHERE username = '$_POST[username]' 
          AND password = '$_POST[password]'") 
    or die ("Error - Couldn't login user."); 

    $row = mysql_fetch_array($query) 
    or die ("Error - Couldn't login user."); 

    if (!empty($row[username])) // he got it. 
    { 
     $_SESSION[username] = $row[username]; 
     echo "Welcome $_POST[username]! You've been successfully logged in."; 
     exit(); 
    } 
    else // bad info. 
    { 
     echo "Error - Couldn't login user.<br /><br /> 
      Please try again."; 
     exit(); 
    } 

    if($isadmin["admin"]==1) 
{ 
echo $admin; 
} 
else 
{ 
} 

} 

$admin = <<<XYZ 
<div id="admintab"> 
Admin &nbsp;&#0187; 
<div id="admin"> 
ADMIN PANEL 
<div id="exitadmin"> 
</div> 
<div id="artistline" /> 
</div> 
</div> 
XYZ; 

?> 

我知道$admin的值正在工作。我已經測試過它。基本上,我有一個註冊系統。默認情況下,它將您的管理員值設置爲'0'。但是,讓我們說我想添加一個管理員。我通過mysql將'0'更改爲'1'。我想知道如何讓PHP的查找用戶設置爲「1」是在數據庫中(列名:admin)其管理價值,並且只顯示管理面板給他們。

+0

您在其中定義'$ isadmin [「管理員」]' – 2013-04-20 07:51:54

+0

您的代碼容易受到SQL注入,跨站腳本攻擊和密碼不被哈希。您已經設法展示瞭如何不實現登錄系統的完美例子。 – eggyal 2013-04-20 08:00:50

回答

0

您需要更改if($isadmin["admin"]==1)if($row['admin'] == 1) - - 你可以離開了== 1的一部分,如果1 & 0是唯一的答案爲1將永遠是真,0將是錯誤的。

Obligitarily,我需要一提的是,在純文本數據庫存儲密碼是一個壞主意,你應該是最起碼散列他們,你保存在他們面前。類似$password = hash('sha256', $salt.$_POST['password'])在註冊和登錄階段。

我還要指出的是,你不應該喂裸值與查詢數據庫,您不必擔心密碼,如果你哈希處理,但如果你不這樣做,你需要做的用戶名無論如何,否則任何人都可以運行在你的數據庫SQL查詢:

$username = mysql_real_escape_string($_POST['username'])

+0

哪個最好'md5'或'sha256'? – 2013-04-20 08:12:41

+0

如果你運行一次,'sha256'遠遠勝過'md5'。非常安全的系統使用像'bcrypt'這樣的東西,它是基於blowfish(我認爲),但增加了硬化和多重哈希。 – 2013-04-20 08:20:48

+0

@Oshwott,但根據我md5不能解密 – 2013-04-20 08:21:49

0

首先,我有義務指出,沒有過濾$ _ POST(和$ _GET和$ _COOKIE等)是非常危險的,因爲SQL注入。其次,變量$ isadmin在你定義它之前不會神奇地存在。

我會建議設計一個功能更強大的用戶組系統,但只是爲了回答這個問題,您要檢查的變量是$ row [「is_admin」],因爲is_admin是表中的有效列。另外,如果($ row [「is_admin」] == 1)不需要做 - 1在PHP中的計算結果爲TRUE。

1

你爲什麼用

if($isadmin["admin"]==1)

你有

$row = mysql_fetch_array($query)

所以轉換

if($isadmin["admin"]==1)

if($row["admin"]==1)

你應該插入前檢查值和選擇數據,還可以使用

mysql_real_escape_string($_POST['username'])

使SQL注入不適