2013-04-20 93 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注入不适