使用MySQL创建一个php变量

时间:2016-12-02 13:39:44

标签: php mysql

我有一个问题,我不知道如何解决它。 我尝试使用php变量创建一个简单的if语句。变量包含MySQL SELECT值。

$adminarray = $mysqli->query("SELECT admin FROM user WHERE name LIKE '$username'");

$currentuser = mysqli_fetch_row($adminarray);

$adm = $currentuser[0];


echo "<form action='?delete1' method='post' style='visibility:";if ($adm = 1){echo "block";}else{echo "hidden";}echo "'>

我尝试隐藏非管理员按钮($ adm = 0),但它无效。 IF Statemant始终返回“true”。即使$ adm为0。

我知道代码不是那么好,但我还在学习。所以,如果你能给出一些提示:)

感谢您的回答

2 个答案:

答案 0 :(得分:3)

首先,使用ternary operator进行内联comperison并阅读PHP中的comparison operators

其次,不要写几个用分号分隔的字符串。 PHP中的Semicolon表示教学结束,最好在新行中编写每一行,因此更容易阅读和维护代码

第三,在SQL查询中始终escape data并检查变量类型,然后将其索引为数组(is_arrayisset

Finnaly,使用IDE(PhpStorm,NetBeans等),它将帮助您防止出现此类错误

$username = $mysqli->real_escape_string($username);
$adminarray = $mysqli->query("SELECT admin FROM user WHERE name LIKE '$username'");

$currentuser = mysqli_fetch_row($adminarray);

$adm = is_array($currentuser) ? $currentuser[0] : null;
$visibility = $adm == 1 ? "block" : "hidden";

echo "<form action='?delete1' method='post' style='visibility:$visibility'>";

值得注意的是,在使用参数时,预准备语句优于纯SQL查询。在这种情况下,代码看起来会略有不同:

$stmt = $mysqli->prepare("SELECT admin FROM user WHERE name LIKE ?");
$stmt->bind_param('s', $username);
$stmt->execute();
$row = $stmt->get_result()->fetch_row();
$visibility = (is_array($row) && $row[0] == 1) ? "block" : "hidden";

echo "<form action='?delete1' method='post' style='visibility:$visibility'>";

有关预备语句的更多详细信息,请访问:Prepared Statements

答案 1 :(得分:0)

好的,我现在觉得很蠢。 我写了$ adm = 1而不是$ adm == 1。 我真的很抱歉浪费时间。