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

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

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

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

Q&A

2回答

253閲覧

phpでドロップリスト作成

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2018/06/10 08:33

phpで西暦を選択するドロップリストを作成しています.
非常に初歩的な質問で申し訳ないのですが,現在1990~2018の値が表示ドロップリストに表示されません.
なぜでしょうか.
ご教授よろしくお願い致します.

php

1<?php 2$date=('Y'); 3$born_year=''; 4for($i=1990; $i<=$date; $i++){ 5 $born_year='$i'; 6} 7 ?> 8 9 <!DOCTYPE html> 10 <html lang="ja"> 11 <head> 12 <meta charset="utf-8" /> 13 <title></title> 14 </head> 15 <body> 16 <form avtion="#"> 17 生まれた西暦を選択してください 18 <select name="born_year"> 19 <option value="<?php print $born_year; ?>"><?php print $born_year; ?></option> 20 </select> 21 </form> 22 </body> 23 </html>

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

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

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

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

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

guest

回答2

0

なぜでしょうか.

非常にたくさんのケアレスミスがあります。
PHPコーディングの基礎の基礎の基礎をきちんと見直さないと
今回だけの問題では済まないですよ。


下記のコードを

php

1for($i=1990; $i<=$date; $i++){ 2 $born_year='$i'; 3}

下記のようにしてデバッグしてみると分かります。

php

1for($i=1990; $i<=$date; $i++){ 2 $born_year='$i'; 3 echo $born_year."<br />"; 4}

きっと 何も出ません。

なぜなら冒頭

php

1$date=('Y');

これでは「本年」が取得できないからです。
単に「Y」という文字列になっているはずです。

date関数を使う必要があります。

php

1$date=date('Y');

$iが1990から始まって加算しようとするが、そもそも条件がYという文字列に向かっていこうとしているのでfor文がほぼ成り立っていない状態となり、1周もしないわけですね。

ただ、これ(date()関数を使う)だけでは、forの中で$born_yearをechoしても出力結果は下記のようになります。

html

1$i<br />$i<br />$i<br />$i<br />・・・

なぜなら PHPにおいてシングルクォーテーション内では変数が展開できないから です。

シングルクォーテーション使いたいなら文字列連結する必要があります。

というか、変数以外に何も入れないのであれば、クォーテーションで括る必要はないですね。

php

1for($i=1990; $i<=$date; $i++){ 2 $born_year=$i; 3 echo $born_year."<br />"; 4}

出力結果:

html

11990<br />1991<br />1992<br />1993<br />1994<br />1995<br />・・・・

ただ、これでもセレクトボックスはできあがりません。

出力結果は下記

html

1<option value="2018">2018</option>

想定している「一番最後の年」ですね。

なぜか。
for内で上書きし続けているから

php

1for($i=1990; $i<=$date; $i++){ 2 $born_year=$i; //←$born_yearにずっと値を入れ続けている。 3}

では、どうすればいいか。

既に回答が出ているように配列で持ってもいいですし、
下記のようにoption部分をfor時に作っても良いと思います。
※ただし変数には文字列連結で。

php

1for($i=1990; $i<=$date; $i++){ 2 $born_year.= '<option value="'.$i.'">'.$i.'</option>'; 3}

html

1 <select name="born_year"> 2 <?php print $born_year; ?> 3 </select>

それか、こんな感じにもできますね。

php

1$born_year = []; 2for($i=1990; $i<=$date; $i++){ 3 $born_year[] = '<option value="'.$i.'">'.$i.'</option>'; 4}

html

1 <select name="born_year"> 2 <?php print implode($born_year,"\n"); ?> 3 </select>

投稿2018/06/10 12:05

編集2018/06/10 12:32
m.ts10806

総合スコア80852

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

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

0

こんなかんじになるよ。

PHP

1<?php 2$this_year = date('Y'); 3$born_years = array(); 4for($i = 1990; $i <= $this_year; $i++) 5{ 6 $born_years[] = "{$i}"; 7} 8?><!DOCTYPE html> 9<html lang="ja"> 10 <head> 11 <meta charset="utf-8" /> 12 <title></title> 13 </head> 14 <body> 15 <form avtion="#"> 16 生まれた西暦を選択してください 17 <select name="born_year"> 18<?php 19 foreach($born_years as $year) 20 { 21 echo <<< EOL 22 <option value="{$year}">{$year}</option> 23 24EOL; 25 } 26?> 27 </select> 28 </form> 29 </body> 30</html>

投稿2018/06/10 08:54

編集2018/06/10 08:55
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問