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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

Q&A

解決済

2回答

3566閲覧

PHP セレクトボックスを用いたデータ表示

chocolat_0416

総合スコア13

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

0グッド

2クリップ

投稿2018/04/16 16:00

前提・実現したいこと

セレクトボックスで職種選択し(全員、マネージャー、アナリスト、一般職)、表示ボタンを押すと
その職種に対応した人物名が絞り込みされる操作を行いたい。

職種の(マネージャー、アナリスト、一般職)を選択した際には絞り込みされるが、
全員を押した際には、データが空になってしまう。

イメージ説明
イメージ説明
イメージ説明

該当のソースコード

php

1<?php 2 3$emp = ''; 4$all = ''; 5if (isset($_POST['all']) === TRUE) { 6 $all = $_POST['all']; 7} 8 9if (isset($_POST['emp']) === TRUE) { 10 $emp = $_POST['emp']; 11 12} 13 14$emp_data = array(); 15$order = ''; 16 17$host = 'localhost'; // データベースのホスト名又はIPアドレス 18$username = 'codecamp21605'; // MySQLのユーザ名 19$passwd = 'MQSOCCZP'; // MySQLのパスワード 20$dbname = 'codecamp21605'; // データベース名 21$link = mysqli_connect($host, $username, $passwd, $dbname); 22// 接続成功した場合 23if ($link) { 24 // 文字化け防止 25 mysqli_set_charset($link, 'utf8'); 26 27 if (isset($_POST['all']) === TRUE) { 28 $query = "SELECT * FROM emp_table"; 29 } 30 31 if (isset($_POST['emp']) === TRUE) { 32 $query = "SELECT * FROM emp_table WHERE job = '$emp'"; 33 } else { 34 $query = 'SELECT * FROM emp_table'; 35 } 36 // クエリを実行します 37 $result = mysqli_query($link, $query); 38 // 1行ずつ結果を配列で取得します 39 while ($row = mysqli_fetch_array($result)) { 40 $emp_data[] = $row; 41 } 42 // 結果セットを開放します 43 mysqli_free_result($result); 44 // 接続を閉じます 45 mysqli_close($link); 46// 接続失敗した場合 47} else { 48 print 'DB接続失敗'; 49} 50 51?> 52<!DOCTYPE html> 53<html lang="ja"> 54<head> 55 <meta charset="UTF-8"> 56 <title>サンプル</title> 57 <style type="text/css"> 58 table, td, th { 59 border: solid black 1px; 60 } 61 table { 62 width: 200px; 63 } 64 </style> 65</head> 66<body> 67 <p>表示する職種を選択してください。</p> 68 <form method ="post"> 69 <select name="emp"> 70 71 <option value="all" name="all" <?php if ($emp === 'all') { print 'selected'; } ?>>全員</option> 72 <option value="manager" <?php if ($emp === 'manager') { print 'selected'; } ?>>マネージャー</option> 73 <option value="analyst" <?php if ($emp === 'analyst') { print 'selected'; } ?>>アナリスト</option> 74 <option value="clerk" <?php if ($emp === 'clerk') { print 'selected'; } ?>>一般職</option> 75 76 </select> 77 <input type="submit" value="表示"></form> 78 <h>社員一覧</h> 79 <table> 80 <tr> 81 <th>emp_name</th> 82 <th>job</th> 83 <th>age</th> 84 </tr> 85<?php 86foreach ($emp_data as $value) { 87?> 88 <tr> 89 <td><?php print htmlspecialchars($value['emp_name'], ENT_QUOTES, 'UTF-8'); ?></td> 90 <td><?php print htmlspecialchars($value['job'], ENT_QUOTES, 'UTF-8'); ?></td> 91 <td><?php print htmlspecialchars($value['age'], ENT_QUOTES, 'UTF-8'); ?></td> 92 } 93?> 94 </table> 95</body> 96</html>

試したこと

・form内のoption要素にname="all"をつけ、上のPHP内でif文を使い、全員が選択されたときに

'SELECT * FROM emp_table';

を実行させ、emp_tableの値をすべて取り出そうとした。

おわりに

あと一息で完成なので、分かる方がおられましたら、お力添えになっていただきたいです。

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

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

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

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

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

guest

回答2

0

HTMLのoption要素はフォーム部品であるselect要素を構成する一部ですが, 単体でフォームの送信対象にはなれません. つまり <option value="all" name="all">何ら効果はありません.

https://developer.mozilla.org/ja/docs/Web/HTML/Element/option

一方のPHPではポストデータにallが含まれている前提でスクリプトが記述されています.

この部分の辻褄を合わせればうまく行くことでしょう.

投稿2018/04/16 18:32

defghi1977

総合スコア4756

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

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

chocolat_0416

2018/04/16 23:24

ありがとうございます!無事に完成できました! option要素とselecty要素の理解が不十分でしたが、 おかげさまで理解ができました!
guest

0

ベストアンサー

ヒントだけです。

php

1 if (isset($_POST['all']) === TRUE) { 2 $query = "SELECT * FROM emp_table"; 3 } 4 5 if (isset($_POST['emp']) === TRUE) { 6 $query = "SELECT * FROM emp_table WHERE job = '$emp'"; 7 } else { 8 $query = 'SELECT * FROM emp_table'; 9 } 10 11 var_dump($query); // <-これを追記して、実行しましょう。

var_dump($query) のところで、実行されるはずのSELECT文が表示されます。
あなたが意図していないものが実行されているはずです。

投稿2018/04/16 16:06

編集2018/04/16 16:07
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

chocolat_0416

2018/04/16 23:25

ありがとうございます!無事に完成できました! var_dumpを用いると、POSTがどれを受け取っているのか わかるのですね。 おかげさまで理解ができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問