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

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

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

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

Q&A

解決済

3回答

2904閲覧

functionで定義してるセレクトボックスにselectedがつけられない

earnest_gay

総合スコア615

PHP

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

0グッド

0クリップ

投稿2016/06/30 08:43

下記のようなクラスがあったとして、

class Date { static function getYear($yearget){ $now = date("Y"); $options = ""; for($i = 1950;$i <= $now;$i++){ if($yearget === $i){ $selected = ' selected'; } $options .= "<option value=".$i.$selected.">".$i."年"."</option>"; } return $options; } }

このように使っているのですが

<select class="year" name="year"> <?php echo Date::getYear(filter_input(INPUT_POST, 'year')); ?> </select>

どうも意図した表示がされません。

簡単なプロフィール登録ページなのですが、
内容修正するときにまたいちから入力したり選択したりする手間を省くための記述なのですが、セレクトボックスは1950から始まりますが1980を選択すると1980が残ったままの仕組みを作りたいのですが、どうもselectedが付かないのです。

どこがおかしいのか教えていただけると助かります。。。

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

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

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

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

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

guest

回答3

0

$selectedが中途半端にしか与えられてないですね
こうしてみてください

static function getYear($yearget){ $now = date("Y"); $options = ""; for($i = 1950;$i <= $now;$i++){ $selected =($yearget == $i)?' selected':''; $options .= "<option value='{$i}'{$selected}>{$i}年</option>"; } return $options; }

投稿2016/06/30 08:59

yambejp

総合スコア114839

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

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

earnest_gay

2016/06/30 09:09

===と==に慣れておらず使いどころを間違っていました... ありがとうございました!
guest

0

ベストアンサー

filter_input(INPUT_POST, 'year')で得られるのは文字列ですが、$iは数値です。
そして、===で比較すると、文字列と数値は一致しないはずです。
==で調べる、もしくは(int)filter_input(INPUT_POST, 'year')とintにキャストしてあげましょう。

それと、$selectedがifに当てはまらなかった時なにも定義していないため、elseで空文字にする等の対処をしたほうがよいでしょう。

投稿2016/06/30 08:52

編集2016/06/30 08:53
masaya_ohashi

総合スコア9206

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

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

earnest_gay

2016/06/30 09:08

ありがとうございます。 ===と==がなかなか慣れないです汗 最初は $year = $yearget === $i ? ' selected' : ''; にしてダメだったので if($yearget === $i){ $selected = ' selected'; } にしてみたんですが、falseの処理もしておらず違う型同士で比較していたためでした。 最初の $year = $yearget === $i ? ' selected' : ''; を $year = $yearget == $i ? ' selected' : ''; にするだけでよかったんですね... ありがとうございました。
guest

0

php

1<?php 2// ファイルの先頭に書いてください 3header('Content-type: text/plain'); 4?> 5 6<select class="year" name="year"> 7 <?php echo Date::getYear(filter_input(INPUT_POST, 'year')); ?> 8</select>

これで、意図した通りのHTMLが出力されているかどうかを確認しましょう。

どうもselectedが付かないのです。

ついていますね。ブラウザで右クリック「ソースの確認」で見てみれば?

php

1<?php 2if (filter_input_array(INPUT_POST)) { 3 header('Content-type: text/plain'); 4} 5class Date 6{ 7 8 public static function getYear($yearget) 9 { 10 $now = date("Y"); 11 $options = ""; 12 13 for ($i = 1950; $i <= $now; $i++) { 14 if ($yearget == $i) { 15 $selected = ' selected'; 16 } else { 17 $selected = ''; 18 } 19 $options .= "<option value=\"" . $i . "\"" . $selected . ">" . $i . "年" . "</option>"; 20 } 21 return $options; 22 } 23 24} 25 26echo Date::getYear("2014");

投稿2016/06/30 08:47

編集2016/06/30 08:59
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

earnest_gay

2016/06/30 09:06

ありがとうございます。 まず、===でキャッチできてませんでした。
退会済みユーザー

退会済みユーザー

2016/06/30 09:07

=== じゃなくて === ね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問