PHP 5、MySQL 4.0.14という組み合わせで、検索システムに挑戦中です。
入門書から動作まで確認できましたが、検索フォームにいくつかの
チェックボックスを追加したいです。
例えば、好きな果物を任意に選択させ、チェックされた果物をOR条件で、
さらに他の検索条件(住所等)とAND条件で結びたいです。
ここで、(1)HTML側と、(2)<?php ~~?>内に、
具体的にどのように記述したらよいものでしょうか。
例示はしてませんが好きな果物(3つのチェックボックスグループ)だけでなく、
好きな動物(6つの 〃 )や、好きな飲み物(2つの 〃 )など、様々な
チェックボックスを検索条件として絞り込めるようにしたいです。
---検索フォーム--
<FORM method="POST" action="list.php">
住所<input type="text" name="address"> を含む
好きな果物
<INPUT TYPE="CHECKBOX" NAME="kudamono">りんご
<INPUT TYPE="CHECKBOX" NAME="kudamono">みかん
<INPUT TYPE="CHECKBOX" NAME="kudamono">なし
<input type="submit" name="exec" value="検索">
</FORM>
---検索結果PHP--
require_once("dbini.php");
$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$selectdb = mysql_select_db($DBNAME, $con);
$sql = "select * from t_mydata
where (address like '%$address%')
$sql .= " order by address";
$rst = mysql_query($sql, $con);
$body .= "<table>";
for ($recnum = 0; $recnum < $recmax; $recnum++) {
$body .= "<tr>";
$body .= "<td>" . $col["ADDRESS"] . "</td>";
$body .= "<td>" . $col["KUDAMONO"] . "</td>";
$body .= "</tr>";
}
$body .= "</table>";
# だいぶ省略してます。
No.2ベストアンサー
- 回答日時:
>同じようなチェックボックス形の検索条件を他にいくつか用意したいため、
>先頭行のSQL文はをご例示いたWHEREでなくANDに書き換えたのですが、
>この場合ひとつもチェックされていない場合にエラーになってしまいます。
checkboxならば
if(is_array($_POST['kudamono'])) {
print"チェックされてます";
}
とすればよいみたいですね。
たびたびありがとうございました!
おかげさまで、完璧に要望を実現できました。
実はチェックボックスグループが10個くらいある
検索フォームなので
汎用性の高いものをご提示いただけた
おかげで、必要な部分がすぐにできあがりました。
本当に感謝にたえません。ありがとうございました。
No.1
- 回答日時:
例えば
<INPUT TYPE="CHECKBOX" NAME="a">りんご
<INPUT TYPE="CHECKBOX" NAME="b">みかん
<INPUT TYPE="CHECKBOX" NAME="c">なし
として、
$sql = "select * from t_mydata";
$sql .= " where (";
$i=0; # 「or」 をつけるフラグ
if($_POST['a']) {
if ($i) {
$sql .= " or ";
}
$sql .= "果物 = 'りんご';
$i++;
}
if($_POST['b']) {
if ($i) {
$sql .= " or ";
}
$sql .= "果物 = 'みかん';
$i++;
}
if($_POST['c']) {
if ($i) {
$sql .= " or ";
}
$sql .= "果物 = 'なし';
$i++;
}
$sql .=")";
というような感じでやればいいかと思います。
<INPUT TYPE="CHECKBOX" NAME="kudamono[]" value="りんご">りんご
<INPUT TYPE="CHECKBOX" NAME="kudamono[]" value="みかん">みかん
<INPUT TYPE="CHECKBOX" NAME="kudamono[]" value="なし">なし
としておけば
foreach($_POST['kudamono'] as $fr) {
if ($i) {
$sql .= " or ";
}
$sql .= "果物 = '$fr';
$i++;
}
と省略できたりします。
条件が増えた場合はおんなじような感じで条件式を増やしてやればいいです。
この回答への補足
ご教示ありがとうございました!
早速ためさせていただきましたが、すばらしいです。
条件が増えても対応できる省略形(配列というんですよね?)を使わせていただきました。
<INPUT TYPE="CHECKBOX" NAME="kudamono[]" value="りんご">りんご
<INPUT TYPE="CHECKBOX" NAME="kudamono[]" value="みかん">みかん
<INPUT TYPE="CHECKBOX" NAME="kudamono[]" value="なし">なし
$sql .= " and (";
$i=0; # 「or」 をつけるフラグ
foreach($_POST['kudamono'] as $fr) {
if ($i) {
$sql .= " or ";
}
$sql .= "果物 = '$fr'";
$i++;
}
$sql .=")";
完成形が以上の通りになりましたが、ひとつだけ追加質問よろしいでしょうか。
同じようなチェックボックス形の検索条件を他にいくつか用意したいため、
先頭行のSQL文はをご例示いたWHEREでなくANDに書き換えたのですが、
この場合ひとつもチェックされていない場合にエラーになってしまいます。
「AND()」というSQL文が生成されてしまうためです。
テキストボックスなら、次のように文字が入っている場合のみ検索対象にする、
みたいにできようですが、今回のチェックボックスの場合はどのようにかきかえたら
よろしいでしょうか。
if (strlen($hoge) > 0) {書き出したいSQL文}
どうぞ、よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
Q&Aサイトを作成していてURLの...
-
ResultSetインターフェイスでの...
-
PHP初心者です。syntax error, ...
-
Pro*Cの構文エラー
-
VB.NET エラーになる箇...
-
データベースに存在するデータ...
-
like検索の複数キーワードで、...
-
phpでforeach ($stmt as $row)...
-
<VB.NET>INSERT文でDBにデータ...
-
PDOを使って複数キーワード検索...
-
MySQLでデータベースにデータin...
-
実行時エラー3131 FROM 句の構...
-
VBAをつかってクエリの情報を抽...
-
テーブルに入っているデータと...
-
PHPで[]の使い方について
-
エクセルVBAについて
-
VBA処理追加 こちらでご教示頂...
-
phpのPEARのMDB2を使って出たエ...
-
python pandas 行ごとに列名(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
Q&Aサイトを作成していてURLの...
-
<VB.NET>INSERT文でDBにデータ...
-
insert1つの処理でもトランザ...
-
Pro*Cの構文エラー
-
ResultSetインターフェイスでの...
-
データベースに存在するデータ...
-
PHP&MySQLでの文字列+数列の一...
-
VBA ACCESS SQL...
-
phpで複数の検索語を検索対象に...
-
MySQLのINSERT時にたまに重複に...
-
PHP+PDO+MYSQL で実行されたSQ...
-
C# で発生したException.Messag...
-
like検索の複数キーワードで、...
-
INSERT,DELETEを同時に
-
PHPのUndefined index や varia...
-
VB.NET エラーになる箇...
-
php postgres Insert と updat...
-
配列をループさせてUPDATE
-
C#でDBの特定列をUpdate
おすすめ情報