やりたいこと
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>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。