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

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

解決済

4回答

8208閲覧

form以外のHTML内のデータを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:35

編集2019/04/11 14:58

###実現したいこと

実現したいことは以下になります:
・HTMLドキュメントのエレメントのデータをPHPに送信したい
・送信したいデータは、『class属性"hoge"を持つ幾つかのdivエレメントのstyle属性、id属性、innerHTML属性の値』
・最悪、divに変わる別のエレメント(inputなど)を利用するのでもよい

###調べたこと

「HTMLのデータをPHPに送信する方法」
を調べると、「formのpost送信」のやり方しか出てきません。
これだと、

formタグ内にエレメントを作る
→てきとうにname属性を設定する
→value属性に送りたいデータを書く
→postメソッドでPHPファイルにsubmitする
→name=>valueという形式の連想配列$_POSTで取得

という流れになると思いますが、
このやり方の問題点として、

・value属性の値しか送信できない
・そもそも「divエレメントにはname属性が存在しない」ので、POST送信はできない

というのがあります。
別のやり方を調べると、
file_get_contentsやcURLを組み合わせるやり方がありましたが、
よくわかりませんでした。

どうすれば冒頭に書いたデータの送信を実現できるでしょうか?

ご回答宜しくお願いします。
###追記
maisumakun様のご指摘を受けて
>なぜ、そのような実装をしたいのか

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

「HTMLドキュメント上のある特定のエレメントのデータを、外部のデータベース(あるいはもっと簡易にcsvファイルなど)に保存したい。
必要に応じてそのデータベースに保存したエレメントデータをドキュメントに読み込みたい。理想的にはエレメントを丸ごと保存したいが、無理ならば属性値だけでも構わない」

そのためには、まずDOMエレメントのデータをPHPに送信しなければならない、と思い、質問いたしました。
イメージとしては以下のような感じです。

html

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

php

1<?php 2//各divの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]=>"hoge1") 7print_r($for_bbb);//上同様に、2つめのdivエレメントのid,style,innerHTMLの値を要素にもつ配列 8?>

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

###追記 その2
maisumakun様のご回答 及び 2つ目のご指摘を受けて

もっとも、WebサイトはHTMLを直接打ち込む、あるいは何かしらのデータからサーバサイドでHTMLを生成するものですので、わざわざ「ブラウザで表示したHTMLをサーバに送信して保存したい」という状況がどのような場合に必要となるのか、なかなか想像できません(基本的に、サーバにある情報でHTMLは再現できるはずですから)

私は今、JavaScriptを使って、
「ボタンを押すと、ランダムな『能力値』を持ったインスタンスがランダムな時刻に生成されるプログラム(ポケモンやたまごっちみたいな育成ゲーム的なもの)」
を作っているのですが、せっかくHTMLというものがあるし、Web上で利用できればと思い、

・オブジェクト(≒クラス)として、既に存在するDOM(のエレメント)を流用
・インターフェイスとしてHTMLドキュメントを利用

している感じです。
ブラウザを閉じたりリロードしたら、せっかく生まれてきたエレメントたちが消えてしまうのも忍びないので、「セーブ機能」として、
外にデータベースを作って、エレメントのデータ(能力値や育成記録)を保存できれば、と思いました。

ですので、
Webサイトを作る、
というよりかは、
HTMLやDOMを利用したWebアプリを作ろうとしている、
という感じです。

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

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

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

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

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

maisumakun

2019/04/11 13:50

「なんのために」そのような実装としたいのでしょうか。
tabuu

2019/04/11 23:34

追記その2まで読んだけど、その用途ならサーバ側で生成したほうがいいと思う。 クライアント(JavaScript)で生成しても結局はサーバ側で管理する必要があるので。
WeilSpinor

2019/04/12 05:27

なるほど、 PHPのようなサーバーサイド言語でも気楽にDOM操作って出来るもんなんですかね?だったらそっちの方がいいかもしれないですね。 また調べてみたいとおもいます。
guest

回答4

0

このやり方の問題点として、

・value属性の値しか送信できない
・そもそも「divエレメントにはname属性が存在しない」ので、POST送信はできない

何が問題なのでしょう?
何の問題もないと思います。

サーバーにデータを送る役割が与えられているのが、form要素であって、それ以外の要素に余計な役割を持たせることがそもそも設計を逸脱しています。

投稿2019/04/11 13:40

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

セーブ機能

localStorage

投稿2019/04/12 04:00

yambejp

総合スコア114784

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

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

0

ベストアンサー

HTMLドキュメント上のある特定のエレメントのデータを、外部のデータベース(あるいはもっと簡易にcsvファイルなど)に保存したい

こういう要件であれば、element.outerHTMLMDN)を使ってエレメントのHTML表記を取得して、それを適当なフォーム要素に詰め込んで送る、という形がいいのではないかと思います。


もっとも、WebサイトはHTMLを直接打ち込む、あるいは何かしらのデータからサーバサイドでHTMLを生成するものですので、わざわざ「ブラウザで表示したHTMLをサーバに送信して保存したい」という状況がどのような場合に必要となるのか、なかなか想像できません(基本的に、サーバにある情報でHTMLは再現できるはずですから)。

投稿2019/04/11 14:28

maisumakun

総合スコア145183

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

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

maisumakun

2019/04/11 14:30

「ユーザーがブラウザサイドでHTMLを構築できるような仕組みがある」、あるいは「スクレイピングなど他サイトのデータを保存する」などの状況は考えられますが、そうでないなら「HTMLを保存する」というフローそのものを見直したほうがいいかもしれません。
WeilSpinor

2019/04/11 15:00

ご回答ありがとうございます。ご紹介頂いたメソッドを試してみたいと思います。
WeilSpinor

2019/04/11 15:41 編集

>そうでないなら「HTMLを保存する」というフローそのものを見直したほうがいいかもしれません。 確かに、フローはあまり考えていませんでしたね。 何かsetIntervalの練習に作ったおもちゃを雛型にして、いろいろ機能を実装しているうちに大きくなっていってる感じです。どこに行きつくかは分かりませんし、どこまで面白いものが作れるか、実験している感じですね。 HTMLエレメント(特にdiv)というオブジェクトをつかって、どこまで「自由に動きまわったり成長したりできる機能をもった面白いがロボットができるか」ためしてみたいと思いました。
guest

0

JavaScriptで後付けでinput要素をformにappendすればsubmit時点でform内に存在しなくても送信できます。※拾うイベントはフォームのsubmitイベントではなくボタンのclickイベントのほうが良い

js

1$('form').append($('<input />', { 2 type: 'hidden', 3 name: 'hoge', 4 value: $("div#hoge").text() 5})); 6$('form').submit();

投稿2019/04/12 02:30

編集2019/04/12 04:44
m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問