PHPでselected属性を表示する方法とは【メンターが回答】

「PHPでselected属性を指定する方法を教えてください。」という質問にTechAcademyの現役エンジニアが解決方法を回答しています。セレクトボックスの要素を選択状態にする書き方についてぜひ理解しておきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

※TechAcademyに実際に寄せられた質問に現役エンジニアのメンターが回答しました。

 

田島悠介

質問に対して現役のエンジニアが回答していくシリーズだね!

大石ゆかり

今回はどういう質問でしょうか?

田島悠介

PHPでselected属性を表示する方法だね!実際に回答してもらった内容を紹介するね!

大石ゆかり

お願いします!

質問

MySQLからデータを抽出して、tableで表を作成しています。

現在bodyに対して、元々送信される内容は4つで、「出勤」「退勤」「休入」「休戻」となっています。

最初の$row[‘body’]には、上記のいずれかが入っています。

しかし、この場合で、もし$row[‘body’] = 出勤だとすると、セレクトボックス内は出勤が2つとなり、選択肢が5つもあることになります。

下記(2)のような動きをする方法を探しています。(3)には、データの引っ張り方を記述しています。

 

該当のソースコード

(1)

<?php
// データベースに接続、SELECTで取得(記載飛ばします)
while ($row = $stmt->fetch()) :
?>
<tr>
  // 名前の取得(今回ここは関係なし)
  <td><?php echo $row['name']; ?></td>
 // 元々サブミットされた値の取得
  <td>
    <select>
      <option><?php echo $row['body']; ?></option>
      <option>出勤</option>
      <option>退勤</option>
      <option>休入</option>
      <option>休戻</option>
    </select>
  </td>

(2)

// 選択肢はあくまで4つ

<select>
  <option>出勤</option>
  // もし$row['body']が"出勤"だったならば、セレクトボックスの出勤の<option>が<option selected>になっている。
  <option>退勤</option>
  <option>休入</option>
  <option>休戻</option>
</select>

(3)

HTML

<form action="" method="POST">
  // 年月日を選択してサブミット
</form>

PHP

$year = $_POST['year'];
$month = $_POST['month'];
$day = $_POST['day'];

try {
  $dbh = new PDO(DSN, DB_USER, DB_PASSWORD);
  $dbh->setAttribute(PDO::ATTR_EMULATE, false);
  $stmt = $dbh->prepare(
    "SELECT * FROM tablename WHERE year = ? AND month = ? AND day = ?")
  $stmt->bindParam(1, $year, PDO::PARAM_STR);
  $stmt->bindParam(2, $month, PDO::PARAM_STR);
  $stmt->bindParam(3, $day, PDO::PARAM_STR);
  $stmt->execute();
} catch (PDOException $e) {
  echo $e->getMessage();
  exit;
}

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

メンターからの回答

データベースから取得したbodyの値に該当するoption要素を選択状態にしたい、という質問だと理解しました。

以下のように、各option要素でその値と一致しているかを判定し、一致していればselected属性を出力すれば良いと思います。JavaScriptを使う必要はありません。

<?php
  $options = ['出勤', '退勤', '休入', '休戻']; // 選択肢
?>

<select>
  <?php foreach ($options as $option): // 選択肢の数だけ繰り返し ?>
    <option <?php echo ($option === $row['body']) ? 'selected' : ''; ?>>
      <?php echo $option; ?>
    </option>
  <?php endforeach; ?>
</select>

 

以上、PHPでselected属性を表示する方法について解説しました。

TechAcademyでは、現役PHPエンジニアのメンターが質問にすぐ回答します。

他にもPHPとHTMLをまとめてコメントアウトする方法をメンターが回答しているので、合わせてご覧ください。

 

回答してくれたメンター

杉本 隆也(すぎもとたかや)

フリーランスのアプリケーションエンジニア。WebアプリやiOSアプリの受託開発をしながら、TechAcademyではPHP/Laravelコースを担当しています。

開発実績: マッチングサービス、カスタマーサービス、決済ツール、SNSアプリ、音遊びアプリなど。

 

田島悠介

PHPでselected属性を表示する方法について解説したよ。

大石ゆかり

値によってHTMLの出力を切り替えれば良いんですか?

田島悠介

そうそう。値が一致していたらselectedのほうを、そうでなければselectedが無いHTMLを表示してあげればいいね。

大石ゆかり

わかりました。ありがとうございます!

 

TechAcademyでは、オンラインブートキャンプPHP/Laravelコースを提供しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

独学に限界を感じている場合はご検討ください。