アプリ版:「スタンプのみでお礼する」機能のリリースについて

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>";

# だいぶ省略してます。

A 回答 (2件)

>同じようなチェックボックス形の検索条件を他にいくつか用意したいため、


>先頭行のSQL文はをご例示いたWHEREでなくANDに書き換えたのですが、
>この場合ひとつもチェックされていない場合にエラーになってしまいます。


checkboxならば

if(is_array($_POST['kudamono'])) {
print"チェックされてます";
}

とすればよいみたいですね。
    • good
    • 0
この回答へのお礼

たびたびありがとうございました!

おかげさまで、完璧に要望を実現できました。
実はチェックボックスグループが10個くらいある
検索フォームなので
汎用性の高いものをご提示いただけた
おかげで、必要な部分がすぐにできあがりました。

本当に感謝にたえません。ありがとうございました。

お礼日時:2005/07/12 12:17

例えば


<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文}

どうぞ、よろしくお願い致します。

補足日時:2005/07/12 10:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!