はじめまして皆さんのお力をお借りしたいです
いま、あるwebページを作っています
サーバーサイドとフロントエンドで別々の担当者が
作成していて、僕の担当はフロントサイドです
そこで
webページで表紙している画像を
何点か利用者に選んでもらい
その画像のファイル名を
カンマ区切りで渡してあげる必要があるのですが
どのようにやればよいのかまったくわかりません
(画像の横にチェックボタンを作成し、押された画像のパスを
サーバーサイドに渡そうと思い作成しています)
どのようなものを用いて行えば
実現が可能でしょうか?
素人なので詳細まで教えていただければ
大変助かります
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
ベストアンサー
csv形式でサーバーサイドに渡してあげる必要があるのですが、どのようにやればよいのかまったくわかりません
下記情報が必要になります。
- サーバ側にどのようなパラメータで渡すのか
- CSVフォーマットでどのセルに画像パスを格納するのか
とりあえず、RFC4180でCSVが定義されていますので目を通してください。
仮に「1行のカンマ区切りで画像ファイルパスを格納する」としてCSVフォーマットは次のように書けるでしょう。
JavaScript
1'use strict'; 2var imgpaths = ['http://example.com/sample1.jpg', 'http://example.com/sample2.jpg', 'http://example.com/sample3.jpg'] 3var csv = imgpaths.map(function (value) { return '"' + value.replace(/"/g, '""') + '"'; }).join(); 4console.log(csv); // "http://example.com/sample1.jpg","http://example.com/sample2.jpg","http://example.com/sample3.jpg"
サーバへのリクエストに関しては <form>
で送信するか、XMLHttpRequest
で送信するか、を目的に合わせて選んでください。
(2015/11/24 19:35追記)
CSVファイルを使う用途としてCSVファイルをサーバにUPしてデータベースに入れる処理はよくありますが、ひょっとしてそういう可能性はないでしょうか。
だとすれば、<input type="file">
でUPするだけの実装で済みますが。
(2015/12/01 12:38追記)
このようなかんじで画像の横にチェックボタンを置き、最後に『送信』ボタンを押すと押されたものをまとめて渡すようにしたいのですが。
次のように書きます(jsfiddleにサンプルUP済)。
HTML
1<!-- sample.php に画像リスト(csv)を送信する --> 2<form id="sample" method="GET" action="sample.php"> 3 <ul> 4 <li> 5 <label> 6 <input type="checkbox" name="image[]" value="1.jpg" /> 7 <img src="images/1.JPG" alt="img01" width="250" height="50" /> 8 </label> 9 </li> 10 <li> 11 <label> 12 <input type="checkbox" name="image[]" value="2.jpg" /> 13 <img src="images/2.JPG" alt="img02" width="250" height="50" /> 14 </label> 15 </li> 16 </ul> 17 <p><input type="submit" value="submit"></p> 18</form> 19 20<script> 21'use strict'; 22(function () { 23 function handleSubmit (event) { 24 var form = event.target, 25 inputs = form.elements['image[]'], 26 hidden = inputs[0].cloneNode(false), 27 imglist = []; 28 29 for (var i = 0, l = inputs.length, input; i < l; ++i) { 30 input = inputs[i]; 31 if (input.checked) { 32 imglist.push(input.value); 33 input.disabled = true; // input[type=checkbox] の送信無効化 34 } 35 } 36 37 if (imglist.length > 0) { 38 hidden.type = 'hidden'; // input[type=chwckbox] の代替要素 39 hidden.value = imglist.join(); // "1.jpg,2.jpg” を代入(※画像ファイル名に " を含まない場合に限る。サーバサイドのCSVパーサが "," で区切って分割代入する仕様ならこの方法。RFC4180 準拠なら "" で各データセルを括る事。) 40 input.parentNode.insertBefore(hidden, input); 41 console.log(hidden); 42 } else { 43 console.log('no checked image'); 44 } 45 46 event.preventDefault(); // 検証の為、submit をキャンセル (本番では外す) 47 } 48 49 function main () { 50 document.getElementById('sample').addEventListener('submit', handleSubmit, false); // 要 IE9+ (IE8- をサポートするなら attachEvent と併用) 51 } 52 53 main(); 54}()); 55</script>
ただし、この場合はサーバサイドスクリプトが側で input[type=checkbox]
を受け取って処理するのが普通です。
送信前にわざわざ CSV フォーマットに変換しなくてもサーバ側で image[]
のパラメータで選択した画像ファイル名を受け取れるわけですから CSV への変換コストが無駄になります。
サーバ側の仕様を変更できない事情があるなら仕方がないですが、このコードは非効率的な手段の為、サーバサイドスクリプト製作者と相談する事をお勧めします。
Re: Yuki_Tsutsumiさん
投稿2015/11/24 10:30
編集2015/12/01 03:38総合スコア18194
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
フロントとサーバでどういう作業の分け方をしているんですか?
おそらくデータを画面から選択してもらってサーバに値を処理させるのであれば、選択したデータを取得するのもサーバ側の処理で実行するので、フロント側は渡すところまで考えなくて良いのではないかと思いました。
投稿2015/11/24 10:04
総合スコア590
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
CSV形式というのはカンマ区切りということですか?
それともファイルの形にして送信するのでしょうか?
単にファイルパスの一覧を送るだけなら
送る側
HTML
1<form name="check.php" method="post"> 2<input type="checkbox" name="filepath[]" value="ファイルパス1">ファイルパス1 3<input type="checkbox" name="filepath[]" value="ファイルパス2">ファイルパス2 4<input type="submit" value="送信"> 5</form>
PHP
1$filepath = $_POST["filepath"]); //チェックされたファイルパスが配列で受け取れる 2//以下、適当な処理
みたいな感じで簡単なのですが・・
投稿2015/11/24 10:12
総合スコア1857
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。