Php年龄检查表

时间:2015-09-29 10:16:43

标签: php time twig

我正在迈出我的第一步,我得到了这个项目,尽管我理解正在做什么,但由于某些原因它不起作用。

$app->post('/age/', function($lang) use($app) {

        $action = $app->request()->post('action');
        $remember = $app->request->post('remember') === 'on';

        if ($action === 'Yes') {

            setcookie('AgeCheck', 'true', time()+60*60*24*30, '/'); //Expire in 1 month
            $_SESSION['age'] = 'true';

            $app->redirect(urldecode($app->request()->get('return')) ?: "/$lang");
        }
        else if ($action === 'Enter') {

            $limit = (60 * 60 * 24 * 365) * 18;

            $dob = $app->request->post('dob');

            if ($lang === 'us') {
                $dob = \DateTime::createFormFormat('mdy', $dob);
                $limit = (60 * 60 * 24 * 365) * 21;
            }
            else
            {
                $dob = \DateTime::createFromFormat('dmy', $dob);
            }

            if ((time() - $dob->getTimestamp()) >= $limit)
            {
                setcookie('AgeCheck', 1, (60*60*24*365)/12); //Expire in 1 month
                $_SESSION['age'] = 1;

                $app->redirect(urldecode($app->request()->get('return')) ?: "/$lang");
            }
        }

        $app->redirect("/$lang/underage");

理论上,如果他通过了年龄限制,就应该将用户重定向到正确的页面,但它总是将他重定向到未成年人页面。

问题是,绝对是在这里:if ((time() - $dob->getTimestamp()) >= $limit)

我做错了什么?

2 个答案:

答案 0 :(得分:2)

始终检查代码的每一行。 您的关键条件是:

if ((time() - $dob->getTimestamp()) >= $limit)
{
    setcookie('DrambuieAgeCheck', 1, (60*60*24*365)/12); //Expire in 1 month
    $_SESSION['age'] = 1;
    $app->redirect(urldecode($app->request()->get('return')) ?: "/$lang");
}

所以在此之前,只需要echo / var_dump $ dob-> getTimestamp()和$ limit。一切都会很清楚。 如果$ dob出现问题,请检查$ _POST [' dob']返回的内容。

示例:

var_dump($dob->getTimestamp());
var_dump($app->request->post('dob'));
var_dump($dob->getTimestamp());
var_dump(time());
echo 'condition result:';
var_dump(((time() - $dob->getTimestamp()));
if ((time() - $dob->getTimestamp()) >= $limit)

你会看到条件中最重要的变量,并自我调节

答案 1 :(得分:0)

想出了这个问题。一切都是正确的,但它甚至没有进入if,因为$ action没有进入,但提交。我仍然保持@Daimos的答案是正确的。

  

这里更有趣的部分是((time() - $ dob-> getTimestamp())> = $ limit)实际上是真的(在此上下文中)。也许$ action不是Enter? - 安德鲁

这是解决问题的关键,在我尝试了所有内容并检查完全正确之后。