如何在foreach循环中显示消息?

时间:2013-12-31 22:03:14

标签: php arrays

用户转到网址:

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 ) 

3 个答案:

答案 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请求中加载多个公司,则上述逻辑意味着您需要访问您尝试访问的每个站点。