感到困惑的是为什么PHP在if语句上给出了简单的逻辑错误

时间:2012-06-22 21:19:35

标签: php

就像标题所说的那样,PHP真的让我感到困惑的是一个简单的if比较语句,它返回与应该返回的相反的语句。我正在尝试比较首次转换为字符串的2个日期时间:

//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

?>

2 个答案:

答案 0 :(得分:0)

快速解决了这个问题。我刚刚在我的函数中添加了一个局部变量并重新安排了我的比较语句

//added local variable $eventTyppe to function
$eventTyppe;

改变了比较:

 if ($databaseDateTime < $todaysDateTime) { $eventType = 'past'; } 

为:

if ($todaysDateTime < $databaseDateTime ) { 
     $eventTyppe = $eventType; 
  } else { 
     $eventTyppe = 'past'; 
  }

请注意我重新排列比较:

if ($databaseDateTime < $todaysDateTime ) { 
   $eventTyppe = 'past'; 
 } else { 
   $eventTyppe = $eventType; 
 }

我仍然得到同样的错误。这是我见过的最奇怪的事情和我遇到的第一个PHP错误(我假设它是一个PHP错误)。

答案 1 :(得分:0)

你可以在此行之前打印时间值吗?

if($ databaseDateTime&lt; $ todaysDateTime){$ eventType ='past'; }

由于那个被宣布为全局,我想知道它是否回复不正确。