2011-06-23 22 views
1

私は自分のMySQL DBに、登録時に提出した各ユーザの情報を持つテーブルを持っています。PHP/MySQLで列変数を1回だけ変更する方法を教えてください。

ここで、ユーザーはこれらの列の1つ(列X)を変更できるようにしたいと思いますが、1回だけ変更できます。

これを行うにはどうすればよいですか?

私が考えることができる唯一の方法は、デフォルトで0になるバイナリ値を持つ追加の列(列Z)を追加し、列Xがユーザーによって更新されたときに1に変更することです。列Zが0の場合、サイトは変更を許可し、そうでない場合は許可しません。

良い方法がありますか?列Zは列Xと同じテーブルにある必要がありますか?私が考慮すべき他の関連するポイント/問題は?

ありがとうございました。

答えて

2

ある時点で、ユーザーがcolumnXを3回変更できるようにすることができます。ブール値はこれを許可しません。また、ユーザーがcolumnYを変更できるようにする場合はどうなりますか?それでは?

ルールを変更する必要がないことが絶対確実であれば、バイナリフラグが正常に動作します。しかし、潜在的に異なる制限で複数の列の変更を許可したり制限したりする可能性がある場合は、User_Editsという表が考えられます。

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

そして、追加ボーナスとして、あなたはあなたがすることを可能にする監査証跡があるでしょうが:ユーザーがどのように多くを行っていた編集内容を調べるには

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

:それはこのようになります。変更を元に戻します。

+0

私は、潜在的なスパム/猥褻なコメントやアップロードをマークするために、このようなシステムに非常に似たシステムを使用しています。このようなテーブルのエントリが多いと、そのアイテムは削除されます。私がこのようにしたのは、虐待行為をしている人や悪用行為をしている人を悪用することを防ぐことだった;) – CenterOrbit

3

テーブルに行が挿入されると作成される列xの既定値を持つことができます。次に、ユーザーが行を更新したい場合、dbはこの値をチェックし、挿入後に変更されていない場合はユーザーに更新を許可することができます。それ以外の場合は、列(value_to_be_updated_once)がnullであるかどうかをチェックすることができ、あなたのコード内

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

を拒否し、ユーザーが編集を許可する必要があります。

あなたが望むものでない限り、ユーザーがこの値をNULLに設定しないようにする必要があります。 (おそらくユーザーが気を変えて後で編集する)

関連する問題