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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

2回答

1609閲覧

PHP データベース検索 2つのフォームからの入力データを素に、部分一致、完全一致を実装したい

19970311kk

総合スコア2

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2021/12/06 15:26

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>

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

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

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

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

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

guest

回答2

0

これでよろしいでしょうか?

php

1 $sy_errors = array(); 2 $rows = array(); 3 4 if(isset($_GET["symbol"]) && isset($_GET["maker_name"])) { //DataCheck 5 $symbol = $_GET["symbol"]; 6 $maker = $_GET["maker_name"]; 7 8 if(empty($symbol)){ 9 $sy_errors['error'] = "<p>"."※記号入力は必須です"."</p>"; 10 } 11 else { 12 require_once("db_connect.php"); 13 try { 14 $dbh = new PDO($dsn,$username,$password,); 15 $stmt = $dbh->prepare("SELECT * FROM search WHERE symbol LIKE (:symbol) OR maker_name LIKE (:maker_name) "); 16 17 if($stmt) { 18 $stmt->bindValue(':symbol', $symbol, PDO::PARAM_STR); 19 $stmt->bindValue(':maker_name', $maker, PDO::PARAM_STR); 20 $stmt->execute(); 21 22 $rows = $stmt->fetchAll(); 23 $dbh = null; 24 } 25 } catch(PDOException $e) { 26 echo 'DB接続エラー :' . $e->getMessage(); 27 } 28 } 29 }

投稿2021/12/06 16:03

skys215

総合スコア910

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

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

19970311kk

2021/12/08 13:10

回答ありがとうございます。 コード修正して頂きありがとうございます。 参考にさせて頂きます。
guest

0

自己解決

SQL文をANDで繋ぎ直したら、2つの値の完全一致は取れましたが、$makerの部分一致がされません。
条件分岐を増やすのが得策でしょうか?

php

1if(!empty($symbol && $maker)) { 2 require_once("db_connect.php"); 3 try { 4 $dbh = new PDO($dsn,$username,$password,); 5 $stmt = $dbh->prepare("SELECT * FROM search WHERE symbol LIKE (:symbol) AND maker_name LIKE (:maker_name)"); 6 7 if($stmt) { 8 $search_maker = $maker; 9 $search_symbol = $symbol; 10 11 $stmt->bindValue(':symbol', $search_symbol, PDO::PARAM_STR); 12 $stmt->bindValue(':maker_name', $search_maker, PDO::PARAM_STR); 13 $stmt->execute(); 14 15 $rows = $stmt->fetchAll(); 16 $dbh = null; 17 } 18 } catch(PDOException $e) { 19 echo 'DB接続エラー :' . $e->getMessage(); 20 }

投稿2021/12/06 15:40

19970311kk

総合スコア2

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

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

19970311kk

2021/12/08 13:09

回答ありがとうございます $stmt = $dbh->prepare("SELECT * FROM search WHERE symbol LIKE (:symbol) AND maker_name LIKE (:maker_name)"); if($stmt) { $stmt->bindValue(':symbol', $symbol, PDO::PARAM_STR); $stmt->bindValue(':maker_name', "%".$maker ."%", PDO::PARAM_STR); 動作は期待していた動作をするようになったのですが、 この箇所であれば%の位置がこうなるという認識で合っているのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問