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

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

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

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

1回答

574閲覧

PHP: 一覧画面に検索機能を加えたいです

退会済みユーザー

退会済みユーザー

総合スコア0

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2020/07/21 05:40

編集2022/01/12 10:55

PHPを使い残業申請をweb上でできるようにするためのシステムを作っています。
申請されたものをリストにしており、ドロップダウンメニューを使い絞り込み検索を行いたいのですがうまくいきません。
以下がコードです。

PHP

1//データベースに接続 2<?php include('dbc.php');?> 3 4<?php 5//申請されたすべてのものを表示 6$list = $pdo->prepare("SELECT * FROM テーブル名"); 7$list->execute(); 8$temp= $list->fetchall(); 9 10//ここから絞り込み検索の処理を記入しているところです、、、 11$where_sql=""; 12 13if(isset($_GET['search'])){ 14 if($name!=""){ 15 $where_sql="WHERE テーブル名.name='".$name."'"; 16 } 17 if($kenban!=""){ 18 $where_sql="WHERE テーブル名.kenban='".$kenban."'"; 19 }else{ 20 $where_sql="AND テーブル名.kenban='".$kenban."'"; 21 } 22 if($jissiday!=""){ 23 if ($where_sql=="") { 24 $where_sql = "WHERE テーブル名.jissiday='".$jissiday."'"; 25 }else{ 26 $where_sql .= " AND テーブル名.jissiday='".$jissiday."'"; 27 } 28 } 29} 30 31 32 33?>

HTML

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <link rel="stylesheet" type="text/css" href=css/stylesheet2_test.css> 6 <link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet"> 7 8 <title>時間外申請済リスト</title> 9</head> 10 11<a style="margin-left:100px;text-decoration:none;font-size:1.2rem" href='/try_gyoumu/index.php'>業務支援メニューへ</a> 12 13<body> 14 <h1 class="title">~時間外勤務申請済リスト~</h1> 15 16    //ドロップダウンメニューを実装 17 <div class="selectContainer"> 18 <div class="selectBox"> 19 <form action="jikangai_list_test.php" method="get"> 20 21 <select name="name"> 22 <option>名前</option> 23 <?php foreach ($namelist as $output) {?> 24 <option><?php echo $output['name']; ?></option> 25 <?php }?> 26 </select> 27 28 <select name="kenban"> 29 <option>件番</option> 30 <?php foreach ($gyoumulist as $moutput) {?> 31 <option value='<?php echo $moutput[kenban]?>'><?php echo $moutput[kenban].' '.$moutput['kenmei']; ?></option> 32 <?php }?> 33 </select> 34 <br> 35 36 <input type="date">から <input type="date">まで 37 <input class="sarch-button" type="submit" name="search" value="検索"> 38  //ここまで 39 40 <ul class="sort"> 41 <li><a class="ichiran" href="jikangai_list.php">全て表示</a></li> 42 <li><a class="ichiran" href="misoumuin.php">未総務印一覧</a></li> 43 <li><a class="ichiran" href="jissibi_mikinyu.php">実施日未記入一覧</a></li> 44 <li><a class="ichiran" href="list_newer.php">新しい順</a></li> 45 <li><a class="ichiran" href="list_older.php">古い順</a></li> 46 </ul> 47 </form> 48 </div> 49 </div> 50 51 52 <br> 53 <table> 54 <tr> 55 <th>名前</th> 56 <th>予定日</th> 57 <th>予定開始時刻</th> 58 <th>予定終了時刻</th> 59 <th>承認</th> 60 <th>実施日</th> 61 <th>実施開始時刻</th> 62 <th>実施終了時刻</th> 63 <th>時間外稼働時間</th> 64 <th>件番</th> 65 <th>内容</th> 66 <th>総務印</th> 67 <th>編集</th> 68 <th>削除</th> 69 </tr> 70 71 <?php 72 foreach($temp as $data){ 73 ?> 74 <tr> 75 <?php printf("<td>%s</td>",$data['name']); ?> 76 <?php printf("<td>%s</td>",$data['yoteiday']); ?> 77 <?php printf("<td>%s</td>",$data['yoteistarttime']); ?> 78 <?php printf("<td>%s</td>",$data['yoteiendtime']); ?> 79 <?php printf("<td>%s</td>",$data['syounin']); ?> 80 <?php printf("<td>%s</td>",$data['jissiday']); ?> 81 <?php printf("<td>%s</td>",$data['jissistarttime']); ?> 82 <?php printf("<td>%s</td>",$data['jissiendtime']); ?> 83 <?php 84 $from = $data['jissiendtime']; 85 $to = $data['jissistarttime']; 86 $result = date_diff(new DateTime($from), new DateTime($to))->format('%H:%I:%S'); 87 printf("<td>%s</td>",$result); 88 ?> 89 <?php printf("<td>%s</td>",$data['kenban']); ?> 90 <?php printf("<td>%s</td>",$data['naiyou']); ?> 91 <?php printf("<td>%s</td>",$data['soumuin']); ?> 92 <td><a class="fa fa-edit" href="update_form_test.php?id=<?php echo $data['id']?>"></a></td> 93 <td><a class="fa fa-trash delete" href="delete.php?id=<?php echo $data['id'] ?>"></a></td> 94 </tr> 95 <?php 96 } 97 ?> 98 </table> 99 100</body> 101</html> 102 103<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script> 104<script> 105$('.delete').click(function(){ 106if(!confirm('本当に削除しますか?')){ 107 return false; 108} 109}); 110</script>

