2014-12-03 126 views
1

我知道这种类型的问题之前问,但我想要的是计算从时间和时间的差异和时间。我是新手所以不能让自己在专家模式下我做了下面的代码,并在端面和错误,解决这个“可捕捉的致命错误:类mysqli_result的对象不能转换为C:\ wamp \ www \测试网站\ time_test.php在线105"来计算时差

<?php 
$con = mysqli_connect("localhost","root","","testsite") OR die("Could not connect: ".mysqli_error()); 

if (isset($_POST['isubmit'])) { 
    // Check the cookie exits or not 
    if (isset($_COOKIE['uid'])) { 
     $_COOKIE['uid']; 
    } 

    $uid = $_COOKIE['uid']; 

    echo "Hello user: ".$uid; 

    $isql = mysqli_query($con, "INSERT INTO `time`(`uid`, `intime`, `date`) VALUES ('$uid',CURTIME(),CURDATE())"); 
    $lid = mysqli_insert_id($con); 

    echo $lid; 
} 
if (isset($_POST['osubmit'])) { 
    if(isset($_COOKIE['uid'])) { 
     $_COOKIE['uid']; 
    } 

    $uid = $_COOKIE['uid']; 
    $ssql= mysqli_query($con,"SELECT `intime`, `outtime`, `date` FROM `time` WHERE `uid`=".$uid); 

    while ($row = mysqli_fetch_array($ssql)) { 
     $intime = $row['intime']; 
     $outtime= $row['outtime']; 
     $date = $row['date']; 

     if(!empty($date)){ 
      $tmp = mysqli_query($con, "SELECT CURTIME()"); 
      $lid = mysqli_insert_id($con); 

      $temp= strtotime($outtime) - strtotime($intime); 

      echo $temp; 
      //below line is line number 105 
      $usql= "UPDATE `time` SET `outtime`= $tmp,`diff`= '$temp' WHERE `id`=".$lid." AND `uid`=".$uid; 
      $run = mysqli_query($con, $usql); 
      if (!$run) { 
       die("Update database query error: ". mysqli_error()); 
      } 
     } 
    } 
} 
?> 
+0

'$ TMP = mysqli_query($ CON “选择CURTIME()”);'可能是一个有点过度杀死你不觉得?除非你的mysql服务器与你的apache服务器不同,并且在另一个GMT – Brewal 2014-12-03 09:13:39

+0

下运行,否则我总是首先在本地驱动器上执行操作,而不是上传它并更改我在日记中指出的必要事项。通过这个,我可以从我的电脑中获得时间,这个时间很好。我只是想摆脱错误... – 2014-12-03 09:16:54

回答

0

你的问题是,你的$tmp var是一个查询,而不是查询的结果。您必须首先获取结果。这就是你得到这个错误的原因。但你可以得到与PHP的时间,而不必做一个查询:

$tmp = date('H:i:s'); 

此外,您$temp变量将会导致一个整数。使用date功能格式化它:

$temp = date('H:i:s', strtotime($outtime) - strtotime($intime)); 

另外要注意,你受到SQL注入:你$uid是一个cookie,是不是安全的。你可能想将它转换为整数:

$uid = (int)$_COOKIE['uid']; 

或者你可以做的更好,并使用prepared statements

+0

我在算术操作中将$ tmp替换为$ otime,但是当我这样做时,我再次面临同样的错误并带有一个警告 – 2014-12-03 09:22:09

+0

转储变量并查看制作之前得到的结果你的'$ usql' – Brewal 2014-12-03 09:23:59

+0

好吧我用int和之后,因为我采取curtime()的时间银泰时间和outtime比$ temp我得到这种类型的值1417643818.但是我把它转换为HM,但不能看到任何变化 – 2014-12-03 09:34:44