お世話になります。
PHPにてDB(MySQL)に登録されたデータをチェックボックスで検索するスクリプトを組んでおります。
検索項目として(複数チェック可)
住所: □東京都 □神奈川県 □埼玉県
性別: □男 □女
とあります。
例えば東京都、神奈川県、男にチェックを入れた場合、
東京都+男、神奈川県+男のデータを取り出したいのですが、二つチェックを入れた場合、データが見つからないとなってしまします。
同じような質問は全て目を通して試してみたのですが、なかなかうまくいかない為、お力をかしていただければと思います。
スクリプトは以下となっております。
-------------------------------------------------------------
input.php
<html>
<head>
<title>PHP SEARCH</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form action="search.php" method="POST" >
<form>
<b>住所</b><br>
<input type="checkbox" name="pref[]" value="東京都">東京都<br>
<input type="checkbox" name="pref[]" value="神奈川県">神奈川県<br>
<input type="checkbox" name="pref[]" value="埼玉県">埼玉県<br>
<b>性別</b><br>
<input type="checkbox" name="sex[]" value="男">男<br>
<input type="checkbox" name="sex[]" value="女">女<br>
<br>
<input type="submit" value="検索開始">
</form>
</body>
</html>
-------------------------------------------------------
search.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>サーチ</title>
</head>
<body>
<?php
$pear_path = 'c:/xampp/php/PEAR';
set_include_path(get_include_path() . PATH_SEPARATOR . $pear_path);
require_once('MDB2.php');
// DSNの設定
$dsn = array(
'phptype' => 'mysql',
'username' => 'root',
'password' => '',
'hostspec' => 'localhost',
'database' => 'test01',
);
// オプションの設定
$options = array(
'portability' => MDB2_PORTABILITY_ALL,
);
// 接続
$mdb2 =& MDB2::connect($dsn, $options);
if (PEAR::isError($mdb2)) {
exit('データベースへの接続に失敗しました');
}
// 初期化
$sql = 'set names utf8';
$res =& $mdb2->query($sql);
$mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);
// 都道府県
if(isset($_POST['pref'])){
$a = implode(' OR ',$_POST['pref']);
}
// 性別
if(isset($_POST['sex'])){
$b = implode(' OR ',$_POST['sex']);
}
// 検索
$sql = "select * from sample where pref in ('$a') AND sex in ('$b')";
$result = $mdb2->query($sql);
if (PEAR::isError(result)) {
exit('接続に失敗しました');
}
$num_rows = $result->numRows();
if($num_rows == 0){
exit('検索結果はありませんでした');
}else{
print $result->numRows()."件のデータがあります";
}
print("<table border=\"1\">\n");
print("<tr>");
print("<th>id</th><th>性別</th><th>都道府県</th>");
print("</tr>");
while($row = $result->fetchRow()){
print("<tr>\n");
print("<td>" . $row['id'] . "</td>");
print("<td>" . $row['pref']. "</td>");
print("<td>" . $row['sex']. "</td>");
print("</tr>\n");
}
// 接続を切る
$mdb2->disconnect();
?>
</body>
</html>
何卒よろしくお願い致します。
No.4ベストアンサー
- 回答日時:
No3です。
済みません、なんか、凄い勘違いしてました。implode をexplodと思いこんでいた。問題は、個々の比較用文字列をクォートで括ってないとか、SQL injection 対策されてない事ですね。
また、送信データがあるならSQLを発行、送信データがないならSQLを発行しないという切り分けも必要ですね。
if( isset($_POST['pref'] and is_array($_POST['pref']) and isset($_POST['sex']) and is_array($_POST['sex']) ){
$a = '`pref` in ("' .implode('","' , array_map('mysql_real_escape_string', $_POST['pref']) ). '")';
$b = '`sex` in ("' .implode('","' , array_map('mysql_real_escape_string', $_POST['sex']) ). '")';
$sql = "select 中略 where $a and $b";
// $sql 発行
}else{
// errorメッセージ
}
この回答への補足
implode("','",$_POST['pref']);
と設定することで解決しました!!
わざわざありがとうございました!
ありがとうございます。
>個々の比較用文字列をクォートで括ってないとか、SQL injection 対策されてない
まだまだ必要なことが沢山あるみたいですね…
記述していただきましたように書き直してみたところ
Parse error: syntax error, unexpected T_LOGICAL_AND, expecting ',' or ')'
と出てしまいました…
どこがいけないのかさっぱりです。
引き続きよろしくお願いします。
No.3
- 回答日時:
<input type="checkbox" name="pref[]"
このようにname属性に[]付きで入れた場合、$_POST['pref'] は配列になります。
var_dump($_POST) でどんなデータが渡されてるのか確認されることをお薦めします。
http://jp.php.net/manual/ja/faq.html.php#faq.htm …
参考URL:http://jp.php.net/manual/ja/faq.html.php#faq.htm …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
チェックボックスによる検索
PHP
-
チェックボックスによる検索(複数チェックの場合)
PHP
-
【初歩】ラジオボタンをつかったPHPフォームから値のMySQLへの格納と取り出し
MySQL
-
-
4
複数条件での検索について教えてください
PHP
-
5
チェックボックスを用い、MySQLからデータを取得
PHP
-
6
検索時の選択内容を保持する方法
PHP
-
7
PHPで絞り込み検索結果の件数を表示する
PHP
-
8
dbに登録したデータをphpのプルダウンに表したい
PHP
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPで画像の渡しが上手く行きま...
-
HTMLで前の画面に戻る時、入力...
-
phpでチェックボックスでの値の...
-
テキストボックスに初期値を入れる
-
phpでの複数選択チェックボック...
-
PHPの初心者です。現在チェック...
-
<input type="hidden" >で配列...
-
複数行のデータ一括更新に関して
-
PHP ボタンが押されたら処理を...
-
チェックボックスのvalueを連結...
-
入力フォーム→確認画面→送信画...
-
【PHPチェック】ラジオボタンが...
-
チェックボックスのvalueに変数...
-
IEで、フォームにたとえば
-
フォームの途中で追加するには
-
DBの値をチェックボックスに反...
-
チェックボックスによる検索
-
PHP+MySQLで複数のラジオボタン...
-
リストボックス 複数選択のデ...
-
PHPでクリックするたびに変数を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<input type="hidden" >で配列...
-
HTMLで前の画面に戻る時、入力...
-
PHPでユーザー情報を入力して簡...
-
PHP ボタンが押されたら処理を...
-
PHPとHTML+Xamppの掲示板で画像...
-
syntax error, unexpected '}' ...
-
検索時の選択内容を保持する方法
-
PHPでCookieを使った訪問回数に...
-
チェックボックスによる検索
-
フォームでのリセットを使う方法
-
PHPで画像の渡しが上手く行きま...
-
チェックボックスによる検索(...
-
フォームへの前回入力値をクリ...
-
フォームボタンを押すたびに数...
-
php mysql でチェックボックス...
-
PHPの関数実行
-
phpで分からないエラーが出てし...
-
PHPで、ボタンを押すと同じペー...
-
ラジオボタンをsessionで使いたい
-
入力フォーム→確認画面→送信画...
おすすめ情報