• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フィールド一列のupdateについて)

フィールドのデータを一括で更新する方法

このQ&Aのポイント
  • フィールドのデータを一括で更新する方法について調べています。現在、フィールドのデータを一つずつ更新する方法はわかりましたが、特定のフィールドを一括で更新する方法がわかりません。それに加えて、update文の書き方もイメージできていません。
  • 現在、フィールドのデータを一括で更新する方法を探しています。while処理の中にsubmitボタンを配置し、連番フィールドの値を与えることで個別のフィールドを更新することはできましたが、特定のフィールドを一括で更新する方法がわかりません。また、update文の書き方も不明です。
  • フィールドのデータを一括で更新する方法について調べています。現在、while処理の中にsubmitボタンを配置し、連番フィールドの値を与えることで個別のフィールドを更新することができましたが、特定のフィールドを一括で更新する方法がわかりません。update文の書き方も分かりません。どうすれば特定のフィールドを一括で更新できるようになるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

データベース上のデータを指定するためのIDがないとなんともしようが ないですね。 通常はプライマリーキーをIDとして使いますが、適当なユニークキーで かまわないので抜き出して、更新の際に利用してください。 修正に関しても基本的には一つ一つのデータに「修正する」ボタンを つけるのが妥当です。 そうしない場合は、無駄にすべてのデータを送ることになります。 (まぁそういう考え方もありますけどね) while ($row = mysql_fetch_array($result)) { print <<<eof <form action="xxx.php"> <input type="hidden" name="id" value="{$row["id"]}"> <input type="text" name="a" value="{$row["a"]}"> <input type="submit" value="修正する"> </form> eof; } アップデートは $sql="UPDATE `テーブル` SET `a`='{$_REQUEST['a']}' WHERE `id`='{$_REQUEST['id']}'"; みたいな感じです。(インジェクション対策は別途やってください)

tanaka07
質問者

補足

yambejp様 アドバイスありがとうございます。 やはりデータの修正は一つ一つ行っていくというのが基本だとは思うのですが、特定のフィールド一列のみを一つのボタンで更新できると、更新の際の手間も省けて便利だなぁ、と思います。 というのも今自分で作っているホームページの中で、写真を紹介するページがあるのですが、この写真の並びは、 order by line_no(←並び順フィールド)という風にline_noの数字を元に表示順を決めて表示しています。 写真の表示順は結構頻繁に変えると思うので、このline_noフィールドだけを一覧で編集できるように表示し、それぞれを編集してから最後にボタンを押して全ての列をupdateできればなぁと思っていたのですが・・・ やはりあまりお勧めできることではないのでしょうか?

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

手っ取り早い方式としては print <<<eof <input type="text" name="a[{$row["id"]}" value="{$row["a"]}"> eof; でループさせてください。 すると受け取ったPHP側では$_REQUEST["a"]に 配列としてデータがはいっています

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ORDER BY の序列を元にUPDATEするのは、かなり最悪の部類だと。 ご自身でためしにコードを書いてみるとかなり面倒だということが わかると思います。 そもそもSQLに関してはプライマリキーの設定が強く推奨されて いるはずなのでプライマリーキーで設定したidをもとにデータ管理 なさるのが肝要かと思います。 (もちろんline_noがユニークならばそれで十分なんですけど) 一つ一つのinputにformを設定せず一括でサブミットする方法は、 ちまちま小出しにデータを送るより、ユーザビリティが高くなり、 それはそれで意味があると思います。 ただ編集していないデータも常にサーバーにおくられるためいわゆる オーバーヘッドが大きくて非効率的になりがちです。 またやるならname="a"では、どのデータを更新していいかさっぱり わかりませんので、a1、a2、a3・・・といったようなユニークな 名称をつけることになりそうですね。 結局PHP側で処理が煩雑になるので、工夫が必要になると思います

tanaka07
質問者

補足

ご回答ありがとうございます。 プライマリーキーに関してはインデックスとして、noという名前で設定してあります。line_noはあくまで写真の表示順を決めているだけの配列なのですが、この設定自体が問題あるのでしょうか? 一括サブミットは確かに一度に全てのデータを送ることになるので、データベース上としてはあまりよろしくないことなのかもしれません。。 今回の例ですと登録件数自体は大体10~20程度のデータですが、件数の大小問わず推奨されることではないのでしょうか・・・ 自力で何とかできないか、あれこれ調べたり試したりしてるのですが、まず ループで回した<input type="text" name="line_no">のnameをどのような形式にしてポストしていいのかで躓いています。 なにかお知恵をいただけましたらお願い致します。

関連するQ&A