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

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

新規登録して質問してみよう
ただいま回答率
85.46%
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回答

568閲覧

指定したものを検索処理したいけど、全ての結果がヒットしてしまう

yoshioka01

総合スコア21

SQL

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

PHP

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

0グッド

0クリップ

投稿2021/10/10 08:39

わからないこと
・検索処理をしても指定したものではなくすべてヒットしてしまう
・Undefined indexのエラー処理がうまくいかない

期待する結果
"田中"と検索するとデータベースから"田中"を探してcount変数で検索結果を表示する
ーーーーーーーーーーーーーーー
接続しました
検索結果は1件です

番号 氏 名 年齢
1 田中 一郎 21
ーーーーーーーーーーーーーーー
上のような結果を出力したいです

現在の結果
29行目のエラーと検索結果の不一致が起こります
ーーーーーーーーーーーーーーー
接続しました

Notice: Undefined index: serch_key in C:\xampp\htdocs\suraphpsamp\Chapter8\list.php on line 29
検索結果は5件です
番号 氏 名 年齢
1 田中 一郎
2 山田 二郎
3 林 三郎
4 鈴木 四郎
5 佐藤 五郎
ーーーーーーーーーーーーーーー

以下。SQL文とHTML,PHPのコードになります

sql

1 create table member( 2 id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, 3 last_name VARCHAR(50), 4 first_name VARCHAR(50), 5 age tinyint unsigned, 6 primary key (id) 7 ); 8 9+----+-----------+------------+------+ 10| id | last_name | first_name | age | 11+----+-----------+------------+------+ 12| 1 | 田中 | 一郎 | 21 | 13| 2 | 山田 | 二郎 | 18 | 14| 3 || 三郎 | 35 | 15| 4 | 鈴木 | 四郎 | 10 | 16| 5 | 佐藤 | 五郎 | 28 | 17+----+-----------+------------+------+

form.php

php

1<!DOCTYPE html> 2<html lang = "ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>PHPのテスト</title> 6</head> 7<body> 8 <div style ="font-size:14px">PHPのテスト</div> 9 10<form name = "form1" method = "post" action="list.php"> 11 名前:<br> 12 <input type = "text" name = "search_key"> 13 <br> 14 15 <input type = "submit" value = "送 信"> 16 </form> 17 18</body> 19</html> 20 21

list.php

php

1<!DOCTYPE html> 2<html lang = "ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>PHPのテスト</title> 6</head> 7<body> 8 9<?php 10 11$db_user = "sample"; 12$db_pass = "password"; 13$db_host = "localhost"; 14$db_name = "sampledb"; 15$db_type = "mysql"; 16 17$dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8"; 18 19try{ 20 $pdo = new PDO($dsn,$db_user,$db_pass); 21 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 22 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 23 print "接続しました<br>"; 24 25}catch(PDOException $Exception){ 26 die("接続エラー:".$Exception->getMessage()); 27} 28 29$search_key = '%'.$_POST['serch_key'].'%'; //ここが29行目 30 31try{ 32 $sql = "SELECT * FROM member WHERE last_name like :last_name OR first_name like :first_name"; 33 34 $stmh = $pdo->prepare($sql); 35 $stmh->bindValue(':last_name',$search_key,PDO::PARAM_STR); 36 $stmh->bindValue(':first_name',$search_key,PDO::PARAM_STR); 37 $stmh->execute(); 38 $count = $stmh->rowCount(); 39 print "検索結果は".$count."件です<br>"; 40 41}catch(PDOException $Exception){ 42 $pdo->rockBack(); 43 print "エラー:".$Exception->getMessage(); 44 45} 46if($count < 1){ 47 print "検索結果がありません<br>"; 48}else{ 49?> 50<table border = "1"> 51 <tbody> 52 <tr><th>番号</th><th></th><th></th><th>年齢</th></tr> 53 54<?php 55while ($row = $stmh->fetch(PDO::FETCH_ASSOC)){ 56?> 57<tr> 58<td><?=htmlspecialchars($row["id"],ENT_QUOTES)?></td> 59<td><?=htmlspecialchars($row["last_name"],ENT_QUOTES)?></td> 60<td><?=htmlspecialchars($row["first_name"],ENT_QUOTES)?></td> 61</tr> 62 63<?php 64} 65?> 66 67</tbody></table> 68<?php 69} 70?> 71 72</body> 73</html> 74 75

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーが出ているのが分かっているのなら、エラーの意味をお調べください。
意味を理解したら、調べるべきポイントが分かるかと思います。
想定していないエラーが発生している以上、あなたのコードに誤りがあるはずです。
該当のポイントを中心に誤りを探してください。

また、このエラーにより、何が起こっているのか、ご確認ください。
特に、実際に処理されているSQLの確認は必須です。

上記を完全に把握できたら、修正をしてください。

なお、修正は、たった一文字追加するだけです。

投稿2021/10/10 11:30

YT0014

総合スコア1708

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

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

yoshioka01

2021/10/10 14:59

基本的な確認を怠ってました serch_keyの部分をsearch_keyに直して検索結果が一致するようになりました ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問