Php 检查mysql表上的值并选择设置为“0”的值;1“;

Php 检查mysql表上的值并选择设置为“0”的值;1“;,php,mysql,Php,Mysql,我到处看了看。我想不出来 <?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[usern

我到处看了看。我想不出来

<?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;

?>

首先,我有义务指出,由于SQL注入,不过滤$\u POST(以及$\u GET和$\u COOKIE等)是非常危险的。其次,在定义变量$isadmin之前,它不会神奇地存在

我建议设计一个功能更强大的用户组系统,但为了回答这个问题,您要检查的变量是$row[“is_admin”],因为is_admin是表中的有效列。此外,如果($row[“is_admin”]==1)-1在PHP中的计算结果为TRUE,则无需执行此操作

你为什么用

if($isadmin[“admin”]==1)

像你一样

$row=mysql\u fetch\u array($query)

所以转换

if($isadmin[“admin”]==1)

if($row[“admin”]==1)

您应该在插入前检查值,选择数据并使用

mysql\u real\u escape\u字符串($\u POST['username'])


因此,sql注入不适用

您需要将
if($isadmin[“admin”]==1)
更改为
if($row['admin']==1)
——如果1和0是唯一的答案,则可以省略
==1
部分,因为1始终为真,0为假

恕我直言,我需要指出的是,在数据库中以纯文本形式存储密码是一个坏主意,在存储密码之前,至少应该对密码进行哈希运算。类似于注册和登录阶段的
$password=hash('sha256',$salt.$\u POST['password'])

我还应该指出,您不应该使用查询将裸值输入到数据库中,如果您对密码进行哈希运算,则不必担心密码问题,但如果您没有,则需要这样做,并且无论如何都需要使用用户名,否则任何人都可以在您的数据库中运行SQL查询:


$username=mysql\u real\u escape\u string($\u POST['username'])

在您定义的
$isadmin['admin']
中,您的代码易受SQL注入攻击,XSS攻击和密码不会被散列。您已经成功地展示了如何不实现登录系统的完美示例。如果只运行一次,
md5
sha256
sha256
md5
好得多。非常安全的系统使用类似于
bcrypt
的东西,这是基于blowfish(我认为)的,但添加了强化和多个哈希。@Oshwott但据我所知,md5不能被解密,这是事实,它是单向哈希函数。然而,对md5进行暴力攻击要比对sha256或bcrypt容易得多。我个人总是在生产环境中使用
bcrypt
,但它的开销确实很高。