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

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

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

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

Q&A

解決済

1回答

901閲覧

ヒアドキュメントを使って selectメニューを表示するプログラムです。実行すると表示が出てこなくて終了してしまします。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2020/07/13 05:59

編集2020/07/13 06:51

O'REILLYの「はじめてのPHP」で勉強しています。
xamppを使っています
php7.4.7です。
ヒアドキュメントを使って
selectメニューを表示するプログラムです。
実行すると表示が出てこなくて終了してしまします。

自己解決にしていたのですが、ひどい解決方法で恥ずかしい限りです。
ヒアドキュメントについてある程度練習して、再度取り組んでみたのですが
解決できません。

期待する実行結果は以下の通りです。

<form method="post" action="oder.php"> Your Order: <select name="order"> <option>Sesame Seed Puff</option> <option>Coconut Milk Gelatin Square</option> <option>Brown Sugar Cake</option> <option>Sweet Rice and Meat</option> </select > <br/> <input type="submit" value="Order"> </form>

発生している問題・エラーメッセージ

実行すると以下のように表示されて終わり、期待されたプリント結果が表示されません。 hiroko@HIROKO711 C:\xampp\htdocs\chap07 # php 7-18h.php hiroko@HIROKO711 C:\xampp\htdocs\chap07 # ヒアドキュメントの <form method="post" action="$_SERVER[PHP_SELF]"> Your Order: <select name="order" > $sweets... を <form method="post" action="{$_SERVER[PHP_SELF]}"> Your Order: <select name="{order}" > {$sweets}... にしてみましたが、変化ありませんでした。 構文チェックをするとエラーはありませんと出ます。 よろしくお願いいたします。

php

1//7-18.php 2<?php 3 4$sweets = array('Sesame Seed Puff','Coconut Milk Gelatin Square', 5 'Brown Sugar Cake','Sweet Rice and Meat'); 6function generate_options($options){ 7 $html = ''; 8 foreach ($options as $option){ 9 $html .= "<option>$option</option>\n"; 10 } 11 return $html; 12} 13 14// フォームを表示する 15function show_form(){ 16 17 $sweets = generate_options($GLOBALS['sweets']); 18 print<<<_HTML_ 19<form method="post" action="$_SERVER[SCRIPT_NAME]"> 20Your Order: <select name="order" > 21$sweets 22</select> 23<br/> 24<input type="submit" value="Order"> 25</form> 26_HTML_; 27 28} 29 30echo show_form(); 31 32?> 33 34

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

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

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

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

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

guest

回答1

0

ベストアンサー

今回の件は単純に「show_form()」を呼んでいないのが原因だと思います
ただ、$_SERVER[PHP_SELF]はやめて$_SERVER[SCRIPT_NAME]を利用ください。
また$GLOBALSはよほどのことが無い限り使用しないでください

投稿2020/07/13 06:11

yambejp

総合スコア116724

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

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

退会済みユーザー

退会済みユーザー

2020/07/13 06:18

ありがとうございます
退会済みユーザー

退会済みユーザー

2020/07/13 06:24

「$GLOBALSを使用しない」というとコードはどのように変更すればいいのでしょうか。
退会済みユーザー

退会済みユーザー

2020/07/13 06:27

ありがとうございます。最後にecho show_form();を追加して表示されました。
yambejp

2020/07/13 06:31

function show_form($sweets){ print<<<_HTML_ <form method="post" action="{$_SERVER["SCRIPT_NAME"]}"> Your Order: <select name="order" > $sweets </select> <br/> <input type="submit" value="Order"> </form> _HTML_; } として、 show_form($sweets);とします。 show_form自体がprintで出力をしているので 「echo show_form();」とするのはおかしいです。
退会済みユーザー

退会済みユーザー

2020/07/13 06:31

echo show_form();を「?>」の前に追加してうまくいきました。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2020/07/13 06:41

そうなんですよね。echo show_form();を削除したら表示されなくなりました
yambejp

2020/07/13 06:46 編集

いや,単純に「echo」がいらないということです echoするなら、show_formはprintしないで、return で 戻すべきです
退会済みユーザー

退会済みユーザー

2020/07/13 06:56

echo show_form();を show_form();にして追加すればいいんでしょうか? それでうまくいきました。 プログラムについてどこかまだよくわかっていないところがあります。ありがとうございます。
yambejp

2020/07/13 06:59

> echo show_form();を show_form();にして追加すればいいんでしょうか? そういうことです。うまく伝わってなかったようで申し訳ないです
退会済みユーザー

退会済みユーザー

2020/07/13 07:12

$GLOBALS['sweets']を使わない方法を教えていただいたのですが、見当たらなくなったのですが、 お手数ですがどのように修正すればいいのでしょうか。
yambejp

2020/07/13 07:16

teratailではコメントは折りたたまれます 過去のコメントを表示すれば見られます
退会済みユーザー

退会済みユーザー

2020/07/13 07:28

ありました。実行してみましたが以下のようなエラーになります。 hiroko@HIROKO711 C:\xampp\htdocs\chap07 # php 7-18a.php PHP Notice: Array to string conversion in C:\xampp\htdocs\chap07\7-18a.php on l ine 23 Notice: Array to string conversion in C:\xampp\htdocs\chap07\7-18a.php on line 2 3 <form method="post" action="7-18a.php"> Your Order: <select name="order" > Array </select> <br/> <input type="submit" value="Order"> </form> <option>Sesame Seed Puff</option>と表示されるべきところがArrayとなっています。 どうしたらいいでしょうか。
退会済みユーザー

退会済みユーザー

2020/07/13 07:29

//7-18a.php <?php // <select>メニューの表示 // <select>メニューの表示と検証を簡略化するには、 // 配列にメニューの選択技('Sesame Seed Puff','Coconut Milk Gelatin Square', // ...)を入れます。 $sweets = array('Sesame Seed Puff','Coconut Milk Gelatin Square', 'Brown Sugar Cake','Sweet Rice and Meat'); function generate_options($options){ $html = ''; foreach ($options as $option){ $html .= "<option>$option</option>\n"; } return $html; } // フォームを表示する function show_form($sweets){ print<<<_HTML_ <form method="post" action="{$_SERVER['SCRIPT_NAME']}"> Your Order: <select name="order" > $sweets </select> <br/> <input type="submit" value="Order"> </form> _HTML_; } show_form($sweets);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問