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

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

ただいまの
回答率

90.84%

  • PHP

    18224questions

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

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

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 104

ryusan_012

score 4

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

<!DOCTYPE html>
<html lang="ja">

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>change</title>
    </head>

    <body>

        <h2>登録情報変更</h2>

            <?php
                $num = htmlspecialchars($_GET["id"]);
                $pdo = new PDO('mysql:dbname=staff_manager;host=localhost;charset=utf8', 'user', 'passwar');
                $stmt = $pdo->prepare("select name,class,birth from staff_master where ID = $num");
                $stmt->execute();

                $result = $stmt->fetch(PDO::FETCH_ASSOC);

            ?>

            <form action="chan_ch.php" method="get" style="display: inline">

                <table>
                    <tr><td>社員NO</td><td><?php echo $_GET['id']; ?></td></tr>
                    <tr><td>氏名</td><td><input type="text" name="n_name"  value="<?php echo $result['name'] ?>" /></td></tr>
                    <tr><td>所属</td><td><input type="text" name="n_class"  value="<?php echo $result['class'] ?>" /></td></tr>
                    <tr><td>生年月日</td><td>
                <?php
                        // 年のプルダウン
                        echo "<select name='year'>";
                        for ($y=1900;$y<date(Y)+1;$y++) {
                            echo "<option value=" . $y . " selected>" . $y . "</option>\n";
                        } echo "</select>年";

                        // 月のプルダウン
                        $a = array("1", "2", "3", "4", "5", "6","7", "8", "9", "10", "11", "12");
                        echo "<select name='month'>";
                        foreach ($a as $key => $value) {
                            $b = $key + 1;
                            echo "<option value=" . $b . " selected>" . $b . "</option>\n";
                        } echo "</select>月";

                        //日のプルダウン
                        echo "<select name='day'>";
                        for ($m=1; $m<=31 ; $m++) {
                            echo "<option value=" . $m . " selected>" . $m . "</option>\n";
                        } echo "</select>日";
                    ?>

                    </td></tr>
                </table>
                <input type="submit" value="確認" />
                <input type="button" onClick="location.href='master.php'" value="キャンセル" />
            </form>

    </body>

</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/06/01 10:43

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

    キャンセル

  • mts10806

    2018/06/01 10:44

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

    キャンセル

  • ryusan_012

    2018/06/01 10:52

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

    キャンセル

回答 2

+1

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

$default_year = "2000";

echo "<select name='year'>";
for ($y=1900;$y<date('Y')+1;$y++) {
    $y_select = "";
    if($default_year == $y){
        $y_select = " selected";
    }
    echo '<option value="' . $y . '" '.$y_select.'>' . $y . "</option>\n";
}
echo "</select>年";


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

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

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

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


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

気づいたこと:

  • pdo使っているのに値そのまま入れるのはいかがなものか。
    GETで受け取った値なら尚さら如何様にも悪さができる。
    bindすべきではないか。
    プリペアドステートメントおよびストアドプロシージャ
  • インラインのstyleはやめときましょ。
  • PHPの処理とechoがhtmlの中に混ざっていて非常に可読性が悪い。
    PHPに関しては<html>の宣言より前に全部処理コード書いて、PHPで組んでいるところは全部変数に入れてechoだけにしては?だって<select name='year'>とかhtmlしかないし。
$year_option = '';
for ($y=1900;$y<date('Y')+1;$y++) {
    $y_select = "";
    if($default_year == $y){
        $y_select = " selected";
    }
    $year_option .='<option value="' . $y . '" '.$y_select.'>' . $y . "</option>\n";
}
?>
<!DOCTYPE html>
<html lang="ja">
    <head>

<!-- 省略 -->

<select name="year">
<?=$year_option ?>
</select>年
  • たぶんそのままだとidが確認画面に渡らないけど大丈夫?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

$birth="2000-06-15";
list($by,$bm,$bd)=array_map(function($x){return (int) $x;},explode("-",$birth));
echo "<select name='year'>\n";
foreach(range(1900,date("Y")+1) as $y) {
  $selected=$y==$by?" selected":"";
  echo "<option value='{$y}'{$selected}>{$y}</option>\n";
}
echo "</select>年";
echo "<select name='month'>\n";
foreach(range(1,12) as $m) {
  $selected=$m==$bm?" selected":"";
  echo "<option value='{$m}'{$selected}>{$m}</option>\n";
}
echo "</select>月";

echo "<select name='day'>\n";
foreach(range(1,31) as $d) {
  $selected=$d==$bd?" selected":"";
  echo "<option value='{$d}'{$selected}>{$d}</option>\n";
}
echo "</select>日";

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    18224questions

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