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

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

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

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

Q&A

解決済

4回答

974閲覧

phpでフォームが表示されません。

cocoo

総合スコア8

PHP

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

0グッド

0クリップ

投稿2020/04/27 00:50

編集2020/04/27 02:06

[フォームを表示させテキストボックスに入力しサブミットされフォームデータをチャックする]
phpを作成したのですがフォームが表示されません。
自分では解決できなかったため宜しくお願い致します。
下記、ソースになります。
ソース](251b9e78aa2a6a833d9840f3e6ebd522.png)

下記、ソースになります。

php

1<?php 2//リクエストメソッドに応じて 3//適切な処理を行うロジック 4if($_SERVER['REQUEST_METHOD'] == 'POST'){ 5 If(validate_from()){ 6 process_form(); 7 }else{ 8 show_form(); 9 } 10} 11//フォームのサブミット時に何かを行う 12function process_form(){ 13 print "Hello,".$_POST['my_name']; 14} 15//フォームを表示する 16function show_form(){ 17 print<<<_HTML_ 18<form method="POST" action="$_SERVER['PHP_SELF']"> 19Your name:<input type="text" name="my_name"> 20<br/> 21<input type="submit" value="Say Hello"> 22</form> 23_HTML_; 24} 25//フォームデータをチャックする 26function validate_from(){ 27 if(strlen($_POST['my_name']) < 3){ 28 return false; 29 }else{ 30 return true; 31 } 32} 33?>

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

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

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

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

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

kyoya0819

2020/04/27 00:52

エラーメッセージ出ていませんか?
cocoo

2020/04/27 00:58

エラーメッセージは出ていません。 ブラウザでURL叩くと何も表示されません。
m.ts10806

2020/04/27 01:52

コードは画像で提示されても誰も再現確認できませんので、コピー&ペーストで確認できるようにテキストで、マークダウンにてご提示ください。
guest

回答4

0

formのHTMLコードがshow_form関数で出力するようにされていますが、最初のif内でshow_form関数を呼ぶ位置がおかしいかと思います。

php

1if($_SERVER['REQUEST_METHOD'] == 'POST'){ 2 if(validate_form()){ 3 ... 4 }else{ 5 show_form(); 6 } 7}

これだと show_form関数はREQUEST_METHOD == 'POST'かつvalidate_form == falseでないと表示されません(一般的にformを介さない場合はGETリクエストですね)。
解決策としては内側のelseを外側のifに対応するelseに変更することでしょうか。
(ただ外側ifだとそれはそれで今度はPOSTしたときにフォームが表示されないのでそもそもif-else内ではなく外で読んでやることが一番近いでしょうか)

投稿2020/04/27 02:16

編集2020/04/27 02:25
rozeo_s

総合スコア110

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

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

0

ベストアンサー

まずはerror表示をONにするところから。

構文チェックを自動で行ってくれるエディタ、もしくはIDEだと実行前に教えてくれるはずです。

イメージ説明

ヒアドキュメントやダブルクォーテーション内では、特に配列を持つ変数だと明確に区別しておかないと今回のような現象になります。
ですので、下記のように{}で括ります。

php

1 print<<<_HTML_ 2<form method="POST" action="{$_SERVER['PHP_SELF']}"> 3Your name:<input type="text" name="my_name"> 4<br/> 5<input type="submit" value="Say Hello"> 6</form> 7_HTML_;

あとは、ロジックを1行1行追うこと。
下記のようにしてみて、どういうときにどこが出力されるかデバッグです。

php

1echo __LINE__.PHP_EOL; 2if($_SERVER['REQUEST_METHOD'] == 'POST'){ 3echo __LINE__.PHP_EOL; 4 If(validate_from()){ 5echo __LINE__.PHP_EOL; 6 process_form(); 7 }else{ 8echo __LINE__.PHP_EOL; 9 show_form(); 10 } 11echo __LINE__.PHP_EOL; 12} 13echo __LINE__.PHP_EOL;

投稿2020/04/27 02:15

編集2020/04/27 02:18
m.ts10806

総合スコア80854

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

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

cocoo

2020/04/27 02:31

18行目を{}で括り //リクエストメソッドに応じて //適切な処理を行うロジック に}else{show_form();}を末尾に追加すると解消されました。 大変助かりました。ありがとうございます<(_ _)>
m.ts10806

2020/04/27 02:41

「表示されない」の本質的な解決策はrozeo_sさんの提示された内容なので、私よりrozeo_sさんの回答の方がふさわしいのでは。
guest

0

18行目のaction属性のダブルクォーテーションの綴じがありません。

投稿2020/04/27 01:15

kyoya0819

総合スコア10429

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

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

退会済みユーザー

退会済みユーザー

2020/04/27 01:18

的確かもです
cocoo

2020/04/27 01:34 編集

綴じなかったのでつけてみましたが解消されませんでした。 改めて、見直し下記で実施しましたがエラーになりました。 <form method="POST" action= "<?php $_SERVER['PHP_SELF'] ?>"> エラー内容 Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\php10\bing\7-7.php on line 18
退会済みユーザー

退会済みユーザー

2020/04/27 01:39

<form method="POST" action= " $_SERVER['PHP_SELF']"> とか? <?PHP?>をつけないためにヒアドキュメントで記述しているのでは?? 試していませんが・・。
退会済みユーザー

退会済みユーザー

2020/04/27 01:42

一旦、HTMLで記述してみて表示されてからPHPを埋め込んだ方がいいと思います。
cocoo

2020/04/27 01:54

わかりました。一度HTMLで記述してみます<(_ _)>
退会済みユーザー

退会済みユーザー

2020/04/27 02:12

これでダメでしょうか・・。 print <<<_HTML_ <form method="POST" action="$_SERVER[PHP_SELF]"> Your name:<input type="text" name="my_name"> <br/> <input type="submit" value="Say Hello"> </form> _HTML_;
退会済みユーザー

退会済みユーザー

2020/04/27 02:35

単純にこのコードは動作します(フォームが表示されます)。 おそらく上の$_POSTでデータのチェックが行われるために、Formの 表示にまでいたっていないとおもいます。 下記のコードをお試しください。 <html> <head><head> <body> <?php //フォームを表示する echo "<form method='POST' action='$_SERVER[PHP_SELF]'>"; echo "Your name:<input type='text' name='my_name'>"; echo "<br/>"; echo "<input type='submit' value='Say Hello'>"; echo "</form>"; ?> </body> </html>
guest

0

echoがないからでしょうか・・?
サンプルですと・・・。

<?php $str = <<<EOM 変数に ながーーーーい文字列を 格納します。 EOM; echo $str; ここがないから?! ?>

以上 違うかもですが・・。

投稿2020/04/27 01:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問