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?>
コードは全てマークダウンで対応してください。
また、$GLOBALSをどういう意図で使ったのか記載いただけますか?
そもそもユーザ変数のグローバル化はほとんど必要になりませんし、コードの見通しが悪くなります。
すみません、参考書のコードを見ながら実行し、そこからコードを読み解いています。
勉強不足で意味がよくわかりません。実行結果と説明文を読みながら進んでいます。
となると、アドバイスしても理解を得られるか非常に難しいところなので、
まず1つ1つ説明できるくらいにはなっておいたほうが良いと思います。
目的は書籍を書き写して実行できるようになることですか?
と、言うのはですね。
全ての人が書籍で学習するわけではなく、書籍で学習していても同じ書籍を持っているとは限らないわけです。
「何を達成したいコードなのか」という説明なしには簡単には答えられないのが赤の他人としての事情です。(それに入門書だとそもそも手元にない人も多いのでは)
それに、PHPのバージョンが自身の環境と書籍で違えば当然使えない機能や実装も出てきます。
オライリー本の「はじめてのPHP」といえば、PHP技術者認定試験初級の教本として公式に紹介されているものであるので、私も書籍の存在自体は知っていますが、PHP7対応版だったとしても3年以上前に出版なので、ちょっと怪しいですし、$GLOBALSを利用しているところなどから、実装もかなり古いものと思われます。
つまり、書籍で学習したとして、果たして使えるものにはなるのだろうか?という疑問があるわけです。
PHP技術者認定も7の初級は去年受けたので知っていますが、実装の古さはずいぶんと改善されたので、提示のような実装を載せている書籍で頑張っても、実用的な実装は身に付かないのではないかと懸念しています。
書籍の発行日は2017.3.22 なっています。phpを学習して、プログラミングができるようになることです。
これで稼ぐことは想定していません。プログラミングすることが楽しいのです。
ここの章が私には、肝になると思っています。あとはデータベース、ファイルの読み書きですので、ある程度
理解が進むと思っています。
「プログラミングができるようになった先」も考えておいた方が良いかとは思いますが、古い実装を覚えたところで、おそらく楽しくはないと思いますし、質問したときにそこから突っ込まれます。
プログラミングの喜びって、人それぞれだとは思いますが、何かしらを達成したとき(問題解決・作りたいものができた)が多いと思います。
となると、「書籍を丸写しする」では達成感も低いのではと思います。
「実際に課題を設け、設計し、作り上げる」ほうにシフトしては如何でしょうか。
ただ、何にせよ、「このコードが何を達成すべく組まれたものなのか」
ゴールを明示されないと答えようがないのは変わりません。
コードは全てマークダウンにしてくださいね。
お手数かけています。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を出力するにはどうすればいいのでしょうか。よろしくお願いいたします。
>このコードはPHPコードのはずですが、1つも「<?php ?>」がありません。
ありますよ。自身で書いてるじゃないですか
「このコードはPHPコードのはずですが、1つも「<?php ?>」がありません。」の表記が消されましたが、現在起きている問題を提示してください。「質問するときのヒント」を読んで問題課題を整理して、質問本文を改善してください。
【質問するときのヒント|teratail(テラテイル)】
https://teratail.com/help/question-tips
ありがとうございました。何とか自分で解決できました。
13章最後まで来て、7章のコードを使うところに来ました。以前質問し、解決済にしていたものを使おうとしたのですが、先送りした質問でしたので、困っています。
解決済を消して再度質問したいので、コードと質問を修正しています。
自己解決のままになっていますが…