2013-02-01 11 views
2

我在mysql表中有一個postdate和status列。目前帖子的狀態是= 1.所有我想在帖子提交15天后改變狀態= 0。 任何人都可以幫忙。提交15天后post的php更新狀態

$todays = date('d-m-Y'); 
echo $todays; 

mysql_query("UPDATE property SET status=1 WHERE expiredate > '".$todays."'"); 
//echo "record updated!"; 
+0

**警告**您的代碼易受sql注入攻擊! –

+3

使用cron-job來做到這一點。 –

+2

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 –

回答

4

你的日期倒退了。 MySQL的日期格式爲YYYY-MM-DD

$todays = date('d-m-Y'); 

應該

$todays = date('Y-m-d'); 

另外一個更好的辦法來做到這一點是純粹的SQL:

UPDATE property SET status=0 WHERE expiredate < CURRENT_DATE - INTERVAL 15 DAY 
+0

john我已經將結構更改爲Y-m-d並在數據庫中放置了兩個虛擬記錄。並嘗試SQL查詢,但它並沒有修改任何東西。 –

+0

您使用了哪個查詢?礦?還是你的? –

+0

$ todays = date('Y-m-d'); mysql_query(「update property set status = 0 where expiredate <'」。$ todays。「'」); 解決了我猜 –

2

你必須定期運行的查詢設置狀態。您可以在某個小時每天運行一個腳本,以便對數據庫運行查詢。如果你有一臺Linux服務器,請看看cron作業,因爲這是你要找的。

+0

實際上我正在取得發佈日期並將狀態置入1. 15天后我想將狀態更改爲0.沒有物理刪除記錄只是更改其狀態 –

3

這將是運行cron腳本和MySQL語句的組合。

首先,cron項可能會每天運行一次(這個例子是一次在上午01時,每天)

* * * 1 0 /path/to/script.php 

然後,你的PHP腳本將創建一個MySQL查詢(無需PHP變量) - 使用表「財產」

$db = new mysqli('host', 'user', 'password', 'database'); 
$db->query('update property set status=0 where status=1 
      and expiredate < date_sub(now(), interval 15 day'); 

這個假定的名稱將自動取當前EXPIREDATE,減去15天,利用它來進行計算。此外,它會檢查以確保狀態爲1 - 以便它不會爲已更新的表更新該字段。

+0

其實'status = 1'在哪裏子句是不需要的。 Mysql將只更新具有'status <> 0'的行。 Mysql是一個相當聰明的女孩;) –