やりたいこと
0. 検索ボタンを押すと、選択した条件に当てはまるものをリストに表示したい
0. 何も検索していないときはすべて表示
0. 期間(jissiday)は範囲指定

ググりながらやってはいるものの歯が立たない状態です、、、
現在エラーは起きていませんが、検索を押しても何も返ってこない状態です。
わかる方がいらっしゃればご教示ください。

追記

選択されればそれを表示、されていなければ全部を表示するようにしました。

php

1$where_sql=""; 2 3if(isset($_GET['search'])){ 4 if($name!=""){ 5 $where_sql="WHERE table_jikangai.name='".$name."'"; 6 } 7 if($kenban!=""){ 8 $where_sql="WHERE table_jikangai.kenban='".$kenban."'"; 9 }else{ 10 $where_sql="AND table_jikangai.kenban='".$kenban."'"; 11 } 12 if($jissiday!=""){ 13 if ($where_sql=="") { 14 $where_sql = "WHERE table_jikangai.jissiday='".$jissiday."'"; 15 }else{ 16 $where_sql .= " AND table_jikangai.jissiday='".$jissiday."'"; 17 } 18 } 19}else{ 20 $list = $pdo->prepare("SELECT * FROM table_jikangai"); 21 $list->execute(); 22 $temp= $list->fetchall(); 23};

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

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

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

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

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

yoorwm

2020/07/21 05:47

全く何をしたいのか?が分からないので、「何をしたくてこう書いた」部分だけ書くようにしてください。
thyda.eiqau

2020/07/21 06:16

$printflg = "?name=".$name."&kenban=".$kenban."&jissiday=".$jissiday; この行でいきなり出てくる $name, $kenban, $jissiday って何ですか?
退会済みユーザー

退会済みユーザー

2020/07/21 06:59

yoorwmさん すみません。質問の意図が分かるよう修正します。 thyda.eiqauさん すみませんそちらは消し忘れていた箇所です。訂正します。
guest

回答1

0

php

1$stmt = $pdo->prepare('SELECT * FROM テーブル名 2 WHERE テーブル名.name = CASE WHEN :name <> '' THEN :name ELSE テーブル名.name END 3 AND テーブル名.kenban = CASE WHEN :kenban <> '' THEN :kenban ELSE テーブル名.kenban END 4 AND テーブル名.jissiday = CASE WHEN :jissiday <> '' THEN :jissiday ELSE テーブル名.jissiday END'); 5$stmt->bindValue(':name', $name); 6$stmt->bindValue(':kenban', $kenban); 7$stmt->bindValue(':jissiday', $jissiday); 8$stmt->execute();

いま試せる環境にないので未検証ですが、「空なら全検索、指定されていたら条件付」はSQL側に入れたほうがよいのではないかと思います。DBMSにもよるかもしれませんが。

投稿2020/07/21 07:04

thyda.eiqau

総合スコア2982

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

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

退会済みユーザー

退会済みユーザー

2020/07/21 08:09

ありがとうございます。 上記の記述を加えるとエラーが出てしまいました。まだ原因がわかっていないので、また進展を書かせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問