
こんばんは。お世話になっております。
PHPにてDB(MySQL)に登録されたデータをチェックボックスのみで検索するスクリプトを組んでおりますが、チェックボックスの数が多数あり、混乱してしまい、お力をお借りしたく投函させて頂きました。
上手く説明できるかどうか判りませんが…
まず検索項目として、(複数チェック可)
カテゴリ: □ドリンク □グルメ □ケーキ
年齢: □20代 □30代
以上のようなフォームを用意しており、各チェックボックスのnameはDBのフィールドを同じ名前。valueは実際に登録されている数値を記述しています。
そこで、上記チェックボックスにいくつかのチェックを入れ、検索すると、それに該当するものだけを検索結果として一覧表示させたいのですが、現在、全ての項目に当てはまるものと一緒に、1つでも含んだデータまでもが表示されてしまいます。
お忙しい中恐縮ですが、お知恵を頂戴出来ればと考えております。
宜しくお願い致します。
//POSTで受け取ったデータを配列にし、
foreach($arr as $category){
$wherearr1[] = " ( category = '$category' )" }
foreach($arr as $category){
$wherearr2[] = " ( age = '$age' )" }
$wherestr1 = implode(" OR ",$wherearr1);
$wherestr2 = implode(" OR ",$wherearr2);
$sql = "select * from member where $wherestr AND $wherestr1 order by date desc";
$result = mysql_query($sql);
No.5ベストアンサー
- 回答日時:
どっちもチェックされていることが前提で。
<form>
<b>カテゴリ</b><br>
<input type="checkbox" name="cate[]" value="1">ドリンク<br>
<input type="checkbox" name="cate[]" value="2">グルメ<br>
<input type="checkbox" name="cate[]" value="3">ケーキ<br>
<br>
<b>年齢</b><br>
<input type="checkbox" name="age[]" value="10">10代<br>
<input type="checkbox" name="age[]" value="20">20代<br>
<br>
<input type="submit">
<input type="hidden" name="aaa" value="aaa">
</form>
<?PHP
$arr1 = array();
foreach($_GET['cate'] as $cate){
$arr1[] = " category = '$cate' ";
}
$arr2 = array();
foreach($_GET['age'] as $age){
$arr2[] = " age = '$age' ";
}
$a = implode(" OR ",$arr1);
$b = implode(" OR ",$arr2);
$sql = "select * from member where ($a) AND ($b) order by date desc";
print $sql;
?>
修正してみて思ったのですが、二つとも「$arr as $category」だったり、
使用された形跡がない変数「 $wherestr 」が使われていたりします。
あとは、
$a = implode(",",$_GET['cate']);
として、 category in ($a) とかやってみたりしてもいいでしょう。
<?PHP
$a = implode(",",$_GET['cate']);
$b = implode(",",$_GET['age']);
$sql = "select * from member where category in ($a) AND age in ($b) order by date desc";
print $sql;
?>
moon_nightさま
こんばんは。まずはじめにご報告ですが、期待通りの結果を得る事が出来ました!有難う御座います。
ご丁寧にコードまで記載していただき、且つ他のサンプルコードまで記載していただき、とても参考になりました!有難う御座います。
言葉足らずでは御座いますが、「ありがとう」と、お礼の言葉を言うだけしかなく誠に心苦しいところではありますが、無事期待通りの結果を得る事が出来ました。有難う御座いました。
No.4
- 回答日時:
・データは、category(カテゴリ) と age(年齢)のデータを一つずつ持っている。
・チェック項目があり、チェックされた項目を表示させたい
まず検索項目として、(複数チェック可)
カテゴリ: □ドリンク □グルメ □ケーキ
年齢: □20代 □30代
とすると、例えばドリンクとグルメと20代と30代にチェックを入れているとカテゴリのドリンクとグルメの両方とも該当するデータはない(データにはカテゴリが一つしか登録されていないため)ので表示されません。
この場合、ドリンク+20代、ドリンク+30代、グルメ+20代、グルメ+30代のデータが出てくればいいということでしょうか?
いまいち仕様がはっきりしないので、補足をお願いします。
moon_nightさま
php504さま同様、早速のお返事に感謝いたします。
>両方とも該当するデータはない(データにはカテゴリが一つしか登録されていないため)ので表示されません。
なるほど・・・改めて考えさせられました。
>この場合、ドリンク+20代、ドリンク+30代、グルメ+20代、グルメ+30代のデータが出てくればいいということでしょうか?
はい!その通りです!説明が下手で申し訳ありません!
この場合、コードそのものが違ったものになるのでしょうか?
下のphp504様のヒントを基に・・とも考えておりますが、正直、(実際は4つの項目。50を数えるチェックボックス)迷路にはまった感があり、引き続きご指導頂けたら幸いです。
宜しくお願い致します。
No.3
- 回答日時:
うーん、だめでしたか
括弧でくくるのは
a OR b OR c AND d OR e OR f
と
(a OR b OR c) AND (d OR e OR f)
の違いです。
前者はa, b, e, fの場合は単独で引っかかります(a OR b OR (c AND d) OR e OR f と解釈されます)。
php504さま
早速のお返事有難う御座います!
なるほど、配列としての変数にもデータが複数あるとし、カッコで括るのですね。
知識が乏しく、変数が一つだけだったのでカッコで括る意味が判りませんでした。これらを踏まえて考えて見ます。有難う御座いました。
No.2
- 回答日時:
チェックしたもの全てが当てはまると言う意味でしょうか?
その場合でしたら、
$wherestr1 = implode(" OR ",$wherearr1);
$wherestr2 = implode(" OR ",$wherearr2);
を OR ではなく、 AND でやればいいと思います。
moon_nightさま
お世話になっております。
只今、ORと変更してみましたが、期待する結果は返ってきませんでした。
上手く説明できないのですが、DBに登録してあるデータは、「ドリンクと20代」と登録してあるのもあれば、「ドリンクと30代」、「ワインと20代」と、1つのカテゴリに対し1つだけ登録されており、フォームにてチェックを付けて検索した際、項目に該当するテーブルだけを検索結果として表示させたいと考えています。
ちなみに、現在のコードは、投函時に記載したコードの上に、
if(isset($_POST["category"]) AND isset($_POST["age"])){
$category=implode(' ',$_POST["category"]);
$age=implode(' ',$_POST["age"]);
$category = addslashes($category);
$category = mb_convert_encoding($category, 'EUC-JP', 'auto');
$category = mb_ereg_replace(" ", " ", $category);
$arr = explode(" ",$category);
$age = addslashes($age);
$age = mb_convert_encoding($age, 'EUC-JP', 'auto');
$age = mb_ereg_replace(" ", " ", $age);
$arr4 = explode(" ",$age);
このようなコードを設置しております。
何処がどう可笑しいのか、ご指摘頂けたら幸いです。
お忙しい中恐縮ですが、宜しくお願い致します。
No.1
- 回答日時:
ぱっと見た感じでは( )でくくったらどうかなと思いました
$sql = "select * from member where ($wherestr) AND ($wherestr1) order by date desc";
php504さま
お世話になっております。
只今、()で括ってみたところ、検索結果はチェックした項目に引っかかりませんでした。
それと、お恥ずかしい質問とは思いますが、この()で括る事によりどんな結果が返ってくるのですか?今後のためにとお伺いしたくて・・。
グーグルなどで検索してみましたが、キーワードが悪いのか、欲しい上を見つけることが出来ませんでした。お忙しい中恐縮ですが、お時間のあるときにでもお返事いただけたら幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- Visual Basic(VBA) 指定の条件に応じたセルの場所に〇印(図形)を描く 2 2022/11/08 15:26
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- au(KDDI) Android Gmail で検索して消す方法 1 2022/11/10 16:10
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HTMLで前の画面に戻る時、入力...
-
フォームボタンを押すたびに数...
-
フォームへの前回入力値をクリ...
-
phpでチェックボックスでの値の...
-
アップロードの際にファイルパス
-
POSTデータのNAME属性をVALUEに...
-
PHPで、ボタンを押すと同じペー...
-
【PHPチェック】ラジオボタンが...
-
PHPでクリックするたびに変数を...
-
phpのswitch文
-
リストボックス 複数選択のデ...
-
ラジオボタンをsessionで使いたい
-
チェックボックスのGETでの受け...
-
チェックボックスの値のチェック
-
PHPで画像の渡しが上手く行きま...
-
チェックボックスの値に応じてP...
-
検索時の選択内容を保持する方法
-
チェックボックスで選択したも...
-
HTMLのリンクをクリックするこ...
-
php mysql でチェックボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HTMLで前の画面に戻る時、入力...
-
検索時の選択内容を保持する方法
-
<input type="hidden" >で配列...
-
フォームへの前回入力値をクリ...
-
PHP ボタンが押されたら処理を...
-
DBの値をチェックボックスに反...
-
パラメーターを隠す
-
【PHPチェック】ラジオボタンが...
-
PHPで画像の渡しが上手く行きま...
-
テキストボックスに初期値を入れる
-
ラジオボタンをsessionで使いたい
-
ラジオボタンを押すと、表示が...
-
入力フォーム→確認画面→送信画...
-
PHPの関数実行
-
PHPで、ボタンを押すと同じペー...
-
画面が更新されてもチェックボ...
-
HTMLフォームで複数選択のチェ...
-
<input type='checkbox'>要素で...
-
同じページでフォームデータを...
-
$_SESSIONについて教えて下さい。
おすすめ情報