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

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

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

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

Q&A

解決済

2回答

1791閲覧

生年月日をプルダウンに初期値登録

ryusan_012

総合スコア59

PHP

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

0グッド

0クリップ

投稿2018/06/01 01:41

編集2018/06/01 01:53

データベースに登録されている生年月日を取り出してプルダウンの初期値としたいです。
データベースにはbirthという一つのカラムに登録されてて、プルダウンは年・月・日で分かれています。
ここからどのようにすれば初期値で入りますか?
イメージ説明

php

1<!DOCTYPE html> 2<html lang="ja"> 3 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6 <title>change</title> 7 </head> 8 9 <body> 10 11 <h2>登録情報変更</h2> 12 13 <?php 14 $num = htmlspecialchars($_GET["id"]); 15 $pdo = new PDO('mysql:dbname=staff_manager;host=localhost;charset=utf8', 'user', 'passwar'); 16 $stmt = $pdo->prepare("select name,class,birth from staff_master where ID = $num"); 17 $stmt->execute(); 18 19 $result = $stmt->fetch(PDO::FETCH_ASSOC); 20 21 ?> 22 23 <form action="chan_ch.php" method="get" style="display: inline"> 24 25 <table> 26 <tr><td>社員NO</td><td><?php echo $_GET['id']; ?></td></tr> 27 <tr><td>氏名</td><td><input type="text" name="n_name" value="<?php echo $result['name'] ?>" /></td></tr> 28 <tr><td>所属</td><td><input type="text" name="n_class" value="<?php echo $result['class'] ?>" /></td></tr> 29 <tr><td>生年月日</td><td> 30 <?php 31 // 年のプルダウン 32 echo "<select name='year'>"; 33 for ($y=1900;$y<date(Y)+1;$y++) { 34 echo "<option value=" . $y . " selected>" . $y . "</option>\n"; 35 } echo "</select>年"; 36 37 // 月のプルダウン 38 $a = array("1", "2", "3", "4", "5", "6","7", "8", "9", "10", "11", "12"); 39 echo "<select name='month'>"; 40 foreach ($a as $key => $value) { 41 $b = $key + 1; 42 echo "<option value=" . $b . " selected>" . $b . "</option>\n"; 43 } echo "</select>月"; 44 45 //日のプルダウン 46 echo "<select name='day'>"; 47 for ($m=1; $m<=31 ; $m++) { 48 echo "<option value=" . $m . " selected>" . $m . "</option>\n"; 49 } echo "</select>日"; 50 ?> 51 52 </td></tr> 53 </table> 54 <input type="submit" value="確認" /> 55 <input type="button" onClick="location.href='master.php'" value="キャンセル" /> 56 </form> 57 58 </body> 59 60</html>

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

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

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

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

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

m.ts10806

2018/06/01 01:43

現状だと全てにselectedがついてしまっていることは認識済みですか?
m.ts10806

2018/06/01 01:44

「データベースからの取得処理」含めてなるべくコード全体が分かるように記載してください。また、データベースのテーブル定義のようなものがありましたらそちらもご提示ください。
ryusan_012

2018/06/01 01:52

いつもありがとうございます、selectedは認識してました
guest

回答2

0

ベストアンサー

データベースに限らず任意の値を初期値にしたい場合の例としてはこんな感じ。

php

1$default_year = "2000"; 2 3echo "<select name='year'>"; 4for ($y=1900;$y<date('Y')+1;$y++) { 5 $y_select = ""; 6 if($default_year == $y){ 7 $y_select = " selected"; 8 } 9 echo '<option value="' . $y . '" '.$y_select.'>' . $y . "</option>\n"; 10} 11echo "</select>年";

幾つか手直ししています。

date(Y) となっていますがYという定数がないと定数未定義のエラーになります。
ので、date('Y')のように文字列としてフォーマットを渡しました。
optionの属性に""がないのが個人的には嫌なのでつけています。

DBの値も例えば下記のようにすれば年だけ取れますね。

php

1$birth_year= date("Y",strtotime($result["birth"])); 2

あとはmもdも同じようにするだけです。
桁数は気にしないといけませんけどね。

気づいたこと:

  • pdo使っているのに値そのまま入れるのはいかがなものか。

GETで受け取った値なら尚さら如何様にも悪さができる。
bindすべきではないか。
プリペアドステートメントおよびストアドプロシージャ

  • インラインのstyleはやめときましょ。
  • PHPの処理とechoがhtmlの中に混ざっていて非常に可読性が悪い。

PHPに関しては<html>の宣言より前に全部処理コード書いて、PHPで組んでいるところは全部変数に入れてechoだけにしては?だって<select name='year'>とかhtmlしかないし。

php

1$year_option = ''; 2for ($y=1900;$y<date('Y')+1;$y++) { 3 $y_select = ""; 4 if($default_year == $y){ 5 $y_select = " selected"; 6 } 7 $year_option .='<option value="' . $y . '" '.$y_select.'>' . $y . "</option>\n"; 8} 9?> 10<!DOCTYPE html> 11<html lang="ja"> 12 <head> 13 14<!-- 省略 --> 15 16<select name="year"> 17<?=$year_option ?> 18</select>
  • たぶんそのままだとidが確認画面に渡らないけど大丈夫?

投稿2018/06/01 02:02

編集2018/06/01 02:04
m.ts10806

総合スコア80848

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

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

0

dbから日付を取り出すとYYYY-MM-DD形式だと思いますので
こんなかんじでしょうか

PHP

1$birth="2000-06-15"; 2list($by,$bm,$bd)=array_map(function($x){return (int) $x;},explode("-",$birth)); 3echo "<select name='year'>\n"; 4foreach(range(1900,date("Y")+1) as $y) { 5 $selected=$y==$by?" selected":""; 6 echo "<option value='{$y}'{$selected}>{$y}</option>\n"; 7} 8echo "</select>年"; 9echo "<select name='month'>\n"; 10foreach(range(1,12) as $m) { 11 $selected=$m==$bm?" selected":""; 12 echo "<option value='{$m}'{$selected}>{$m}</option>\n"; 13} 14echo "</select>月"; 15 16echo "<select name='day'>\n"; 17foreach(range(1,31) as $d) { 18 $selected=$d==$bd?" selected":""; 19 echo "<option value='{$d}'{$selected}>{$d}</option>\n"; 20} 21echo "</select>日";

投稿2018/06/01 02:04

yambejp

総合スコア114757

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問