对PHP为什么在if语句中给出简单的逻辑错误感到困惑
就像标题所说的,PHP在一个简单的if比较语句上让我很困惑,它返回的结果与它应该返回的相反。我试图比较两个最先转换为字符串的日期时间:对PHP为什么在if语句中给出简单的逻辑错误感到困惑,php,Php,就像标题所说的,PHP在一个简单的if比较语句上让我很困惑,它返回的结果与它应该返回的相反。我试图比较两个最先转换为字符串的日期时间: //Fetched db query, this returns 2012-06-23 16:00:00 $databaseDateTime = strtotime($row['time']); //This now returns 1340481600 //today's date and time I'm comparing to, this return
//Fetched db query, this returns 2012-06-23 16:00:00
$databaseDateTime = strtotime($row['time']);
//This now returns 1340481600
//today's date and time I'm comparing to, this returns 2012-06-22 17:14:46
$todaysDateTime = strtotime(date("Y-m-d H:i:s"));
//this now returns 1340399686
太好了,到目前为止一切都很好。现在是事情变得棘手的地方:
if ($databaseDateTime < $todaysDateTime) { $eventType = 'past'; }
这会返回“过去”,当然不应该。请告诉我我遗漏了什么。我的项目有点依赖于这个功能是密封的
**编辑***
谢谢你们抽出时间来帮我。让我发布整个代码,因为你们中的一些人需要更多的上下文。请求来自IOS5到我的后端代码,json被发送回手机
<?php
//all included files including $link to mysqli_db and function sendResponse()
function getEvents($eventType, $eventArray) {
global $link;
global $result;
global $i;
global $todaysDateTime;
foreach ($eventArray as $key => $value) {
$sqlGetDeal = mysqli_query($link, "SELECT time FROM deals WHERE id='$value' AND active='y' LIMIT 1") or die ("Sorry there has been an error!");
while ($row = mysqli_fetch_array($sqlGetDeal)) {
//compare times to check if event already happened
$databaseDateTime = strtotime($row['time']);
if ($databaseDateTime < $todaysDateTime) { $eventType = 'past'; }
$result[$i] = array(
'whenDeal' => $eventType,
'time' => $databaseDateTime,
);
$i++;
}//end while
}//end foreach
}
if (isset($_GET['my'])) {
//$_GET['my'] comes in as a string of numbers separated by commas e.g. 3,2,6,3
$myDeals = preg_replace('#[^0-9,]#', '', $_GET['my']);
$todaysDateTime = strtotime(date("Y-m-d H:i:s"));
$result = array();
$kaboomMy = explode(",", $myDeals);
$i = 1;
if ($myEvents != "") {
getEvents('future', $kaboomMy);
}//end if
sendResponse(200, json_encode($result));
} else {
sendResponse(400, 'Invalid request');
} //end $_POST isset
?>
在这个问题上找到了一个快速的解决方法。我刚刚在函数中添加了一个局部变量,并重新排列了比较语句
//added local variable $eventTyppe to function
$eventTyppe;
更改自:
if ($databaseDateTime < $todaysDateTime) { $eventType = 'past'; }
致:
请注意,如果我重新排列比较:
if ($databaseDateTime < $todaysDateTime ) {
$eventTyppe = 'past';
} else {
$eventTyppe = $eventType;
}
我仍然会犯同样的错误。这是我见过的最奇怪的事情,也是我遇到的第一个PHP错误,我假设这是一个PHP错误。你能在这行之前打印时间值吗 如果$databaseDateTime<$todaysDateTime{$eventType='past';}
由于该代码被声明为全局代码,我想知道它是否返回错误。能否在pastebin上发布更大部分的代码?显示“过去”的原因可能在代码的其他行中,如mysql\u查询或下面的echo。逻辑对我来说似乎很好。你的代码没有任何回报。你是说$eventType被设置为“过去”了,对吗?它似乎在我的电脑上工作…在我的机器上也能完美工作。错误可能在其他地方。如果您要执行您发布的代码,首先定义$row['time'],您将看到您的问题没有出现。我这样说是为了帮助你调试-你的问题在别处。很可能,这与此代码集成到其他代码中的具体方式有关。如果您使用的是MySQL,您可以将其分为以下几个部分:选择time,IFtime
if ($databaseDateTime < $todaysDateTime ) {
$eventTyppe = 'past';
} else {
$eventTyppe = $eventType;
}