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

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

フィールド一列のupdateについて

例えば、a,b,cという三つのフィールドがあって、それぞれ10件ほどのデータが登録されているとします。この内、"a"のフィールドデータだけを、 while ($row = mysql_fetch_array($result)) { <input name="a" value="<?php print $row["a"];?>"> } で編集できるような状態で一覧表示したとします。 この時に、while処理の終わった後に、 <input type="submit" value="修正する"> というボタンを配置し、このボタンを押すとフィールド"a"の各値がそれぞれの値で更新されるようにしたいのですが、こういうことは可能なのでしょうか? while処理の中にsubmitボタンを配置し、 <input type="hidden" value="<?php print $row["連番"];?>"> のように連番フィールドの値を与えると、個別での更新はできたのですが、 特定のフィールドを件数分取り出し、一つのボタンで更新できるようにするにはどうすればよいのかわかりません。 update文の書き方もイメージできませんが、 <input name="">部分もどのように設定すればよいのか・・・ わかりづらい説明ですみませんが、よろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数0

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

  • ベストアンサー
  • 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

  • disabledのフィールドパラメータについて

    以下のようなフォームでdisabledになったテキストフィールドは、 値として渡されるのでしょうか? <form> <input type="text" name="test1" value="a" disabled> <input type="submit"> </form>

    • ベストアンサー
    • HTML
  • PHPのsubmitボタンが複数ある場合

    PHPのsubmitボタンが複数ある場合 PHPにて会計システムを開発しているのですが、計算ボタンと、更新してDBに追加するためのボタンとが混在している場合、 $_POST等で押されたボタンの処理を分けることは可能なのでしょうか?下の例は、 name="calculation"が押された場合は、val1とval2の値を計算し、totalへ値を入れます。 name="update"が押された場合は、それぞれのフォームの値をDBに更新をかけます。 <?php <form action="****.php" method="POST"> <input type="text" name="val1" value="20"/> <input type="text" name="val2" value="30"/> <input type="text" name="total" value="50"/> <input type="submit" name="calculation"/> <input type="submit" name="update"/> </form> ?> お分かりになる方、ご教授お願いいたします。

    • 締切済み
    • PHP
  • 自動的にchekboxを

    mysqlからデータを表示して自動的にチェックボックスを 生成し、チェックしてsubmitしたらそれを表示したいのですが、checkboxのvalue値を自動生成できず悩んでいます。ご伝授お願いしたいます。 while ($row = mysql_fetch_assoc($result)) { print($row['name_no']); print($row['name']); print($row['price']); print('<input type="checkbox" name="no[]" value= row['name_no'])'); } print(' <input type="submit"></form>'); $idno=join($_POST["no"]); print($idno);

    • 締切済み
    • PHP
  • 一つのformで、複数のaction指定

    レイアウトなどの関係で、formの配置が基本とは異なるものになってしまい、うまく動作させる方法が見つからず困っています。 現在は <form> <input type="checkbox" name="select[]" value="●●"> <input type="checkbox" name="select[]" value="●●"> <input type="checkbox" name="select[]" value="●●"> </form> …… <form method="POST" action="A.php"> <input type="submit" name="aa" value="あああ"> </form> <form method="POST" action="B.php"> <input type="submit" name="bb" value="いいい"> </form> <form method="POST" action="C.php"> <input type="submit" name="cc" value="ううう"> </form> <form method="POST" action="D.php"> <input type="submit" name="dd" value="えええ"> </form> のようになっていて、チェックボックスの値を送信したいのは、Dのボタンを押したときだけPOSTされるようにしたい状態です。 この値を取得する方法か、もしくは <form method="POST" action="(ボタンに応じたもの)"> <input type="checkbox" name="select[]" value="●●"> <input type="checkbox" name="select[]" value="●●"> <input type="checkbox" name="select[]" value="●●"> …… <input type="submit" name="aa" value="あああ"> <input type="submit" name="bb" value="いいい"> <input type="submit" name="cc" value="ううう"> <input type="submit" name="dd" value="えええ"> </form> このように、一つのフォームの中に埋めてしまい、actionに入る値をボタンによって分ける方法はありませんでしょうか? もしくは他の方法でも構いません。 お分かりの方がいましたら、是非ご教授お願いいたします。

    • 締切済み
    • PHP
  • 受け渡した変数が、プログラム実行後に消えてしまう?!

    いつもありがとうございますm(_ _)m。入力画面test1.phpをlocation.replaceを使って[リロードしない為]切り替えて、別の画面test2.phpと連携させています。JSのwindow.openは顧客環境では使えません(大泣) test1.php→test2.php→test1.phpという流れで二つの変数を受け渡ししたいのですが。。。 (1)test1.phpにある変数 $row1[code] $row1[name] inputボタンをクリックすることで、URLを使って次のファイルに渡す <input type="button" value="go2" onClick='location.replace ("http://********/test2.php?row1[code]=<? echo $row1[code];?>&row1[name]=<? echo $row1[name];?>")' name="button"> (2)test2.php フォームのテキストフィールドが用意されている <input name="code" type="text" value="<? echo $row1[code]; ?>"> <input name="name" type="text" value="<? echo $row1[name]; ?>"> test1.phpから、test2.phpの画面に切り替わった瞬間には、2つのの値がキチンと表示されている。 ここでnameに入った値を元に、サブミットボタンで処理。 <input type="submit" name="read" value="読み込み"> この時name部分に関しては、DB読込・結果をname&その他の項目と共にフォーム上にちゃんと再表示できるが、codeの値が消えてしまう。。 PHPの処理部$read部に以下のように2通り、書き加え試しましたが、だめでした。 $row1[code] = $row1[code]; $row1[code] = $_GET['$row1[code]']; なぜ消えてしまうのか? 変数をキープするにはどうしたらいいでしょうか? あるいは、他に良いアイディアなどありましたら、教えて下さい。よろしくお願いいたします。。。

    • ベストアンサー
    • PHP
  • フォーム送信後の更新ボタンでも$_POST変数が初期化されない

    フォームのサブミット後にプログラムが走るようになっているtest.phpがあるのですが、フォーム送信後に更新ボタンを押しても再度ポストされるようになってしまっています。 ブラウザの更新ボタンを押したときには、ポストせずにフォームをクリアしたいのですが、どうすればできますでしょうか? <form method="post" action="<?php print($_SERVER['PHP_SELF']); ?>"> <input type=text name=aaa> <input type="submit" name="submit" value="submit"> </form> <?php if($_POST['submit']) { 処理 } ?>

    • ベストアンサー
    • PHP
  • submitボタンにvalue属性の値でないラベルを表示したい

    submitボタンを複数設置し,全てのラベルに「これを修正する」と表示したいのですが, 下記のように押下されたsubmitボタン別に,POSTする値をそれぞれ1,2,3と分けたいです. (page.phpは,$_POST["PageNumber"]として1か2か3を受け取る) ですが,value属性の値がボタンのラベルとしてボタン表面に記されてしまい,困っています. 何とかならないでしょうか? <form method="post" action="page.php"> <input type="submit" name="PageNumber" value="1"></td></tr> <input type="submit" name="PageNumber" value="2"></td></tr> <input type="submit" name="PageNumber" value="3"></td></tr> </form>

    • ベストアンサー
    • HTML
  • FORMで送信ボタンと戻るボタンを2つつけてそれぞれ遷移先を変えたい

       以下のような画面を作りたいのですが↓ -------------------------------------------------------------------------------- ● a.php (ユーザ情報入力画面) ※フォームに入力する画面    <FORM method="POST" action="b.php">   <INPUT type="text" name="mail">   <INPUT type="submit" name="submit" value="確認">  </FORM> ● b.php (ユーザ情報入力確認画面)※フォームに入力された値を表示する画面  <FORM method="POST" action="c.php">   <!-- ここには、フォームに入力された値を表示する -->   <INPUT type="submit" name="submit" value="登録"> // c.php に遷移する   <INPUT type="submit" name="submit" value="戻る"> // a.php に戻る  </FORM> ● c.php (完了画面) -------------------------------------------------------------------------------- b.php について質問なのですが、 b.phpにおいて、登録ボタンと戻るボタンを2つつけて、 それぞれ遷移先を変えたいのですが、どうすればいいんでしょうか・・・? <FORM method="POST" action="c.php">と書いてしまうと、 戻るボタンを押しても戻らずに、c.phpに遷移してしまいますよね?? こういう場合ってJavaScriptとかで遷移先を指定するんですか・・? もしそうでしたら、JavaScriptがよくわからないので できればサンプルコード示していただけると助かります・・・。   

  • 選択された値をセッションで保存したい

    ラジオボタンで選択された値をセッションで保存し、DBまで持って行きたいのですが、どのようにすればよいでしょうか?なお、ラジオボタンからはPOSTで渡しています。どなたかわかる方ご教授お願いします。流れは【a.php => b.php => c.php => d.php => DB】c.phpにラジオボタンがあります。 [c.php]はこのような感じです。 <form name="form1" method="post" action="d.php"> <input type="radio" name="color" value="なし" >なし <input type="radio" name="color" value="赤">赤 <input type="radio" name="color" value="青">青 <input type="submit" name="Submit" value="送信">

    • ベストアンサー
    • PHP
  • チェックボックスの値の受け渡し

    PHP&MySQLで勉強しているものです。 ブラウザ上のチェックボックスにチェックすると、保存時にフィールド(CB)に値:1を書き込み、逆にブラウザのオープン時にフィールドの値が1の時にチェックボックスがチェックされた状態で表示させたいと思っています。 $sql="SELECT ID,NAME,CB FROM CASE" $rs=mysql_query($sql$dbHd) $row=mysql_fetch_row($rs) <INPUT type="checkbox" name="ip02" value"<?php print($row[2]) ?>"> 上記のようなINPUTを書いてみたものの、値はとれずの状態です。 どのように書き換えていけばいいでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう