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

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

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

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

Q&A

2回答

1224閲覧

PHPファイルがうまく実行できない

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2020/05/02 14:38

編集2020/07/13 05:05

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 3<?php 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[PHP_SELF]"> 20Your Order: <select name="order" > 21$sweets 22</select> 23<br/> 24<input type="submit" value="Order"> 25</form> 26_HTML_; 27 28} 29?>

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

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

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

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

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

m.ts10806

2020/05/02 14:40

コードは全てマークダウンで対応してください。
m.ts10806

2020/05/02 14:41

また、$GLOBALSをどういう意図で使ったのか記載いただけますか? そもそもユーザ変数のグローバル化はほとんど必要になりませんし、コードの見通しが悪くなります。
退会済みユーザー

退会済みユーザー

2020/05/02 14:45

すみません、参考書のコードを見ながら実行し、そこからコードを読み解いています。 勉強不足で意味がよくわかりません。実行結果と説明文を読みながら進んでいます。
m.ts10806

2020/05/02 14:52

となると、アドバイスしても理解を得られるか非常に難しいところなので、 まず1つ1つ説明できるくらいにはなっておいたほうが良いと思います。 目的は書籍を書き写して実行できるようになることですか?
m.ts10806

2020/05/02 15:01 編集

と、言うのはですね。 全ての人が書籍で学習するわけではなく、書籍で学習していても同じ書籍を持っているとは限らないわけです。 「何を達成したいコードなのか」という説明なしには簡単には答えられないのが赤の他人としての事情です。(それに入門書だとそもそも手元にない人も多いのでは) それに、PHPのバージョンが自身の環境と書籍で違えば当然使えない機能や実装も出てきます。 オライリー本の「はじめてのPHP」といえば、PHP技術者認定試験初級の教本として公式に紹介されているものであるので、私も書籍の存在自体は知っていますが、PHP7対応版だったとしても3年以上前に出版なので、ちょっと怪しいですし、$GLOBALSを利用しているところなどから、実装もかなり古いものと思われます。 つまり、書籍で学習したとして、果たして使えるものにはなるのだろうか?という疑問があるわけです。 PHP技術者認定も7の初級は去年受けたので知っていますが、実装の古さはずいぶんと改善されたので、提示のような実装を載せている書籍で頑張っても、実用的な実装は身に付かないのではないかと懸念しています。
退会済みユーザー

退会済みユーザー

2020/05/02 15:12

書籍の発行日は2017.3.22 なっています。phpを学習して、プログラミングができるようになることです。 これで稼ぐことは想定していません。プログラミングすることが楽しいのです。
退会済みユーザー

退会済みユーザー

2020/05/02 15:16

ここの章が私には、肝になると思っています。あとはデータベース、ファイルの読み書きですので、ある程度 理解が進むと思っています。
m.ts10806

2020/05/02 15:17

「プログラミングができるようになった先」も考えておいた方が良いかとは思いますが、古い実装を覚えたところで、おそらく楽しくはないと思いますし、質問したときにそこから突っ込まれます。 プログラミングの喜びって、人それぞれだとは思いますが、何かしらを達成したとき(問題解決・作りたいものができた)が多いと思います。 となると、「書籍を丸写しする」では達成感も低いのではと思います。 「実際に課題を設け、設計し、作り上げる」ほうにシフトしては如何でしょうか。
m.ts10806

2020/05/02 15:18

ただ、何にせよ、「このコードが何を達成すべく組まれたものなのか」 ゴールを明示されないと答えようがないのは変わりません。 コードは全てマークダウンにしてくださいね。
退会済みユーザー

退会済みユーザー

2020/05/03 19:39

お手数かけています。7章を読み返してごらんのところまで来ました。 show_form()以下で <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> のHTMLを出力するにはどうすればいいのでしょうか。よろしくお願いいたします。
m.ts10806

2020/05/03 23:30

>このコードはPHPコードのはずですが、1つも「<?php ?>」がありません。 ありますよ。自身で書いてるじゃないですか
kei344

2020/05/04 08:19

「このコードはPHPコードのはずですが、1つも「<?php ?>」がありません。」の表記が消されましたが、現在起きている問題を提示してください。「質問するときのヒント」を読んで問題課題を整理して、質問本文を改善してください。 【質問するときのヒント|teratail(テラテイル)】 https://teratail.com/help/question-tips
退会済みユーザー

退会済みユーザー

2020/05/04 10:07

ありがとうございました。何とか自分で解決できました。
退会済みユーザー

退会済みユーザー

2020/07/13 05:43

13章最後まで来て、7章のコードを使うところに来ました。以前質問し、解決済にしていたものを使おうとしたのですが、先送りした質問でしたので、困っています。 解決済を消して再度質問したいので、コードと質問を修正しています。
m.ts10806

2020/07/13 06:16

自己解決のままになっていますが…
guest

回答2

0

<?php ?>」をあちこち入れていた時に

まずはここから改善する必要があります。
PHPマニュアル:PHPタグ

「あちこち入れる」のではなく「適切に入れる」ことを覚えましょう。

最後に提示されているコードは明らかに不適切なところで利用されていますし、構文エラーが出ます。

↓こう書いているようなものです

php

1<?php 2<?php 3 4?>

あとは$GLOBALS
昨今では使うことないのではないでしょうか。

これ自体の使い方は間違ってないように見えますけどね。
簡単なコードを組んでみれば分かります。

php

1<?php 2$hoge = "test"; 3 4function a(){ 5 echo $GLOBALS['hoge']; 6} 7 8a();

今回も実は$GLOBALSを使うメリットってありません。
なぜなら、optionの中身とかは別途設定ファイルで持つか、DBでマスタとして持つのが本来のやり方だからです。
「変数」で持つとコードを直接編集しなければなりません。
でも「変数」はやはり「リクエストにより常に書き換えられる動的な情報」を持つべきものなので、「内容はほとんど変わらないもの」なのであれば「変数」で持っておくメリットはありません。
コードの中に持つことでメンテナンス性も落ちます。

投稿2020/05/02 15:31

m.ts10806

総合スコア80875

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

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

退会済みユーザー

退会済みユーザー

2020/05/03 05:00

ありがとうございます。少しコードを眺めてやってみます。
m.ts10806

2020/05/03 05:03

「コードを眺めて」だとたぶん解決しません。 一度コードから頭を離し、ロジックを考えてからコードに反映させてください。 場合により今のコードをいったん捨てて、1から組み直した方が確実な時もあります。 (これが出来ない人が何日も悩んでます)
guest

0

以下のように修正して、目的の実行結果を得られました。

function show_form(){
Your Order: Sesame Seed Puff
Coconut Milk Gelatin Square
Brown Sugar Cake
Sweet Rice and Meat
order(ボタン)
}

//上のソースコードは
function show_form(){
<form method="post" action="/O'REILLY/chap07/7-18f.php">
Your Order: <select name="order" multiple>
<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>
}

ありがとうございました。

<?php $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 validate_form(){ // エラーメッセージを空の配列で初期化する $errors = array(); $input = array(); $order=''; if(isset($input['order'])){ $input['order'] = $_POST['order']; } if(! in_array($input['order'] ,$GLOBALS['sweets'])){ $errors[] = 'Please choose a valid order.'; // 有効な } } ?> function show_form(){ <?php $sweets = generate_options($GLOBALS['sweets']); ?> <?php print<<<_HTML_ <form method="post" action="$_SERVER[PHP_SELF]"> Your Order: <select name="order" multiple> $sweets </select> <br /> <input type="submit" value="Order"> </form> _HTML_; ?> }

投稿2020/05/04 10:05

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kei344

2020/05/04 10:11

「function show_form(){」は出ていますが、これで解決なのでしょうか。
m.ts10806

2020/05/04 10:41 編集

いや、動かないでしょ、このコード。 PHPの構文エラーでる
退会済みユーザー

退会済みユーザー

2020/05/04 13:34

とりあえず前に進みます。後でふくしゅうします。 わたしは初心者ですので、1行、2行のコメントだけでは解決できません。
m.ts10806

2020/05/04 13:37

いえ、ここで押さえておかないといけないことを放置していては前に進んだつもりでも何年経っても前には進めませんよ。 それだけ現在のコードですら自分の手に負えてないということです。 手に負える範囲、またはなんとか理解できる範囲からやっていかないと、逆に遠回りです。 これまでの質問をざっと見た感じ、余計遠回りしています。 「後で復習」というのは、それまでの道のりをきちんと理解できている前提で「漏れがないか」を確認するときに使える表現であって、ほとんど理解できてない状態で無理やり進んだ状態から使える表現ではありません。 問題が山積みのまま進めるものではないですよ。プログラミングって。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問