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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

3499閲覧

SQL文にデータがない場合は処理を終わらせて前画面に戻りたい PHP

asianLad

総合スコア16

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2021/05/01 05:48

やりたいこと

SQLのSLECT文で選択された値がDBに存在しない場合は処理を終わらせて前画面に戻る処理を入れたいです。
以下のコードを書いてみたのですが、このコードを入れると実際に値がある時にSELECT文を使うとうまくデータがとってこれません。
どのようにして値の確認をすれば良いのかご教授お願いいたします。

php

1$check_db=$stmt->fetch(PDO::FETCH_ASSOC); 2if(empty($check_db)){ 3 print'検索したカードが存在しません。<br />'; 4 echo '<a href="' . $_SERVER['HTTP_REFERER'] . '">戻る</a>'; 5 exit(); 6}

ページ全体のソースコード

php

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>トレカDB</title> 6</head> 7<body> 8 9<?php 10 11header("Content-type: text/html; charset=utf-8"); # このコードはコンテンツはhtmlで文字コードはutf-8であるという意味。通常はプログラムでわざわざ指定しなくても 12#Webサーバが勝手につけてくれますが、プログラムから指定しているのは、より明示的に文字化けや、文字コードの違いを利用したXSS攻撃等を防ぐ 13 14try 15{ 16 17print 'カード一覧<br /><br />'; 18 19$pro_name=$_POST['name']; 20$pro_attribute=$_POST['attribute']; 21$pro_type=$_POST['type']; 22$pro_number=$_POST['number']; 23 24print$_POST['name']; 25echo '<br>'; 26print$_POST['attribute']; //テスト用 27echo '<br>'; 28print$_POST['type']; 29echo '<br>'; 30print$_POST['number']; 31echo '<br>'; 32 33$pro_name=htmlspecialchars($pro_name,ENT_QUOTES,'UTF-8'); 34$pro_attribute=htmlspecialchars($pro_attribute,ENT_QUOTES,'UTF-8'); 35$pro_type=htmlspecialchars($pro_type,ENT_QUOTES,'UTF-8'); 36$pro_number=htmlspecialchars($pro_number,ENT_QUOTES,'UTF-8'); 37 38if($pro_name=='' && $pro_attribute=='' && $pro_type=='' && $pro_number=='' ) 39{ 40 print("検索項目が全て空白です。値を入力してください。"); 41 print '<form>'; 42 print '<input type="button" onclick="history.back()" value="戻る">'; 43 print '</form>'; 44 exit(); 45} 46/* else 47{ 48 print 'カード一覧<br /><br />'; 49} 50 */ 51$sql_part_head="SELECT code,name,attribute,type,number FROM mst_product"; 52 53$first_query = true; 54 55if(isset($_POST['name'])==true) 56{ 57 $sql_part_A = "name LIKE '%$pro_name%'"; 58 $first_query=false; 59} 60else{ 61 if(isset($_POST['attribute'])==true) { 62 if($first_query==true){ 63 $sql_part_B = "attribute LIKE '%$pro_attribute%'"; 64 } 65 else{ 66 $sql_part_B="attribute LIKE '%$pro_attribute%'"; 67 } 68 } 69 if(isset($_POST['type'])==true) { 70 if($first_query==true){ 71 $sql_part_C = "type LIKE '%$pro_type%'"; 72 } 73 else{ 74 $sql_part_C="type LIKE '%$pro_type%'"; 75 } 76 } 77 if(isset($_POST['number'])==true) { 78 if($first_query==true){ 79 $sql_part_D = "number LIKE '%$pro_number%'"; 80 } 81 else{ 82 $sql_part_D="number LIKE '%$pro_number%'"; 83 } 84 } 85} 86 87$dsn='mysql:dbname=yugioh;host=localhost;charset=utf8'; 88$user='root'; 89$password=''; 90$dbh=new PDO($dsn,$user,$password); 91$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 92 93/* $sql="SELECT code,name,attribute,type,number FROM mst_product '$sql_part_A'and'$sql_part_B'and'$sql_part_C'and'$sql_part_D'"; */ 94$sql="SELECT code,name,attribute,type,number FROM mst_product 95 WHERE 96 name LIKE '%$pro_name%' 97 AND 98 attribute LIKE '%$pro_attribute%' 99 AND 100 type LIKE '%$pro_type%' 101 AND 102 number LIKE '%$pro_number%'"; 103$stmt=$dbh->prepare($sql); 104$stmt->execute(); 105 106$dbh=null; 107 108/* $check_db=$stmt->fetch(PDO::FETCH_ASSOC); 109if(empty($check_db)){ 110 print'検索したカードが存在しません。<br />'; 111 echo '<a href="' . $_SERVER['HTTP_REFERER'] . '">戻る</a>'; //戻るボタンの実装記事 https://blanche-toile.com/web/history-back 112 exit(); 113} */ 114 115/* print '<form method="post" action="pro_search_branch.php">'; *///追加、修正の機能のために新しく追加したコード(pro_search_branch)はまだ作ってない。 116while(true) 117{ 118 $rec=$stmt->fetch(PDO::FETCH_ASSOC); 119 if($rec==false) 120 { 121 break; 122 } 123 print '<input type="radio" name="procode" value="'.$rec['code']. '">'; 124 print $rec['name'].' 属性:'; 125 print $rec['attribute'].' 種族'; 126 print $rec['type'].' 枚数:'; 127 print $rec['number'].'枚'; 128 print '<br />'; 129 130 } 131 132} 133catch(PDOException $e) 134{ 135 echo "失敗:" . $e->getMessage() . "\n"; 136 exit(); 137} 138 139?> 140 141</body> 142</html>

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

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

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

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

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

guest

回答2

0

ベストアンサー

ご質問に従って、私も付け焼き刃で勉強しました。すると、「わかっているようでわからない、PHPのFETCHを解説!」 の記事のようにfetchしたデータを配列で返してきます。
試しに、

php

1print_r($stmt->fetch(PDO::FETCH_ASSOC))

で結果をダンプしてみてください。
空ではないでしょう。
この振る舞いを受け止めて例外処理を組み込みましょう。

投稿2021/05/01 22:45

seastar3

総合スコア2285

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

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

0

count(*)で取得した値が0かどうかで判定してはどうでしょうか。
なお、1件だけでのデータでもfetch()してから変数に取り出す必要がありますので、注意しましょう。

投稿2021/05/01 11:39

seastar3

総合スコア2285

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

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

asianLad

2021/05/01 14:38

ご回答ありがとうございます。もしよろしければ何故、私のコードではうまく動かないのかご説明いただけないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問