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

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

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

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

PHP

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

HTML

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

Q&A

解決済

2回答

821閲覧

formの入力内容を直接PHPに渡せるか

hima-mura.

総合スコア42

JSF

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

PHP

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

HTML

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

0グッド

1クリップ

投稿2021/05/14 08:12

編集2021/05/14 10:12
// sample.html <form action="./sample.php" method="post"> <input type="text" name="data" value="Input Here."> <button type="submit">送信</button> </form> // sample.php echo 'value'. $_POST["data"]. "<br>"; var_dump($_POST["data"]; // nullを返す。

これは送信ボタンを押した瞬間に.phpの$_POST["data"]にvalueが格納されるというイメージであっていますか?
$_POST["data"]に値が渡されていない。

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

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

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

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

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

m.ts10806

2021/05/14 08:14

現在提示されたフォームでボタン押すとsample.phpに送信されるはずですが、それでは駄目なのでしょうか。 意図するところが不明です。
退会済みユーザー

退会済みユーザー

2021/05/14 08:30 編集

〈一度JSにvalueを渡し、JSからPHPに非同期で渡す方法しか思いつかなかった〉という話と、例示されたコードが一致してなくて、フォーム送信を直接sample.phpで受けるように書いてあるのですが、それでいいんじゃないの?としか外野は言えません。やってみて、なにか問題がありましたか? あと、jsfって関係あるの?
hima-mura.

2021/05/14 08:53

的を得ていない文章ですいません。 そうですよね。 phpで送られてきた内容を表示させたいときは、 echo $_POST["data"] でよいですか?
m.ts10806

2021/05/14 09:14

PHPマニュアルのフォームの処理あたりを確認してください。
AbeTakashi

2021/05/14 09:14

まずは自分が思うようにやってみたらいいと思います。やってみて自分が思う通りに動かないとかになれば質問すればいいのです。その際は開発環境や現状のソースコード、何が分からなくて、どうなるようにしたいかをしっかり質問文内に明記しましょう。現状では質問の意図がまったく見えません。 参考) https://teratail.com/help/question-tips https://teratail.com/help/avoid-asking まずはすべてを一通り読んでみることをおすすめします。
m.ts10806

2021/05/14 09:15

「表示がうまくいかない」だとなにがおきてるのか分かりませんので具体的に記載願います。 あと、フォームがあるhtmlのアクセスURLはなんでしょうか。Webサーバーはどのように構築されたのでしょうか
m.ts10806

2021/05/14 10:43

>var_dump($_POST["data"]; // nullを返す PHPとして正しくない(var_dump() が正しく書けていない)のでnullどころか構文エラーになるはずです。
m.ts10806

2021/05/14 10:44

コードはコピペで提示してください。 あと、フォームがあるhtmlのアクセスURLはなんでしょうか。Webサーバーはどのように構築されたのでしょうか ここは大事です。コードよりも大事です。
guest

回答2

0

サブミットしたらフォームのactionに飛び、そのさいgetやpostのデータを渡せるということです。
actionの指定がなければ自分自身に飛びます。
getやpostのデータはfilter_inputで受けてください

PHP

1<?PHP 2$data=filter_input(INPUT_POST,"data"); 3echo 'value'.$data . "<br>"; 4var_dump($data); 5?> 6<form method="post"> 7 <input type="text" name="data" value="Input Here."> 8 <button type="submit">送信</button> 9</form>

投稿2021/05/14 10:56

yambejp

総合スコア114771

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

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

hima-mura.

2021/05/15 07:30

調べてみた感じ、確かにfilter_inputを使った方が良いみたいですね。 ご指摘ありがとうございます。
guest

0

ベストアンサー

フォームの処理は必ず読むこと

追記してほしい情報は既に書きましたし、いつか追記されるものとして可能性だけ

  1. HTTPでアクセスしていない
  2. PHPタグで囲ってない
  3. フォーム送信ではなく直にsample.phpにアクセスしている

1:
入力フォームの時点でhttpでアクセスしてなければaction属性の設定値からそのままhttpじゃない状態で送信するのでPHPは動作しません。
書いたコードそのまま画面に出てたらおそらくこれ。
入力フォームの時点からhttpアクセスするか、action属性の設定値をhttp://localhost/sample.phpなど、httpから始まるURLにしてください。

2:
提示されたコードそのままだとPHPタグで囲まれていません。
PHPマニュアルにある通り、PHPコードはPHPタグ内のものを解析して実行します。
httpアクセスしてるけど画面にそのままコードが出ている場合はこれ

これは送信ボタンを押した瞬間に.phpの$_POST["data"]にvalueが格納されるというイメージであっていますか?

正確な表現を覚えた方が良いと思います。

送信ボタンを押す
→送信ボタンが所属しているform内の入力コントロール(input,select,textarea)の情報をaction属性の設定値に対して「リクエスト」として送信する
その時のリクエストは各入力コントロールのname属性の属性値を「キー」
value属性の属性値(その時、入力・選択された情報)を「値」とした連想配列形式になっています。

PHPはそれを「リクエスト」として受け取ります。
$_POSTかどうかは「リクエストメソッド」によります。
その「リクエストメソッド」を決めるのがformタグのmethod属性の属性値です。
postなら$_POSTで受け取るし、getもしくは設定なしなら$_GETで受け取ります。

PHP側はリクエストが何で送られたかは知らないのでサーバーに送られた情報を参照できる$_SERVERが保持している中で確認します。

なお、formタグによるリクエスト送信は同期的に行われるので、
「ボタン押した後に自分でURLを直に確認」ではリクエストとして別になるので送信されていません。これが3:の懸念です。


つまり、
httpでアクセスしていて、PHPタグで囲われているPHPに対して送信し、送られたリクエストメソッドのスーパーグローバル変数にname属性の設定値で正しく連想配列を参照するようにコードを書けば「入力した値が渡される」と言えます。

投稿2021/05/14 10:43

m.ts10806

総合スコア80850

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

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

m.ts10806

2021/05/15 07:48

それなら元のHTMLをWebサーバー内に置いてhttpでアクセスしたらそこまで書かなくて出来ますよ。むしろそうあるべき。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問