###前提・実現したいこと
【前提】
PHP(5.1.6)で受注DBの情報を参照・更新する機能を持ったWEBシステムを作っています。
- phpがモデルとして起動し内部的にviewを呼び出します。
- mainFormに検索条件を入れて「検索」ボタンを押すと条件に合わせたクエリを発行し、結果を表にして表示します。
- リストの各行にテキストボックスを配置し、隣に「更新」ボタンを配置します。
※テキストボックスにはデフォルトで0か1が入っています。
【実現したいこと】
ボックスの値を変更して「更新」ボタンを押すと、入力されている数値をPOSTして変更された数値にupdateするクエリを発行する。
###発生している問題
リストが複数件ヒットする場合にそれぞれの行に対応した値をPOSTする方法ですが、下記のようにリストの各行ごとにform要素で括りユニークなIDを付与してやってupdate.phpにPOSTする方法がよいでしょうか。
いろいろ調べてみましたが一般的な方法が見つからず、よい方法がありましたら教えていただきたく、質問させていただきます。
よろしくお願いいたします。
##追記(3/7)
せっかくなので、勉強がてら未経験のajaxでの実装を試みています。
下記に追記した関数でボタンのクリックイベントを捕まえるところまではうまくいきました。
ですが、これだとリストが複数行あった場合に最終行のボタンにしか反応してくれません。
関数を行数分生成するというのもなんか違う気がしますし、うまい方法がありましたらお知恵をいただけるとありがたいです。
###ソースコード
php
1<? 2//index.php 3define('TOP', '../../../'); 4require_once(TOP . "lib/common.php"); 5$session = fnc_session_check(); 6 7//mainFormに入力された検索条件いろいろ 8$search = $_REQUEST['search']; 9$hoge= $_REQUEST['hoge']; 10$fuga= $_REQUEST['fuga']; 11//中略 12 13//クエリ生成 14$list_query = "select col01,col02 from table where ". 15(($search== '' || $search== null ) ? "" : " and col01 like ".$search) 16//中略 17; 18 19//クエリ実行して結果表示させる 20//結果は$dataに格納 21require_once(TOP . "lib/data/search.php");
html
1<!-- index.tpl --> 2<div class="pankuzu">情報管理します</div> 3 4<div class="main"> 5<form name="mainForm" id="mainForm" method="get" action="./index.php"> 6<div id="search_table" > 7<table class="commontable"> 8<caption>■検索条件</caption> 9<tr> 10 <th>検索条件いろいろ</th> 11 <td> 12 <input type="text" class="base" name="search" id="search" value="<? $params['search'];?>" /> 13 </td> 14</tr> 15</table> 16<div class="button"> 17 <!-- ボタンを押すと検索結果を表示 --> 18 <input type="button" value="検索" onClick="fnc_search_check();" class="btn_big"> 19</div> 20 21<table> 22<caption> 23■検索結果 24</caption> 25<tr> 26 <!-- ヘッダ --> 27 <th>表示項目いろいろ</th> 28 <th>更新対象フラグ</th> 29 <th>ボタン</th> 30</tr> 31 <!-- リスト --> 32<? foreach($list as $data){ ?> 33<tr> 34 <td><? $data['col01']?></td> <!-- 項目1 --> 35 <!-- 問題の箇所ここから --> 36 <td> 37 <!-- formのidを行数に応じて命名(subform1,subform2...)--> 38 <form name="subform<? $data['rownum']?>" id="subform<? $data['rownum']?>" method="post" action="./update.php"> 39 <input type="text" maxlength=1 id="<? $data['col01']?>" value="<? $data['col02']?>"> 40 </td> 41 <td> 42 <input type="button" value="フラグ更新" > 43 </td> 44 </form> 45 <!-- 問題の箇所ここまで --> 46<? } else { ?> 47該当データはありません。<br/> 48<? } ?> 49</table> 50<div id="result"></div> 51 52<script type="text/javascript"> 53<!-- 54 $("#button<? $data['rownum']?>").click(function() { 55 56 // 操作対象のフォーム要素を取得 57 var $form = $(this); 58 59 // 送信ボタンを取得 60 // (後で使う: 二重送信を防止する。) 61 var $button = $form.find('button'); 62 63 // 送信 64 $.ajax({ 65 url: $form.attr('action'), 66 type: 'POST', 67 data: $form.serialize(), 68 timeout: 10000, // 単位はミリ秒 69 70 // 送信前 71 beforeSend: function(xhr, settings) { 72 // ボタンを無効化し、二重送信を防止 73 $button.attr('disabled', true); 74 }, 75 // 応答後 76 complete: function(xhr, textStatus) { 77 // ボタンを有効化し、再送信を許可 78 $button.attr('disabled', false); 79 }, 80 81 // 通信成功時の処理 82 success: function(result, textStatus, xhr) { 83 // テキスト表示 84 $('#result').text('OK'); 85 }, 86 87 // 通信失敗時の処理 88 error: function(xhr, textStatus, error) {} 89 }); 90 }); 91}); 92--> 93</script>
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。