2つのフォームから値を取得した際に、検索結果を完全一致、部分一致、片側フォームからの値のみで検索の3つで検索結果を分岐をさせたいのですが上手い事処理が思いつきません。
上記が検索結果の表示イメージです。
環境 ローカルホスト XAMPP 仕様してます
実装出来ている事
・$symbolのみの検索結果表示
・$symbolに値がない場合 $sy_errorsを呼び出す処理
・$makerのみに値が入力された時、何も表示させない処理
実装出来ていない事
・$symbolと$makerに値が入力された際に完全一致、部分一致した検索結果の表示
出力の際に$stmt,$stmt2の結果を$rowsで上書き処理している為、検索結果が$stmt2を優先されてしまう事は、分かっているのですが、仮にここで新たに変数を増やすと検索結果の画面で、tableタグを二重に呼び出し、更にそこで条件分岐させる二度手間が生じると考えているのですが、もっと簡潔な記述はありますでしょうか?
ご享受頂けると幸いです。
dbSearchphp
1<?php 2$sy_errors = array(); 3$rows = array(); 4 5if(isset($_GET["symbol"]) && isset($_GET["maker_name"])) { //DataCheck 6 $symbol = $_GET["symbol"]; 7 $maker = $_GET["maker_name"]; 8 9 if(!empty($symbol && $maker)) { 10 require_once("db_connect.php"); 11 try { 12 $dbh = new PDO($dsn,$username,$password,); 13 $stmt = $dbh->prepare("SELECT * FROM search WHERE symbol LIKE (:symbol) "); 14 $stmt2 = $dbh->prepare("SELECT * FROM search WHERE maker_name LIKE (:maker_name) "); 15 16 if($stmt) { 17 $search_maker = $maker; 18 $search_symbol = $symbol; 19 20 $stmt->bindValue(':symbol', $search_symbol, PDO::PARAM_STR); 21 $stmt->execute(); 22 $stmt2->bindValue(':maker_name', $search_maker, PDO::PARAM_STR); 23 $stmt2->execute(); 24 25 $rows = $stmt->fetchAll(); 26 $rows = $stmt2->fetchAll(); 27 $dbh = null; 28 } 29 } catch(PDOException $e) { 30 echo 'DB接続エラー :' . $e->getMessage(); 31 } 32 33 }else if(!empty($symbol)){ 34 require_once("db_connect.php"); 35 try { 36 $dbh = new PDO($dsn,$username,$password,); 37 $stmt = $dbh->prepare("SELECT * FROM search WHERE symbol LIKE (:symbol) "); 38 if($stmt) { 39 $search_symbol = $symbol; 40 $stmt->bindValue(':symbol', $search_symbol, PDO::PARAM_STR); 41 $stmt->execute(); 42 43 $rows = $stmt->fetchAll(); 44 $dbh = null; 45 } 46 } catch(PDOException $e) { 47 echo 'DB接続エラー :' . $e->getMessage(); 48 } 49 }else{ 50 $sy_errors['error'] = "<p>"."※記号入力は必須です"."</p>"; 51 } 52 } 53?>
Searchphp
1<?php require("DataBase\dbsearch_symbol copy.php"); ?> 2 3<html lang="ja"> 4<head> 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 6 <meta http-equiv="Content-Language" content="ja" /> 7 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 8 <title>製造所固有記号</title> 9 <link rel="stylesheet" href="../stylesheet/stylesheet.css"> 10</head> 11 12<body> 13<form action="sr.php" method="get"> 14<!--Main Title--> 15<a href="index.php"><h1 align="center">製造所固有記号検索</h1></a> 16<!--Sub Title--> 17<div id="form"> 18 <h2>検索フォーム</h2> 19</div> 20<!--Searh Contents Area--> 21<div class="search_contents"> 22 <table style="border-color: #b4d46e; border-style: solid; border-width: 2px;" width="150" bgcolor="#eff9db"> 23 <td class="label">記号:<span style="color: #FF0000">必須<span></td> 24 <td class="search_symbol"><input type="text" name="symbol" size="5" max_length="10" placeholder="例: A"> 25 </tr> 26 <tr> 27 <td class="label">製造者:</td> 28 <td class="search_maker"><input type="text" name="maker_name" size="30" maxlength="50" class="maker" placeholder="例: ○○株式会社"></td> 29 </tr> 30 <tr> 31 <td class="search_button"><input type="submit" value="検索" name="search" id="search"> 32 </tr> 33 </table> 34</div> 35 36<div class="result_symbol"> 37 <h3><b>検索結果</b></h3> 38 39<!--Result--> 40<table border="2"> 41<tr><td>所在地</td><td>記号</td><td>法人番号</td><td>製造者名</td><td>製造者所在地</td></tr> 42<?php require("Database/Result_table/result.php"); ?> 43 44<!--Error_Count--> 45<?php if(count($sy_errors) > 0): ?> 46<?php 47foreach($sy_errors as $sy_value){ 48 if(isset($sy_value)){ 49 echo "<p>".$sy_value."</p>"; 50 } 51} 52?> 53<?php endif ?> 54</div> 55 56<!--close Window--> 57<div class="close_button"> 58 <hr width="98%"> 59 <table width="100%"> 60 <tr align="center"> 61 <td class="item_button"><input class="button" name="back" type="button" value="閉じる" /></td> 62 </tr> 63 </table> 64</div> 65 <footer>フッター</footer> 66</body> 67</html>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/08 13:10