2015-09-27 71 views
0

我试图从URL解析数据(用于过滤)。我希望能够使用http://domain.com/page.php?startDate=20150101&endDate=20150927。在本例中,从1月1日至9月27日使用/可见/计算数据。URL中的解析日期并不总是可用(触发黑屏)

当输入/更改结束日期时,该日期在过滤器中正确使用。如果没有输入今天的日期应该使用(但那是它出错的地方)。对于我使用下面的代码:

$endDateFormat = DateTime::createFromFormat('Ymd', htmlspecialchars($query['endDate'])); 
    $endDate = $endDateFormat->format('Y-m-d'); // change YYYYMMDD to YYYY-MM-DD for MySQL. 

    if (empty($endDate)) { 
     $endDate = date('Y-m-d'); // Use todays date if date is not entered. 
    } elseif ($endDate >= date('Y-m-d')) { 
     $endDate = date('Y-m-d'); // Use todays date if date is newer than today. 
    } 

,原因不明的结束日期必须在URL中添加。如果未使用,则页面为空白。如果输入该代码,则代码的工作原理如下:当您使用31-12-2015作为endDate时,它会自动更正为今天(当然,您无法从未来获取数据),并且当您使用日期早于当前日期时。我通过检查计算并简单地从$ endDate得到一个回声来验证这一点。

我不知道如何现在进行以防止空白页。如果您得到http://domain.com/page.php(因此endDate为空/ NULL /不在URL中),则使用今天的日期作为endDate。

这个问题也出现在startDate中,但我确定它有相同的原因。

+0

我会认为'$ endDateFormat'不是一个对象,如果没有日期被指定。因此,你可以调用一个非对象的方法,这是一个语法错误。你应该检查你的http服务器错误日志文件中的错误(如果你有问题,你应该这样做!)。为什么要试着_guess_错误__如果你可以查看那个文件并_读__错误。 – arkascha

+0

我试着去看日志,抱歉没有提到这个。不幸的是,这些信息太有限了(只是'#号错误')。这就是为什么我的希望在你们身上。 – Bastiaan

+0

我怀疑,对不起。除了确切的行号已经比你在这里提供的信息多得多的事实之外,我很确定它提到了什么类型的错误发生了。这告诉你实际问题是什么。 – arkascha

回答

0

我已经从头开始(又一次),并找到了用较少的代码为我工作的解决方案。不知道为什么我没有早发现它还是出了什么问题与早前“重新启动”,但下面的工作,因为我想:

 $endDate = htmlspecialchars($query['endDate']); 
    if (empty($endDate)) { 
     $endDate = date('Ymd'); 
    } elseif ($endDate >= date('Ymd')) { 
     $endDate = date('Ymd'); 
    }