2012-04-19 9 views
0

おやすみなさい。ID列は他の列は更新されません。

このわずかなエラーは少し私を悩ませています。問題の原因を見つけることができません。 id、last_name、first_nameという3つの列があります。後者の2はうまく更新されますが、idカラムは元の値に戻ります。

オクラホマので、ここに私のコードの一部抜粋です:フォームを送信すると、その後

while($row = mysql_fetch_array($result)) 
{ 

    echo "<tr>"; 
    echo "<td><input type='checkbox' name ='doc_list[]' value =". $row ."></input></td> 
      <td><input type='text' maxlength='9' id='id' name ='id' value =". $row['id'] ."></input></td> 
      <td><input type='text' maxlength='32' id='last_name' name ='last_name' value =". $row['last_name'] ."></input></td> 
      <td><input type='text' maxlength='32' id='first_name' name ='first_name' value =". $row['first_name'] ."></input></td> 
      <td><input type='submit' value='Update'/></td> 
      <td><div id='message'></div></td>"; 

} 

//Extracts the information from the form 
$id = clean($_POST['id']); 
$first_name = clean($_POST['first_name']); 
$last_name = clean($_POST['last_name']); 

//Input validations 
//include("../php/validate_insertion.php"); 


//Updates doctor info 
$query1="UPDATE doctors 
    SET id= '$id', last_name='$last_name', first_name='$first_name' 
    WHERE id='$id'"; 
$result = mysql_query($query1) or die(mysql_error()); 

どこにエラーがありますか?

+1

なぜあなたのデータベース内のIDを変更していますか?これがプライマリキーであるため、対応するIDでデータを呼び出すことができます。最新の更新データが何であるかを示す必要がある場合は、「変更済み」のような別のフィールドを作成することができます。 – SuperNoob

+0

ポイントが記載されています。ありがとう。 – Zeno

+0

問題ありません。別のユニークなテーブルを作成するだけで、常に作成および変更された(日付と時刻)を追加するので、最新または更新されたデータベースを取得できます。 – SuperNoob

答えて

2

IDを変更するロジックが実際にはありませんが、元のIDを保存していないという問題があります。元のレコードを更新するには、新しいIDを持つレコードではなく、whereの条件が必要です。

本当にこのようにしたいのであれば(IDが重複していると問題に遭遇します...)、元のIDを隠しフィールドとして追加して、更新するレコードを知るようにしてください。

+0

ああ、最初のスニペットがSQLデータベースから読み込んでいるという言葉を忘れてしまった。 2番目はそれに書き込むことです。また、私はidをどこで変えたのですか? – Zeno

+0

@Megakeemo私は多くのことを考えましたが、ID = IDのIDを更新することは決してありません。 – jeroen

+1

Ohhhhhhh。私はあなたが今言っていることを見る。ハハ、ありがとう。私は今それを修正した。時には余分な目が邪魔になることがあります。 – Zeno

1

なぜあなたは私の最初の質問ですidを変更していますか?

本当にidを変更する必要がある場合は、このフォームが生成された元のIDを取得する必要があります。これを行う1つの方法は、このフォームが生成されたdb行の元のIDを与えるフォームに隠れた入力フィールドを置くことです。

PS:セキュリティの観点からは、行を更新する予定に応じて、ユーザーフォームからIDを受け入れることはお勧めできません。誰かがその隠しフィールドIDを他のものに変更するとどうなりますか?

+0

IDを取得するには他にどのような方法がありますか? – Zeno

+1

最も簡単な方法は、フォームから期待どおりの結果を得て、フォームを解読しようと試みる可能性があることを確認するために、hash-hmac戦略に従うことができます。 1つの短い使用法はここに見つけることができます... http://abhinavsingh.com/blog/2009/12/how-to-add-content-verification-using-hmac-in-php/ –

関連する問題