限制对页面的访问 - PHP

时间:2015-12-03 12:06:42

标签: php

我在网址中有3个$_GET个变量的页面;

http://www.example.co.uk/search?location=asokoro&day=today&time=12%3A00

location = string, day = string, time = time eg 12:00, 13:15

我想阻止访问以下条件的页面。

如果没有收到变量,则阻止访问--- 已完成

if(!isset($_GET['location']) || !isset($_GET['day']) || !isset($_GET['time'])) {
    header("Location: http://www.example.co.uk");
    exit;
}

如果不支持location,则阻止访问--- 已完成

$locations = Array('loc1','loc2');
if (!in_array($_GET['location'], $locations)) {
    header("Location: http://www.example.co.uk");
    exit;
}

如果day不正确,请阻止访问--- 已完成

if($_GET['day'] != "today" || $_GET['day'] != "tomorrow") {
    header("Location: http://www.abklab.co.uk");
    exit;
}

如果time不正确,则阻止访问--- 未完成

在这里,我希望能够检查time是否实际是时间而不是test之类的随机字符串。

正如您从URL中看到的那样,时间与%3A一起传递,其中: 我想检查time是否确实是时间,例如12:00,14:20等等,如果没有,则阻止访问

2 个答案:

答案 0 :(得分:0)

你只需要一种逃脱html特殊字符的方法,对吧? 试试这个:

if(strlen(trim($_GET['time'])) > 0){
    echo htmlspecialchars_decode(trim($_GET['time']));
}

答案 1 :(得分:0)

当您通过$_GET['time']获取时间变量时,%3A应该转换为:并暂停,您可以检查time是否实际上time通过regex。其表达式为:([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?