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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

PHP

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

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

1335閲覧

form内のエレメントの複数の属性値をPHPに送信したい

WeilSpinor

総合スコア170

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

PHP

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

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/04/11 13:57

###実現したいこと

実現したいことは以下になります:
・HTMLフォーム内のエレメントの属性値をPHPに送信したい
・送信したいデータは、『style属性、name属性、value属性(またはinnerHTML)』
・postやgetだと基本的にvalue属性という一つの属性値しか送れないので困っている
・javascriptでDOM操作して、value属性値に他の全ての属性値をカンマで区切って入力→php側で分離する、みたいなことも考えたが、不自然な気がする。

以下のようなことをしたいです。

html

1<form method="post" action="hogehoge.php" > 2<input type="text" name="aaa" style="background-color:red" value="foo1" innerHTML="hoge1"> 3<input type="text" name="bbb" style="background-color:yellow" value="foo2" innerHTML="hoge2"> 4<button type="submit">送信</button> 5</form>

php

1<?php 2//各inputのname、style、value、innerHTMLのデータを、各配列で受け取る 3$for_aaa = スーパーグローバル変数的な何かfor_aaa; 4$for_bbb = スーパーグローバル変数的な何かfor_bbb; 5 6print_r($for_aaa);//Array([0]=>"aaa",[1]=>"rgba=(hoge,hoge,hoge,hoge);",[2]=>"foo1",[3]=>hoge1) 7print_r($for_bbb);//上同様 8?>

ご回答宜しくお願いします。

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

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

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

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

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

maisumakun

2019/04/11 13:59

さっきの質問とほとんど変わっていない気がするのですが、別にした意味はありますでしょうか?
WeilSpinor

2019/04/11 14:20 編集

本当はもっと自由にname属性のないdivでやりたいのですが、今回の質問は、その妥協版(つまりformとinputを使うこと)です。 追記をしすぎるとややこしくなるので、別に立てました。 すみません。
maisumakun

2019/04/11 14:33

前の質問に回答しましたが…結局「なんのために」HTMLをサーバサイドで保存する必要があるのでしょうか。
Y.H.

2019/04/11 14:36

ではhttps://teratail.com/questions/184013 の方は ご自分で以下を回答として記載しクローズ(解決済み)お願いします。 「本当はもっと自由にname属性のないdivでやりたいのですが、今回の質問は、その妥協版(つまりformとinputを使うこと)です。 追記をしすぎるとややこしくなるので、別に立てます。」
guest

回答3

0

各データをJSON化して送れば良いのでは。

以下サンプル

html

1 <form method="post" action="hogehoge.php" > 2 <input type="text" name="aaa" style="background-color:red" value="foo1" innerHTML="hoge1"> 3 <input type="text" name="bbb" style="background-color:yellow" value="foo2" innerHTML="hoge2"> 4 <button id="submit-btn" type="submit">送信</button> 5 </form> 6 7 <script type="text/javascript"> 8 9 const getStyleNameValue = function(elm){ 10 return { 11 [elm.name]:{ 12 name:elm.name, 13 value:elm.value, 14 style:elm.getAttribute("style") 15 } 16 } 17 } 18 19 const submitForm = function(json){ 20 const xhr = new XMLHttpRequest(); 21 xhr.open("POST", 'hogehoge.php', true); 22 xhr.setRequestHeader("Content-Type", "application/json"); 23 xhr.onload = () => { 24 console.log("ok"); 25 }; 26 xhr.onerror = () => { 27 console.log(xhr.status,"err") 28 }; 29 xhr.send(json) 30 } 31 32 document.getElementById("submit-btn").addEventListener("click",function(ev){ 33 ev.preventDefault(); 34 const inputAaaElm = document.getElementsByName("aaa")[0]; 35 const inputBbbElm = document.getElementsByName("bbb")[0]; 36 37 const aaaObj = getStyleNameValue(inputAaaElm); 38 const bbbObj = getStyleNameValue(inputBbbElm); 39 40 const bodyObj = Object.assign(aaaObj,bbbObj) 41 42 const bodyJson = JSON.stringify(bodyObj); 43 44 submitForm(bodyJson); 45 }); 46 47 </script>

