iT邦幫忙

0

有關PHP判斷式的問題(不知道那裏寫錯嚕)

  • 分享至 

  • twitterImage

我寫了一個判斷式會因為條件而修改資料庫資料
但是條件明明是對的
但為啥所指定都值都不會出現
下列是我的程式碼:
<?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,如果把判斷的條件改成<=的話就反過來,不知道是怎了,有大大可否幫我看看是那裏寫錯嚕

fillano iT邦超人 1 級 ‧ 2011-11-30 13:22:02 檢舉
不必要的<?php跟?>好像有點多...還有東西沒貼出來嗎?如果把$cc = $aa改成$cc = 0,結果會有不同嗎?
silly iT邦好手 2 級 ‧ 2011-11-30 14:56:53 檢舉
網頁結果可以輸出貼上來嗎?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

10
wiseguy
iT邦超人 1 級 ‧ 2011-11-30 15:59:39
最佳解答

這程式是一個把 danger 這個資料表的 over_time 欄位資料逐筆抓出來,看看它的時與分是否早於或等於目前系統時間,是的話就把 d_class 欄位改為 0 ,不是的話就改為 1。(不明白為什麼只比時分,年月日不用管嗎?)

錯誤在這裡:

  1. $server_time=gmdate("Hi",time()+3600*$timezone);
    除非資料庫裡的資料,跟 PHP 主機在不同時區,要不然 time() 已經夠了,+3600*$timezone 是多此一舉。就算需要計算時差,把這個值放在迴圈內也是不智之舉 (除非這支程式會執行的時間長到足以影響你的判斷式)。

  2. 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)

感謝大大的提點...小弟依照大大提點有做了一些小小修改以後...目前測是正常喔

我要發表回答

立即登入回答