2011-06-23 38 views
1

我在我的MySQL數據庫中有一張表,其中包含他們在註冊期間提交的每個用戶的信息。如何讓一個列變量只用PHP/MySQL更改一次?

我現在想允許用戶更改其中一列(X列),但只有一次。

這樣做的最好方法是什麼?

我能想到的唯一方法是將一個額外的列(列Z)添加到默認爲0的二進制值的表格中,並在列X由用戶更新時更改爲1。如果Z列爲0,則該站點允許更改,否則它不允許。

有沒有更好的方法?列Z應該與列X在同一個表中嗎?我應該考慮的其他相關問題/問題?

謝謝。

回答

2

您可能在某些時候決定允許用戶更改columnX 3次。布爾值將不允許這樣做。如果您決定允許用戶更改columnY,該怎麼辦?然後怎樣呢?

如果您絕對肯定您永遠不需要更改您的規則,那麼二進制標誌將正常工作。但是,如果您可能會允許並限制可能具有不同限制的多個列的更改,則可以考慮User_Edits表。它可能是這個樣子:

tablename varchar(30) not null, 
columnname varchar(30) not null, 
user_id int unsigned not null, 
changetime timestamp default current_timestamp, 
oldvalue text 

要找出有多少編輯一個用戶做了:

SELECT COUNT(user_id) FROM User_Edits 
WHERE tablename='Mytable' AND columnname='ColumnX'; 

,並作爲額外的獎勵,你就會有一個審計線索,可以讓你取消更改。

+0

我已經使用了一個非常類似於這個系統的「濫用標誌」系統來標記潛在的垃圾郵件/淫穢評論或上傳,在如此多的表中這樣的項目後,該項目將被刪除。我這樣做的原因是爲了防止拖延和濫用濫用系統的人;) – CenterOrbit

3

一旦將行插入到表中,您可以爲列x創建一個默認值。然後,當用戶想要更新他的行時,數據庫會檢查該值,如果插入後沒有更改,則可以允許用戶更新。否則,在你的代碼拒絕

CREATE TABLE example_table (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    data VARCHAR(100), 
    value_to_be_updated_once DEFAULT NULL 
); 

您可以檢查是否列(value_to_be_updated_once)爲空,那麼用戶應該被允許編輯。

您必須確保用戶不會將此值設置爲NULL,除非您希望擁有該值。 (也許用戶改變了他/她的想法並且稍後編輯)