生成されるjson

json

1{ 2 "aaa":{ 3 "name":"aaa", 4 "value":"foo1", 5 "style":"background-color:red" 6 }, 7 "bbb":{ 8 "name":"bbb", 9 "value":"foo2", 10 "style":"background-color:yellow" 11 } 12}

投稿2019/04/11 14:38

編集2019/04/11 14:40
kou0179

総合スコア304

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

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

0

なぜ(何のために)やりたいのか判りませんが、方法としては質問者さんが考えたこれ↓しかないです。
送信するデータフォーマットについては、formでカンマ区切り、ajaxでjsonなどご自由に。

・javascriptでDOM操作して、value属性値に他の全ての属性値をカンマで区切って入力→php側で分離する、みたいなことも考えたが、不自然な気がする。

HTMLでは、サーバーに対してリクエストを行う場合、以下のMETHODでアクセスします。

GET,POST,HEAD,PUT,DELETE,CONNECT,OPTIONS,TRACE,PATCH

一般的にはWebサーバーで受け付けるMETHODはGET, POST, HEADくらいです。

各METHODの詳細はこのあたりを参照ください。(developer.mozilla.org)HTTP リクエストメソッド

投稿2019/04/11 14:31

Y.H.

総合スコア7914

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

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

Y.H.

2019/04/11 14:44

低評価入れた方へ。 低評価の理由お教え願えないでしょうか? 私が何か勘違いや思い違いをして回答しているのであれば訂正や撤回を行いますので。
guest

0

ベストアンサー

めんどうなのでフォームのinnerHTMLを送ってしまえば?
postデータ確認のためphpで受ける設定にしてあります。
あとはphp側でDOMDocumentかなにかで処理すればよいでしょう

  • my.php

javascript

1<?PHP 2ob_start(); 3print_r($_POST); 4$a=ob_get_contents(); 5ob_end_clean(); 6print htmlspecialchars($a); 7?> 8<script> 9window.addEventListener('pageshow', function(e){ 10 if(f0=document.querySelector('#f0')) f0.parentNode.removeChild(f0); 11}); 12window.addEventListener('DOMContentLoaded', function(e){ 13 document.querySelector('form').addEventListener('submit',function(e){ 14 e.preventDefault(); 15 var f0=document.createElement('form'); 16 f0.id="f0"; 17 f0.method="post"; 18 f0.style.display="none"; 19 var inp=document.createElement('input'); 20 inp.setAttribute('name','html'); 21 inp.setAttribute('value',document.querySelector('#f1').innerHTML); 22 f0.appendChild(inp); 23 document.querySelector('body').appendChild(f0); 24 f0.submit(); 25 }); 26}); 27</script> 28<form method="post" id="f1"> 29<input type="text" name="aaa" style="background-color:red" value="foo1" innerHTML="hoge1"> 30<input type="text" name="bbb" style="background-color:yellow" value="foo2" innerHTML="hoge2"> 31<button id="submit-btn" type="submit">送信</button> 32</form>

投稿2019/04/12 03:47

yambejp

総合スコア114843

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

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

WeilSpinor

2019/04/12 07:37

ご回答ありがとうございます。 formエレメント内側にある送りたい子ノードのエレメントたちをinnerHTMLで取得して、 valueに格納する というやり方ですね。 ものすごい巧みでビックリしました。 というか、 innerHTMLは自分自身のノード情報を取得するものだと思っていたのですが、違うんですね。 innerHTMLとは、「エレメントの中に記述されたHTML」という感じなんでしょうか? 中に書かれたエレメントが子ノードになると言う訳では無いんですかね…よくわかりません。
WeilSpinor

2019/04/12 07:53

すみません、色々意味不明な勘違いしてたかもしれません。 文字通り、「ただのエレメント内部のHTML(つまり下の階層のhtml)」というだけのことですね。 documentオブジェクトのinnerhtmlがhtml全体であるのと同じですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問