用户转到网址:
http://mywebsite.com/index.php?company=walmart
页面加载后,我想检查注册用户是否可以访问此人。为此,我在会话中检查用户的数组保存。
Array ( [0] => ebgames [1] => walmart )
在每个循环中使用if/else statement
我希望显示消息或重定向。
$_SESSION['accessto']
保存数组。
我尝试了这个,但没有运气。
$companyname = $_GET['company'];
$accessto = $_SESSION['member_accessto'];
foreach ($accessto as $key => $val) {
if ($val == $companyname) {
echo 'You have access to this company page of "'.$companyname.'"';
} else {
header('Location:/login');
}
}
print_r($_SESSION['member_accessto']);
给了我以下
Array ( [0] => ebgames [1] => walmart )
答案 0 :(得分:2)
使用in_array
:
if (in_array($companyname, $_SESSION['member_accessto'])) {
echo "You have access to this company page of $companyname";
} else {
header('Location: /login');
}
代码的问题在于,即使匹配也显示标题,因为公司名称不会匹配数组的其他元素。
答案 1 :(得分:1)
您正在查看单个值是否在数组中。使用in_array
。
但请注意,案例很重要,任何前导或尾随空格都是如此。使用var_dump
来查找字符串的长度,看看它们是否合适。
答案 2 :(得分:1)
我首先要确保member_accessto
已设置且不为空。
除此之外,您的代码已经正确。
session_start(); // needless to say ...
if (isset($_GET['company'])) {$companyname = $_GET['company'];}
else {header('Location:/404');}
if (!isset($_SESSION['member_accessto']) || empty($_SESSION['member_accessto'])) {
header('Location:/login');
exit;
}
$accessto = $_SESSION['member_accessto'];
foreach ($accessto as $site) {
if ($site == $companyname) {
echo "You have access to this company page of $site.";
} else {
header('Location:/login');
exit;
}
}
或
if (in_array($companyname, $accessto)) {
echo "You have access to $companyname";
}
编辑:感谢您的评论和@Barmar的回答,看起来这取决于您的网站逻辑。如果可以在$ _GET请求中加载多个公司,则上述逻辑意味着您需要访问您尝试访问的每个站点。