2011-01-24 20 views
0

私は明らかにできない問題があります。私は、ユーザが好みの果物の種類を選ぶことを許可するコードを少し持っています。彼らが以前に「りんご」を好きなものとして選択し、それを「オレンジ」に変更したい場合、スクリプトはうまくいく。PHP MySQLのアップデートの問題

しかし、すでに「りんご」を選択しているときに「りんご」を選択した場合、MYSQLの更新呼び出しは中断し、エラーを返します。それは同じデータでそれ自身を上書きしない、新しい値がユニークでなければならないようなものです。私はここで更新ビットです....途方に暮れてよ:

// UPDATE THEIR FRUIT SELECTION... 
    $q = "UPDATE account SET fav_fruit='" . $row['fruit'] . "' WHERE act_id=$act_id LIMIT 1";  
    $r = @mysqli_query ($dbc, $q); 
    if (mysqli_affected_rows($dbc) == 1) { // If it ran OK. 
      echo 'success!'; 

    } else { 
     echo 'oops!'; 
    } 

繰り返しますが、これは新しい選択限り、動作し、どのようなデータベースには同じではありません。彼らは:私はおっとを得る!エラー。

+1

どのようなエラーがありますか? 'mysqli_query'の前になぜ' @ 'が必要なのですか? – zerkms

+0

エラーはそれほど難解ではありません - 私自身のテキストで、mysqlの標準エラーではありません: "ユーザはシステムエラーのためにアップデートできませんでした。" – WillHerndon

+0

@を使用してエラーを抑制するのは、通常は面倒です。スクリプトやPHP.iniの 'error_reporting()'をnoneに設定する方がはるかに優れています。 –

答えて

1

なぜフィールドに既に含まれている値を含むように更新する必要がありますか? それにかかわらず、これはテーブル構造を変更することで修正できます。 fav_fruit列から一意のフラグを削除する必要があります。

+0

データベースをチェックしましたが、その列は一意ではありません。 – WillHerndon

+0

すでに格納されている値に値を更新する必要がある理由はありますか? –

+0

種類 - 異なる値を選択し、必要なときにいつでもこの値を変更できる必要があるということです。基本的に「こんにちは、あなたはこの選択肢を選択しましたが、ここには他のものを選択しました」と言って、既に保存されている値を除いて、それはすばらしく思います。 – WillHerndon