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 »
<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
,但它的开销确实很高。