我寫了一個判斷式會因為條件而修改資料庫資料
但是條件明明是對的
但為啥所指定都值都不會出現
下列是我的程式碼:
<?php require_once('Connections/weather.php'); ?>
<?php
mysql_select_db($database_weather, $weather);
$query_sqq = "SELECT * FROM danger";
$sqq = mysql_query($query_sqq, $weather) or die(mysql_error());
$row_sqq = mysql_fetch_assoc($sqq);
$totalRows_sqq = mysql_num_rows($sqq);
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
<?php do { ?>
<?php
$timezone=8;
$aa=0;
$bb=1;
$cc="";
$server_time=gmdate("Hi",time()+3600*$timezone);
$overtime=$row_sqq['over_time'];
$overtime_arroy=$overtime[6].$overtime[7].$overtime[9].$overtime[10];
$server_time_int=intval($server_time);
$overtime_arroy_int=intval($overtime_arroy);
if($server_time_int >= $overtime_arroy_int)
{$cc=$aa;echo "Y";}
else
{$cc=$bb;echo "N";}
echo $server_time_int.".".$overtime_arroy_int."</br>";
mysql_query("UPDATE danger SET d_class = "."$cc");
?>
<?php } while ($row_sqq = mysql_fetch_assoc($sqq)); ?>
<?php
mysql_free_result($sqq);
?>
結果明明是顯示N的值, 但是他前面的$C的值且是0而不是屬於1,如果把判斷的條件改成<=的話就反過來,不知道是怎了,有大大可否幫我看看是那裏寫錯嚕
這程式是一個把 danger 這個資料表的 over_time 欄位資料逐筆抓出來,看看它的時與分是否早於或等於目前系統時間,是的話就把 d_class 欄位改為 0 ,不是的話就改為 1。(不明白為什麼只比時分,年月日不用管嗎?)
錯誤在這裡:
$server_time=gmdate("Hi",time()+3600*$timezone);
除非資料庫裡的資料,跟 PHP 主機在不同時區,要不然 time() 已經夠了,+3600*$timezone 是多此一舉。就算需要計算時差,把這個值放在迴圈內也是不智之舉 (除非這支程式會執行的時間長到足以影響你的判斷式)。
mysql_query("UPDATE danger SET d_class = "."$cc");
這 UPDATE SQL 沒有 where 條件,也就是所有 record 都會改。因此看你最後一筆資料的 $cc 是啥,所有資料的 d_class 就會是啥。猜測你說的【所指定都值都不會出現】問題應該就出在這裡吧。
BTW,你這程式的功能只需要一條 SQL 指令就能搞定,完全不必動到 php 運算:
UPDATE danger SET d_class = if(CURRENT_TIMESTAMP>=over_time,0,1)