前提・実現したいこと
複数指定して検索できる機能を作りたい
if文でemptyで空文字の箇所を調べてsqlを書いていくしかないのでしょうか?
6つ判定しようとif文を書くと6の階乗個(約750個)のif文を書かなければいけない。
(下記のスクリーンショット参考)
発生している問題・エラーメッセージ
if文以外で対処できないか?
該当のソースコード
php
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<html> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5<title>PHP課題</title> 6</head> 7<body> 8<?php 9try 10{ 11 $dsn = 'mysql:dbname=personal;host=localhost'; 12 $user = 'root'; 13 $password = ''; 14 $dbh = new PDO($dsn,$user,$password); 15 $dbh->query('SET NAMES utf8'); 16 17 $Flag = TRUE; 18 19 $gender=$_POST['gender']; 20 $blood=$_POST['bloodtype']; 21 $kenmei=$_POST['kenmei']; 22 $fromold=$_POST['fromold']; 23 $old=$_POST['old']; 24 $carrier=$_POST['carrier']; 25 $fromcurry=$_POST['fromcurry']; 26 $curry=$_POST['curry']; 27 28 $gender=htmlspecialchars($gender); 29 $blood=htmlspecialchars($blood); 30 $kenmei=htmlspecialchars($kenmei); 31 $fromold=htmlspecialchars($fromold); 32 $old=htmlspecialchars($old); 33 $carrier=htmlspecialchars($carrier); 34 $fromcurry=htmlspecialchars($fromcurry); 35 $curry=htmlspecialchars($curry); 36 37 if(empty($gender)&&empty($blood)&&empty($kenmei)&&(empty($fromold)||empty($old))&&empty($carrier)&&(empty($fromcurry)||empty($curry))) 38 { 39 print '入力されていません'; 40 $Flag=FALSE; 41 } 42 else if(!empty($gender)) 43 { 44 $sql = 'SELECT info.name, info.furigana, info.address, info.gender, 45 info.old, info.birthday, info.marriage, info.bloodtype, 46 kenmei.name AS kenmei, info.phone, info.carrier, info.curry 47 FROM info 48 INNER JOIN kenmei ON info.code = kenmei.id 49 WHERE info.gender = "'.$gender.'"'; 50 //'SELECT * FROM info WHERE name = "'.$namae.'"'; 51 } 52 else if(!empty($blood)) 53 { 54 $sql = 'SELECT info.name, info.furigana, info.address, info.gender, 55 info.old, info.birthday, info.marriage, info.bloodtype, 56 kenmei.name AS kenmei, info.phone, info.carrier, info.curry 57 FROM info 58 INNER JOIN kenmei ON info.code = kenmei.id 59 WHERE info.bloodtype = "'.$blood.'"'; 60 } 61 else if(!empty($kenmei)) 62 { 63 $sql = 'SELECT info.name, info.furigana, info.address, info.gender, 64 info.old, info.birthday, info.marriage, info.bloodtype, 65 kenmei.name AS kenmei, info.phone, info.carrier, info.curry 66 FROM info 67 INNER JOIN kenmei ON info.code = kenmei.id 68 WHERE code = "'.$kenmei.'"'; 69 //$sql = 'SELECT * FROM info WHERE code = "'.$kenmei.'"'; 70 } 71 else if(!empty($fromold)&&!empty($old)) 72 { 73 $sql = 'SELECT info.name, info.furigana, info.address, info.gender, 74 info.old, info.birthday, info.marriage, info.bloodtype, 75 kenmei.name AS kenmei, info.phone, info.carrier, info.curry 76 FROM info 77 INNER JOIN kenmei ON info.code = kenmei.id 78 WHERE info.old BETWEEN "'.$fromold.'"AND"'.$old.'"'; 79 } 80 else if(!empty($carrier)) 81 { 82 $sql = 'SELECT info.name, info.furigana, info.address, info.gender, 83 info.old, info.birthday, info.marriage, info.bloodtype, 84 kenmei.name AS kenmei, info.phone, info.carrier, info.curry 85 FROM info 86 INNER JOIN kenmei ON info.code = kenmei.id 87 WHERE info.carrier = "'.$carrier.'"'; 88 } 89 else if(!empty($fromcurry)&&!empty($curry)) 90 { 91 $sql = 'SELECT info.name, info.furigana, info.address, info.gender, 92 info.old, info.birthday, info.marriage, info.bloodtype, 93 kenmei.name AS kenmei, info.phone, info.carrier, info.curry 94 FROM info 95 INNER JOIN kenmei ON info.code = kenmei.id 96 WHERE info.curry = "'.$fromcurry.'・'.$curry.'"'; 97 } 98 99 //if(!empty($sql)) 100 if($Flag) 101 { 102 $stmt = $dbh->prepare($sql); 103 $stmt->execute(); 104 105 $a = 0; 106 107 while(1) 108 { 109 $rec = $stmt->fetch(PDO::FETCH_ASSOC); 110 if($rec==false&&$a==0) 111 { 112 print '検索結果がありません'; 113 break; 114 } 115 else if($rec==false&&$a==1) 116 { 117 break; 118 } 119 $a = 1; 120 print '<table border="1" cellspacing="0" cellpadding="5">'; 121 print '<tr>'; 122 print '<th>名前</th>'; 123 print '<th>ふりがな</th>'; 124 print '<th>メールアドレス</th>'; 125 print '<th>性別</th>'; 126 print '<th>年齢</th>'; 127 print '<th>誕生日</th>'; 128 print '<th>結婚</th>'; 129 print '<th>血液型</th>'; 130 print '<th>都道府県</th>'; 131 print '<th>電話番号</th>'; 132 print '<th>キャリア</th>'; 133 print '<th>カレーの食べ方</th>'; 134 135 print '</tr>'; 136 print '<tr>'; 137 print '<td>'.$rec['name'].'</td>'; 138 print '<td>'.$rec['furigana'].'</td>'; 139 print '<td>'.$rec['address'].'</td>'; 140 print '<td>'.$rec['gender'].'</td>'; 141 print '<td>'.$rec['old'].'</td>'; 142 print '<td>'.$rec['birthday'].'</td>'; 143 print '<td>'.$rec['marriage'].'</td>'; 144 print '<td>'.$rec['bloodtype'].'</td>'; 145 print '<td>'.$rec['kenmei'].'</td>'; 146 print '<td>'.$rec['phone'].'</td>'; 147 print '<td>'.$rec['carrier'].'</td>'; 148 print '<td>'.$rec['curry'].'</td>'; 149 print '</tr>'; 150 print '</table>'; 151 } 152 153 $dbh = null; 154} 155} 156catch(Exception $e) 157{ 158 print $e; 159} 160 print '</br>'; 161 print'<input type="button" onclick="history.back()" value="戻る">'; 162 163?> 164 165</body> 166</html>
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
回答4件
あなたの回答
tips
プレビュー