我有一个问题,我不知道如何解决它。 我尝试使用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。
我知道代码不是那么好,但我还在学习。所以,如果你能给出一些提示:)
感谢您的回答
答案 0 :(得分:3)
首先,使用ternary operator进行内联comperison并阅读PHP中的comparison operators
其次,不要写几个用分号分隔的字符串。 PHP中的Semicolon表示教学结束,最好在新行中编写每一行,因此更容易阅读和维护代码
第三,在SQL查询中始终escape data并检查变量类型,然后将其索引为数组(is_array,isset)
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。 我真的很抱歉浪费时间。