![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_07.png?e8efa67)
現在検索画面の作成をしているのですが、分からないことがありましたので
質問をさせて頂きました。
検索画面ですが、簡単な2ページ構成になっております。(kensaku.phpとresult.php)
仕様としてはkensaku.phpにチェックボックス(複数選択可)と
フリーワードがあり、一つの検索ボタンで検索し結果をresult.phpに表示させようと思っております。データベースはMYSQLです。
検索ボタンが一つしかないため、もしチェックボックスが選択されず、フリーワードだけ入力されたのであれば、それだけで検索。その逆のもし
チェックボックスだけ選択されたのであればそれだけで検索。
また両方入力されたのであれば、両方のデータを検索できるように
したいと思っております。
フリーワード検索までは出来るようになったのですが、
チェックボックス検索(両方検索・片方のみ検索)などが
どうしても出来ません。
どなたかご存知の方ご教授して頂けないでしょうか。
宜しくお願い致します。
こちらがコードになります。
1,kensaku.php
<form action="result.php" method="POST" >
<table class="font12" cellpadding="5" cellspacing="10" width="430" align="center">
<tr>
<td>
<span class="checkbox"><input type="checkbox" name="sejyutu[]" value="1" />aaa</span>
<span class="checkbox"><input type="checkbox" name="sejyutu[]" value="2" />bbb</span>
<span class="checkbox"><input type="checkbox" name="sejyutu[]" value="3" />ccc</span><br />
</td>
</tr>
<tr>
<td><input type="text" name="sejyutu_else" value="フリーワード検索" size="30" /></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="検索する" /></td>
2, result.php
<?php
$sejyutu = $_POST["sejyutu"];
$sejyutu_else = $_POST["sejyutu_else"];
if($sejyutu and sejyutu_else<>''){
//DB接続・選択
if (!$int_connect = @mysql_connect('localhost','aaa','aaaa')) {
die("can't connect mysql server.");
}
//データベースに接続
if (!@mysql_select_db("database", $int_connect)) {
die("can't use selected database.");
}
$sql = "select * from table where sejyutu_else like'%$sejyutu_else%'";
$result=mysql_query($sql,$int_connect);
$rows=mysql_num_rows($result);
?>
<table width="430" cellpadding="5" cellspacing="0" class="font12">
<?php
while($row = mysql_fetch_array($result)){
?>
<tr>
<td colspan="2"><p class="salon_name"><?php echo $row["name"]; ?></p></td>
</tr>
<tr>
<td valign="top"><p class="salon_item">最寄り駅:</p></td>
<td class="salon_detail"><?php echo $row["station"]; ?></td>
</tr>
<tr>
<td valign="top"><p class="salon_item">住所:</p></td>
<td class="salon_detail"><?php echo $row["address"]; ?></td>
</tr>
<tr>
<td valign="top"><p class="salon_item">施術名</p></td>
<td class="salon_detail"><?php echo $row["sejyutu"];?></td>
</tr>
<?php
}
}
?>
</table>
</body>
</html>
No.1ベストアンサー
- 回答日時:
たとえばこんな感じ
<?php
//$sejyutu = $_POST["sejyutu"];
//$sejyutu_else = $_POST["sejyutu_else"];
$sejyutu = Array("aaa","bbb","ccc");
$sejyutu_else = "hoge";
$whereStr="";
if(is_array($sejyutu)){
$str="";
foreach($sejyutu as $val){
$str.=($str==""?"":" OR ")."`sejyutu`='{$val}'";
}
$whereStr.=" AND({$str})";
}
if($sejyutu_else!=''){
$whereStr.=<<<eof
AND `sejyutu_else` LIKE '%{$sejyutu_else}%'
eof;
}
if($whereStr=="") $whereStr="AND 0";
$sql =<<<eof
SELECT *
FROM `table`
WHERE 1
{$whereStr}
eof;
print $sql;
?>
検索条件が複数あるときは常にANDでつないでいけば混乱がすくなくてすみます。
インジェクション対策は別途実装ください。
この回答への補足
さっそくのご回答ありがとうございます!
コードを拝見させて頂きました。ANDでつなげていくということは大変勉強になりました。ただまだ私PHPと申しますかプログラム自体初心者のため
コードを全て理解するのが難しく、時間をかけないとだめそうです。。
ただあまり時間がなく、、
今の書いていたのがあるのですが あまりうまく動きません。
仕様がめちゃくちゃになっております。、
もしなにかご指摘など頂けるようでしたらお伺い出来ませんでしょうか?
申し訳ございません。
<?php
if (!$int_connect = @mysql_connect('localhost','aaa','aaa')) {
die("can't connect mysql server.");
}
//データベースに接続
if (!@mysql_select_db("database", $int_connect)) {
die("can't use selected database.");
}
if(!isset($_POST['sejyutu'])and isset($_POST['sejyutu_else'])){
$sql = "select * from table where sejyutu_else like '%$sejyutu_else%'";
} else if(isset($_POST['sejyutu'])and !isset($_POST['sejyutu_else'])){
foreach($_POST['sejyutu'] as $value){
$sql = "select * from table where sejyutu like '%$value%'";
}
}else if(isset($_POST['sejyutu'])and isset($_POST['sejyutu_else'])){
$sql = "select * from table where sejyutu and sejyutu_else like '%$value%', '%$sejyutu_else%'";
}else{
echo "検索キーワードを入力して下さい。";
}
$result=mysql_query($sql,$int_connect);
$rows=mysql_num_rows($result);
?>
<table width="430" cellpadding="5" cellspacing="0" class="font12">
<?php
while($row = mysql_fetch_array($result)){
?>
<tr>
<td colspan="2"><p class="salon_name"><?php echo mb_convert_encoding(trim($row["name"]),"sjis","euc-jp") ?></p></td>
</tr>
<tr>
<td valign="top"><p class="salon_item">最寄り駅:</p></td>
<td class="salon_detail"><?php echo mb_convert_encoding(trim($row["station"]),"sjis","euc-jp") ?></td>
</tr>
<tr>
<td valign="top"><p class="salon_item">住所:</p></td>
<td class="salon_detail"><?php echo mb_convert_encoding(trim($row["address"]),"sjis","euc-jp") ?></td>
</tr>
<tr>
<td valign="top"><p class="salon_item">施術名</p></td>
<td class="salon_detail"><?php echo mb_convert_encoding(trim($row["sejyutu"]),"sjis","euc-jp") ?></td>
</tr>
<?php
}
?>
</table>
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データ送信をボタンを押さずに...
-
チェックボックス + フリーワー...
-
PHP table内、<a href使って su...
-
onedrive にexcelファイルをア...
-
別ファイルの変数を呼び出した...
-
PHPの設定で、 エラーが発生し...
-
【PHP】declare命令で”Fatal er...
-
.phpと.incファイルの違いはな...
-
CFileDialogの最初のディレクト...
-
bindValueエラー
-
「@$変数」の「@の意味は?」
-
apache・phpが起動しない・・・
-
フォントの色を変えるには?
-
バッチを用いたフォルダの自動移動
-
MySQLのdatetime型の月日0を削...
-
<A href ~ と一緒に値を渡すには
-
makefile でファイルをコピーす...
-
FTPコマンドでディレクトリごと...
-
TSVファイルをCSV形式に変換したい
-
FTPClientで転送結果(OKかFAIL)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
form actionで二つ送信先を指定...
-
データ送信をボタンを押さずに...
-
PHPでε(イプシロン)のような...
-
FORMで送信ボタンと戻るボタン...
-
inputタグでphpを呼び出す際、...
-
別のファイルへ値を受け渡す方法
-
テキストボックスにデータベー...
-
ボタンのクリック数を合計保存...
-
リクエストメソッド
-
PHPとCSVで簡易データベースな...
-
Auth認証エラー
-
【PHP】ページを更新すると勝手...
-
ワンクリックしかできないクリ...
-
PEARでのAuth認証について
-
multipart/form-dataを使ったデ...
-
戻れないです
-
PEAR Image_QRCodeのエラー
-
header(Location: next.php) だ...
-
受け取ったパラメータを次のphp...
-
【初歩】ログアウトを【2回押さ...
おすすめ情報