質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

3回答

6511閲覧

ajaxで配列やオブジェクトを渡したい

move

総合スコア16

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

1クリップ

投稿2016/11/18 08:51

編集2016/11/18 18:31

以下のようなフォームがあるとして、そのフォームの内容をajaxでPOSTしたい
質問のためチェックボックスの数は減らしています。実際は結構多い

html

1<input type='hidden' name='issueid' value=10> 2<input type='checkbox' data-user_id=1 class="user"> 3<input type='checkbox' data-user_id=2 class="user"> 4<input type='checkbox' data-user_id=3 class="user"> 5<input type='checkbox' data-user_id=4 class="user"> 6<input type='checkbox' data-user_id=5 class="user"> 7<button id="send">send</button>

javascript

1$(function(){ 2 3 $("#send").click(function(){ 4 5 var data; 6 // ここから 7 $.each($(".user"),function(){ 8 // $(this).data('user_id') と$(this).prop('checked') 9 // の値のペアをdataにセットしていきたい。 10 }); 11 12 // このあたりまでにdataにissueidの値やチェックボックスの 13 // data-user_id $(this).data('user_id') 14 15 $.ajax({ 16 type: 'POST', 17 url: '/posturl', 18 data: data, 19 dataType: 'json' 20 }).done(function( data, status, xhr ){ 21 22 }); 23 return false; 24 }); 25 26});

POSTの受け取り側(php)で

php

1 array( 2 'issueid'=>10, 3 'users'=>array( 4 '1'=>false, // user_id=>チェックの有無 5 '2'=>true, 6 '3'=>true, 7 '4'=>true, 8 '5'=>false 9 ) 10);

hiddenの値と各チェックボックスのuser_idとチェックの有無を上記のような形に整形したい

そうするためにはjavascriptの
// ここから
// このあたりまで
の箇所でどのようなデータ(data)に整形するのがよいでしょうか?
よろしくお願いいたします。

###追記

html

1<input type='hidden' name='issueid' value=10> 2<?php foreach($this−>users as $user):?> 3// $this->chkdusersはcontroller側でセッションん存在するユーザーの事 4<input type='checkbox' class="user" data-user_id="<?php echo($user['id']); ?>"<?php if(in_array($user['id'],$this->chkdusers)){echo(' checked');} ?>> 5<?php endforeach; ?> 6<button id="send">send</button>

javascript

1// user選択(単発用) 2$(".user").change(function(){ 3 $.ajax({ 4 type: 'POST', 5 url: 'ajax.php', 6 timeout: 10000, 7 data: {'issueid':$("input[name=issueid]").val(),'user_id': $(this).data('user_id'),'checked': $(this).prop('checked')}, 8 dataType: 'json' 9 }).done(function( data, status, xhr ){ 10 11 }); 12}); 13 14// 以下がコメントのやりとりで一気にチェック状態を変化させた時の処理 15 16// 全選択 17$("#allselect").click(function(){ 18 19 // 現在全選択されている場合は全解除 20 if($(".user").length == $(".user:checked").length) 21 { 22 $(".user").prop('checked',false); 23 } 24 else { 25 // 通常は全選択する 26 $(".user").prop('checked',true); 27 } 28 29 // この時$(".user").change(function()は起こらないなので全選択や全解除の情報、つまり 30 // ページ内の全ユーザーのチェックの有無を送らないといけないと思った。 31 32 // この部分を要領良く送るのにどういう書き方が良いのか?という質問でした。 33} 34 35// 一括絞込選択 36$("#ikkatu").click(function(){ 37 // コメントのやりとりで男のみ選択するなど特定の条件で一気にチェックボックスの状態を書き換える場合の処理 38 39 // 簡素化のため単純に偶数番目をチェックして奇数番目をチェックはずす処理にはしょってます。 40 $(".target:even").prop('checked',true); 41 $(".target:odd").prop('checked',false); 42 43 // この時$(".user").change(function()は起こらないなので 44 // ページ内の全ユーザーのチェックの有無を送らないといけないと思った。 45 46 // この部分を要領良く送るのにどういう書き方が良いのか?という質問でした。 47 48}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/11/18 16:17

javascript simple object notation (JSON) すでにあるよ
move

2016/11/18 18:21

すいません、言葉のチョイスが悪かったです。どのようなJSONを作れば要領よく渡せるでしょうか、とするべきでした。
kei344

2016/11/18 18:45

質問内容については解決されているように見受けられます。追加の質問は新たに質問されることをお勧めします。
move

2016/11/18 19:24

kei344様、少しでも多くの実装方法学べそうでしたので少し解決済みに時間をずらしておりました。解決済みにさせていただきます。
guest

回答3

0

ベストアンサー

html

1<input type='hidden' name='issueid' value=10> 2<input type='checkbox' name='users' value=1> 3<input type='checkbox' name='users' value=2> 4<input type='checkbox' name='users' value=3> 5<input type='checkbox' name='users' value=4> 6<input type='checkbox' name='users' value=5> 7<button id="send">send</button>

javascript

1$(function(){ 2 $("#send").on('click', function(){ 3 var data = {}; 4 data['issueid'] = $('input[name=issueid]').val(); 5 $('input[name=users]').each(function(k,v){ 6 if ($(v).prop('checked')) { 7 data[$(v).val()] = true; 8 } else { 9 data[$(v).val()] = false; 10 } 11 }); 12 13 $.ajax({ 14 type: 'POST', 15 url: '/posturl', 16 data: data, 17 dataType: 'json' 18 }).done(function( data, status, xhr ){ 19 20 }); 21 return false; 22 }); 23 24});

未検証ですが、試してみてはいかがでしょうか?

投稿2016/11/18 09:06

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

move

2016/11/18 14:35

ありがとうございますm(_ _)m少しだけ、コード自分の都合の良いように変えたら、php側で目的としていたデータを取得できました。
退会済みユーザー

退会済みユーザー

2016/11/18 15:05

少しでもお役に立てたようなら良かったです。
move

2016/11/18 15:53

実案件ではかなり膨大な量&複雑になるので、もともとバックエンドの人間ですので、あまりjavasctipt得意でなく、この部分どう効率的に渡すか他の方の意見も聞きたくて質問させていただきました。 別の回答者様のコメントで、もしかしたらロジック自体見直すと劇的に処理が簡素になるかもしれませんので、少し自分なり検討&その返事を待ちたいと思いますので、解決済みにするのは少し置いてからにしたいと思います。それでロジック自体はこのままとなればぜひ採用させていただきたいと思います
move

2016/11/20 15:23

パフォーマンス等検討の上、回答いただいた方法を採用させていただきました、ありがとうございますm(_ _)m
guest

0

とりあえずこんな感じでどうでしょう?

<script> $(function(){ $('#send').on('click',function(e){ var f=$(this).parents('form'); var a={}; a['issueid']=f.find('input[name=issueid]').val(); a['users']={}; f.find('input.user').each(function(){ a['users'][$(this).data('user_id')]=$(this).prop('checked'); }); console.log(JSON.stringify(a)); e.preventDefault(); }); }); </script> <form> <input type='hidden' name='issueid' value=10> <input type='checkbox' data-user_id="1" class="user"> <input type='checkbox' data-user_id="2" class="user"> <input type='checkbox' data-user_id="3" class="user"> <input type='checkbox' data-user_id="4" class="user"> <input type='checkbox' data-user_id="5" class="user"> <button id="send">send</button> </form>

投稿2016/11/18 09:36

yambejp

総合スコア114505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

move

2016/11/18 15:48

ありがとうございます、機能する形に近いデータが渡せましたm(_ _)m
guest

0

通常はこれだけで、事足りるはずですが…

html

1<!DOCTYPE HTML> 2<html lang="ja"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <form action=""> 9 <input type='hidden' name='issueid' value=10> 10 <input type="checkbox" name="user[]" value="1" /> 11 <input type="checkbox" name="user[]" value="2" /> 12 <input type="checkbox" name="user[]" value="3" /> 13 <input type="checkbox" name="user[]" value="4" /> 14 <input type="checkbox" name="user[]" value="5" /> 15 <button type="button" id="send">send</button> 16 </form> 17 <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 18 <script type="text/javascript"> 19 $(function () { 20 $('#send').on('click', function () { 21 var data = $("form").serialize(); 22 23 $.ajax({ 24 method: 'post' 25 , data: data 26 , url: 'ajax.php' 27 , success: function (res) { 28 console.log(res); 29 } 30 }); 31 }); 32 }); 33 </script> 34 </body> 35</html>

ajax.php

php

1<?php 2 3var_dump($_POST);

#追記

common.php

php

1<?php 2$checkboxes = array( 3 1 => 'チェック1' 4 , 2 => 'チェック1' 5 , 3 => 'チェック1' 6 , 4 => 'チェック1' 7);

index.php

php

1<?php 2require_once 'common.php'; 3?><!DOCTYPE HTML> 4<html lang="ja"> 5 <head> 6 <meta charset="UTF-8"> 7 <title></title> 8 </head> 9 <body> 10 <form action=""> 11 <input type='hidden' name='issueid' value=10> 12 <?php foreach ($checkboxes as $val => $check): ?> 13 <input type="checkbox" name="user[]" value="<?= $val; ?>" /><?= $check; ?> 14 <?php endforeach; ?> 15 <button type="button" id="send">send</button> 16 </form> 17 <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 18 <script type="text/javascript"> 19 $(function () { 20 $('#send').on('click', function () { 21 var data = $("form").serialize(); 22 23 $.ajax({ 24 method: 'post' 25 , data: data 26 , url: 'ajax.php' 27 , success: function (res) { 28 console.log(res); 29 } 30 }); 31 }); 32 }); 33 </script> 34 </body> 35</html>

ajax.php

php

1<?php 2 3require_once 'common.php'; 4 5$post = filter_input_array(INPUT_POST); 6 7$res = []; 8foreach ($checkboxes as $val => $check) { 9 $res['user'][$val] = in_array($val, $post['user']); 10} 11 12var_dump($res);

#追記 No2

php

1<?php 2ini_set('display_errors', true); 3error_reporting(E_ALL); 4 5/** 6 * index.php 7 */ 8require 'common.php'; 9 10$page = (int) filter_input(INPUT_GET, 'page') * 5; 11$sql = sprintf('select * from User limit %d, 5', $page); 12$users = Db::select($sql); 13 14$sql_total = 'select * from User'; 15$total_rows = Db::select($sql_total); 16$total = count($total_rows); 17?> 18<!DOCTYPE HTML> 19<html lang="ja"> 20 <head> 21 <meta charset="UTF-8"> 22 <title></title> 23 <style type="text/css"> 24 #response { 25 height: 200px; 26 overflow: scroll; 27 background: #F6F6F6; 28 } 29 </style> 30 </head> 31 <body> 32 <div> 33 <div> 34 <button id='send' type="button">送信</button> 35 </div> 36 <table> 37 <thead> 38 <tr> 39 <th> 40 <label> 41 <input type="checkbox" id='checkall'> 42 全選択 43 </label> 44 </th> 45 <th>id</th> 46 <th>name</th> 47 <th>email</th> 48 </tr> 49 </thead> 50 <tbody> 51 <?php foreach ($users as $user) : ?> 52 <tr> 53 <td> 54 <?php if (isset($_SESSION['user'][$user['id']]) && $_SESSION['user'][$user['id']]) : ?> 55 <input type="checkbox" class="user_chk" name='user[]' value="<?= h($user['id']); ?>" checked="checked" /> 56 <?php else: ?> 57 <input type="checkbox" class="user_chk" name='user[]' value="<?= h($user['id']); ?>" /> 58 <?php endif; ?> 59 </td> 60 <td><?= h($user['id']); ?></td> 61 <td><?= h($user['name']); ?></td> 62 <td><?= h($user['email']); ?></td> 63 </tr> 64 <?php endforeach; ?> 65 </tbody> 66 </table> 67 <?php echo pagination($total); ?> 68 69 <h3>Ajax Response</h3> 70 <div id="response"> 71 72 </div> 73 </div> 74 <script type="text/javascript" src="//code.jquery.com/jquery-3.1.1.min.js"></script> 75 <script type="text/javascript"> 76 $('.user_chk').on('change', function () { 77 var userid = $(this).val(); 78 var checked = $(this).prop('checked'); 79 $.ajax({ 80 url: 'session.php' 81 , method: 'post' 82 , data: { 83 userid: userid 84 , value: checked 85 } 86 , success: function (response) { 87 var pre = $('<pre>'); 88 pre.text(response); 89 $('#response').append(pre); 90 } 91 }); 92 }); 93 94 $("#checkall").on('click', function () { 95 $('.user_chk') 96 .prop('checked', $("#checkall").prop('checked')) 97 .trigger('change'); 98 }); 99 100 $("#send").on('click', function () { 101 $.ajax({ 102 url: 'send.php' 103 , method: 'post' 104 , success: function (res) { 105 $('#response').text(res); 106 } 107 }); 108 }); 109 </script> 110 </body> 111</html>

投稿2016/11/18 09:19

編集2016/11/18 18:52
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

move

2016/11/18 09:31

ありがとうございます、上記でいければコーディング量を減らせてたすかるのですが、上記の場合、チェックされていないチェックボックスの情報(上記では例えばvalueが4のチェックボックスはチェックされていないという情報がPOST側へ行かないように思います。)POST受信側はチェックボックスの一覧に何が(value)存在するかわからないためその情報も渡したいですが、良い方法はありますか?
退会済みユーザー

退会済みユーザー

2016/11/18 09:34

渡す必要って普通ないはずですよ。
move

2016/11/18 09:50

?? 質問ではdata-user_idとしている部分(もちろんvalueでも結構なんですが)これがユーザー一人を表しているとします。 セッションデータにどのユーザーがON/OFFなのかという情報を保存しているのですが(ようは確定されるまではDBではなくセッションに)このチェックボックスの一覧はユーザー数が多いため、ページング、また、検索ボックスでユーザーの絞り込みも行うため ”POSTされる側は一覧にどのユーザーが列挙されているかはわからない” という想定です。 例えばユーザーID3のチェックボックスをチェック -> POSTデータに3はONという情報がふくまれているのでPOST先でセッションデータ更新、 次にユーザーID3のチェックボックスをアンチェック-> アンチェックという情報は送られないのでセッションデータはID3のユーザーはONのまま という状況になると思うので必要とおもっているのですが。
退会済みユーザー

退会済みユーザー

2016/11/18 09:55 編集

POSTで渡ってきていないものは false になるでしょう。 セッションであれ、DBであれ、やっていることは同じですよ。 セッションはグローバルにどこからでもアクセス可能なのだから、falseの情報を渡さなくても判定できます。
退会済みユーザー

退会済みユーザー

2016/11/18 10:00 編集

ON/OFFの情報をセッションに持っているなら、そもそも Ajaxで値を渡す必要すらないように思えます。
move

2016/11/18 10:01

2000人のユーザーがいたとして1ページ100人表示で上記のようなチェックボックスがあった場合 まず1ページ目(ユーザーID1〜100)が表示されている状態でユーザーID5をチェックしてPOSTするとセッションデータでユーザーID5がON、ページングで3ページ目に移動して(ユーザーID201〜300)が表示されている状態でユーザーID205をチェックしてPOSTするとセッションデータのユーザーID205はONにしますが、データがわたってきていないものをすべてfalseつまりOFFにするとユーザーID5はアンチェックしていないのに、OFFになってしまうのでその場合はどうすればよいでしょうか
退会済みユーザー

退会済みユーザー

2016/11/18 10:04

この処理の目的を具体的に提示してもらわないと、何が問題になっていて、何が懸念なのかが見えません。 より、実際のケースがイメージしやすいソースコードを提示ください。。
move

2016/11/18 10:06

ユーザーの母数が多いのでセッションにはONのユーザーIDだけ持っています、OFFの情報がくればunsetするという扱いで。 > そもそも Ajaxで値を渡す必要すらないように思えます。 ページングなどをする度データをPOSTするという事でしょうか?
退会済みユーザー

退会済みユーザー

2016/11/18 10:08 編集

そもそも、ユーザー情報はどうやって管理しています? セッション二ユーザーリストを持っていると言っているけど、ブラウザを閉じた時点で破棄されるというセッションの機能自体を理解していますか?
move

2016/11/18 10:08

実際の処理の説明となると膨大になるため、簡易化はしましたが、最終POST側のphpでこう言った形のデータが欲しいという事は明確に質問文に記載させていただいているはずなのですが、、、(falseが必要という部分)
退会済みユーザー

退会済みユーザー

2016/11/18 10:15

私の回答としては、そんな形でデータが必要になるというのは、設計上何かしら無理があるはずですよ、ということが回答の趣旨です。 どーしてもその形で欲しいというのであれば、yambejpさんの回答を参考にされてはいかがですか?
move

2016/11/18 10:23 編集

実際のシステムとしてはメール送信対象を選択するというページになります。 このページで関連するテーブルは2つ、 1.ユーザーテーブル 2.送信対象テーブル 2にはメールIDとユーザーIDのペアが保存されている。 ここで始めてこのページに入った時(実際にはGETでメールIDつきで)セッション生成 送信対象テーブルから対象となっているユーザーIDをONとしてセッションに保存 ユーザーテーブルから全ユーザー取得(ページングのためlimitとoffsetで絞りながらの抽出) 各ページセッションデータからONのユーザーのチェックボックスはONがデフォルト、 この状態で一つ一つチェックボックスをchangeした場合はそのデータのみajaxで都度POSTし、受け取り側でセッション更新、 またページに表示されている中で特定の(例えばその一覧で男性にすべてチェック等、一括して複数選択できるボタンがある) 条件を満たすチェックボックスを一気にチェックした時にはそのページ内のユーザーIDの一覧とそのON/OFFの情報が必要となってきているという状況です。 そして複数ページ行ったり来たりでチェックボックスをONやOFFにしたのち最終確定ボタンを押した時にセッションにあるデータで送信対象テーブルを書き換えるという処理です。
退会済みユーザー

退会済みユーザー

2016/11/18 10:31

なるほど。その場合なら、user パラメータでON/OFFの情報をajaxのパラメータで渡す必要ないですね。 POSTできる値にも制限があるのだし、必要のないものを送る必要はありません。少ない方がいい。 チェックボックスのchangeイベントのタイミングでセッションにONのものだけ(OFFの情報を持っていても構わない)を保存し、ajax.php がわでSESSIONをDBを突き合わせてば済むことになります。
move

2016/11/18 12:27 編集

職場から帰宅のため、返事が遅くなりました。長々とおつきあいいただきありがとうございます。 コメントを見てしばらく考えてみたのですが、私に数学的な脳が足りないのかもしれず理解ができない部分があるのでもう一度お願いします。(OFF状態を送らなくてすむならそれに越した事はないので。。。) 実データは膨大なのでミニマムに考えて、メールIDは考えず、ユーザー母数10人(ユーザーID1~10)、1ページあたり、5人表示として。 DBには最初メール送信対象者がユーザーID(2,3,7,10)が保存されていた場合にそれを再度編集する場面を想定。 1ページ目には最初ID1~5のユーザーのチェックボックスがあり、(2,3)にチェックが入っている状態。 ここで一括チェック状態変更操作で1ページ目のチェック状態が(1,3,5)になったとする。 ajax/POSTでONである1,3,5がPOSTされ、ajax.php側で1,3,5をONにすると(※) セッションデータは (1,2,3,5,7,10) (※実仕様ではページ内で検索BOXにより絞り込みができるため、そのページにuid1~5がいるという保証はないのでPOSTデータ1,3,5とDBの値2,3,7,10を突き合わせても2がチェックを外されたかページに絞り込みのため存在しなかったのかどちらかはわからない。) 次に2ページ目に移動、セッションデータからデフォルト値をセットすると、チェックボックスは(7,10) ここでまた一括操作で選択状態を(6,9,10)に変更すると ajax/POSTでONである6,9,10がPOSTされ、ajax.php側で6,9,10をONにするとセッションデータは (1,2,3,5,6,7,9,10) ここで操作者としては1ページ目は選択状態は(1,3,5),2ページ目は選択状態(6,9,10)を期待するが、セッションデータから表示状態を設定するので 実際には1ページ目は(1,2,3,5)2ページ目は(6,7,9,10)がチェックされる事になると思う。 ここで確定ボタンをクリックすると 操作者の期待するデータ(1,3,5,6,9,10) セッションのデータ(1,2,3,5,6,7,9,10) DBのデータ(2,3,7,10) このセッションに残っているデータとDBのデータを比較して操作者の希望するデータを割り出す方法がわからないのですが、ロジック的に Kosuke_Shibuyaさんがおっしゃているのはどういうロジックですか?
move

2016/11/18 12:39

実仕様を少し追記させていただくと、GETパラメータとしてあるメールIDをでこのページに入ってきたら、確定・キャンセル・もしくは別メールIDをパラメータでこのページに入ってこない限り、そのメールIDの送信者をセッションに持っておく、 操作者は検索ボックスなどでユーザーの絞りこみができ、 まず東京に住んでいるユーザーだけで絞り込み、メールを送りたいユーザーにチェックを入れる、 次に千葉に住んでいるユーザーで再度絞り込みなおしてユーザー一覧を表示しその中から送りたいユーザーにチェックをいれていく、そして最終確定ボタンを押すと、チェックを入れたメンバーだけDBに保存されるという仕様です。
退会済みユーザー

退会済みユーザー

2016/11/18 17:28

サンプルソース作成したものをこちらに上げておきました。 早めに確認してください。適当なタイミングで削除しますので。 https://github.com/ShibuyaKosuke/teratail_ans
move

2016/11/18 17:35

そこまでしていただきありがとうございます。さきほど一括ダウンロードいたしました。確認させていただきますm(_ _)m
move

2016/11/18 18:20 編集

現在の実システムのソースから幾分か変数名変えたり、簡素化はしていますが、追記しました。 いただいたソースですが、ソースレベルでの確認だけで、まだ実行はしていないのですが、ページ内のチェック状態をマウスで一個づつ変えた時の操作ではなく全選択や全解除、またコメントのやりとりで書かせていただいた男だけチェックをいれるなどの一括操作をした場合はchangeイベントが飛ばなかったため今回のような質問をさせていただく事になったのですが、そういった操作の時はいただいたソースはどう動くのでしょうか。
退会済みユーザー

退会済みユーザー

2016/11/18 18:34

そういう経緯とか、五月雨式で後出しされても困ります…。 勘弁してください。
退会済みユーザー

退会済みユーザー

2016/11/18 18:51

とりあえず、index.php だけ、回答に追記します。
move

2016/11/18 18:54

ソースまでいただいて申し上げることではないのですが、当初の質問ではシステム概要を説明すると、かなりのボリュームになる為、実際に今必要としている部分のみ質問をさせていただいておりました。 追記分の事を想定し、必要部分のみ全体を説明せずとも回答いただける質問をしたつもりだったのですが、チェックを外したデータを送らなくてできるとコメントいただきましたので、そういうロジックが可能であれば是非作り直したいと思い概要をコメントで説明させていただいた次第です。 昨日の19時23分のコメントで一括でチェック状態が変わる旨をコメントさせていただいておりましたがそれに対する返信で、やはり渡さなくてもできるとの返信をいただしましたので、決して五月雨でも後出しジャンケンでも無いと思うのですが、、、いただいたソース大変読みやすく素晴らしいものでしたが、ロジックは現在の実システムとほぼ同じように見受けられました。こんな時間まで申し訳ありませんでした。
退会済みユーザー

退会済みユーザー

2016/11/18 19:23 編集

全選択は機能として存在していることは伝えていても、それが問題の本質に関わっているとは読み取れませんよ・・・。ちなみに、「後出し」について言っているのは、「ページング」のこと。「ページング」があることで「セッション」が必要になり、セッションのON/OFFを保持する必要があるから、ON/OFFを全て投げたいというよう要件になっているわけです。 ページングがない場合なら、単純にチェックされているものだけ送れば済むはずですよね。 まあ、いいけど。とりあえず 回答に index.php 全体を載せて起きました。 パラメータで宛先ユーザーを渡すのはCSRF発生の要件になるから、セッションから直接検索する、提示したソースの方が安全でしょうね。
move

2016/11/18 19:22

変更後自身でtriggerを引いてやることで、全チェックボックスをajax送信という事ですね。これであれば単発分の処理のをそのまま使えるので、コーディング面で綺麗です。ただしチェックボックスの個数分ajax通信が発生するので、チェックボックスの配列データを一括で送るか、トリガーを引いて送るか少し検討してみます。目的の事は実現可能となりましたので解決済みにさせていただきます。ありがとうございました。
退会済みユーザー

退会済みユーザー

2016/11/18 19:27 編集

その方がいいと思います。サンプルなんで動きが読み取れればいいかと思って手抜きしましたが。 ?users=1,2,3,4 みたいな形でもいいかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問