PHP4とMySQL4.0.22を使っています。
チェックボックスとキーワードで検索結果を表示させたいと思い。
下記のようにプログラムを作成したのですが、うまく検索表示してくれません。
PHPもMySQLも初心者なため、あちこちの構文を寄せ集めたため、Parseもうまく通っていません。
どこをどういう風にすればうまくいくのか、教えていただけないでしょうか?
よろしくお願いします。
----------------------------以下PHPファイル-----------
検索フォーム
検索キーワード:<input type=text name=\"k\"value='$k' size=45 >
チェックボックス
<INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"01:河川・砂防及び海岸\">01:河川・砂防及び海岸
・・
";
//データ検索結果の実行部分
if($sig=="kb"){
$wk =="";
if($wk<>""){
//チェックボックス
$sql = "select * from tecris where";
$sql .= " (";
$i=0;
foreach($_POST['bumon'] as $fr) {
if ($i) {
$sql .= " or ";
}
$sql .= "bumon = '$fr';
$i++;
}
$sql .= ") and ";
//キーワード
if($k<>""){
$xk = str_replace(" "," ",$k);
$gk = explode(" ",$xk);
$wk ="keyword like '%$gk[0]%'";
$i = 1;
$n = count($gk) - 1;
while ($i <= $n){
$wk = $wk . " and keyword like '%$gk[$i]%'";
$i++;
}
}
//クエリの作成
$sql = $sql . $wk;
};
No.1ベストアンサー
- 回答日時:
実際の動作、テーブル構成がわからないので外しているかもしれませんが、チェックボックスのVALUE値が「01:河川・砂防及び海岸」となっているのがおかしいように思えます。
SQL文のWHERE句を生成する箇所でこのVALUEの値をそのまま使用しているのでおかしくなるのではないでしょうか?
通常のテーブルの作り方として、この手の値は数値で持ちます。
つまり、1 や 2 といった値です。
従ってチェックボックスのHTMLを見直すと、
<INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"1\">01:河川・砂防及び海岸
とすればいいように思えます。
こういった不具合の確認にはまず生成されたSQL文を表示してみてください。
またクエリを実行したあとエラーになるならば、mysql_error関数でエラーの内容が取得できますので参考にするとよろしいかと思います。
ありがとうございました。
生成されたSQL文を表示させながら、なんとかエラーを見つけました。
$sql .= "bumon = '$fr';
を
$sql .= "bumon = '$fr'";]
と最後に「"」を追加したら検索できるようになりました。
ただ、教えていただいたように、value=\"1\" として検索してSQL文を表示させたところ
select * from tecris where (bumon = '1') と表示され、検索できませんでした。
また、検索は出来るようになったのですが、検索ボタンを押すと、チェックボックスのチェックマークがなくなってしまいます。
表示したままには出来ないものでしょうか?
よろしかったらご教授願います。
No.4
- 回答日時:
ごめんなさい。
下の例では正常動作しませんでした・・・
ほんと、すいません。
確かにチェックボックスが増えますね。
これはforeachでチェック一つに付き二つ書き出しているためです。
チェックが多く付くごとにチェックボックスが増えていきます。
やるんでしたらこうしないとダメでしたね^^;;
if ($_POST['bumon']) {
for($i=1;$i<=2;$i++) {
$flag = 0;
foreach ($_POST['bumon'] as $bt) {
if ($bt == $i) {
print "<INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"$i\" checked>";
$flag++;
}
}
if (!$flag) {
print "<INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"$i\">";
}
}
} else {
print "<INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"1\">";
print "<INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"2\">";
}
動いたのでしたらよかったです^^
moon_night様
何度もありがとうございました。
ご教授頂いた方が、短くて済みそうですね。
次回試してみたいと思います。
本当にありがとうございました。
No.3
- 回答日時:
foreach ($_POST['bumon'] as $bt) {
if ($bt == '1') {
・・・(略)
}
の(略)の部分を正確に教えていただければ答えられると思いますが、その補足情報では回答ができません。
この回答への補足
略の部分は教えていただいたとおり
print "<INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"1\" checked>";
} else {
print "<INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"1\">";
}
を記載しました。
その後、私のほうでも色々試してみました。
http://okweb.jp/kotaeru.php3?q=1506155
と手元にあった参考書「MySQL以前」を参考に次のように作成したら、うまくできるようになりました。これで本当に良いのか、もっと簡単に書けるのではないかと思いますが、結果はうまく検索できているみたいです。
いろいろとありがとうございました。
if($ca == '01'){$c01 = "checked";}
if($cb == '02'){$c02 = "checked";}
---------------途中省略-----------
//チェックボックス
<p>
<INPUT TYPE=\"CHECKBOX\" NAME=\"ca\" value=\"01\" $c01>01:河川・砂防及び海岸
<INPUT TYPE=\"CHECKBOX\" NAME=\"cb\" value=\"02\" $c02>02:港湾及び空港
</p>\n";
---------------途中省略-----------
//クエリの作成
$sql = "select * from tecris where ";
$sql .= "(";
$i=0;
if($_POST['ca']) {if ($i) {$sql .= " or ";}$sql .= "ID = '01'";$i++;}
if($_POST['cb']) {if ($i) {$sql .= " or ";}$sql .= "ID = '02'";$i++;}
$sql .= ") and ";
if($wk<>""){
$sql = $sql;
}
No.2
- 回答日時:
チェックボックスの項目のテーブルを別に持ってリレーションさせたほうがいいと思います。
テーブル構造がどうなっているかは分かりませんが、
現在 bumon フィールドに 「01:河川・砂防及び海岸」と入っていると思いますが、このフィールドを数字だけにして、別に
項目テーブル
ID | 項目内容
1 | 01:河川・砂防及び海岸
というようにすれば検索しやすいと思います。(リレーションをはる)
どちらにしろ検索キーワードを使っているので文字コードをあわせないといけませんけども。
チェックボックスのチェックは
foreach ($_POST['bumon'] as $bt) {
if ($bt == '1') {
print "<INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"1\" checked>";
} else {
print "<INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"1\">";
}
if ($bt == '2') {
print "<INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"2\" checked>";
} else {
print "<INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"2\">";
}
・・・(略)
}
という風にすればできます。
この回答への補足
moon_nightさま、お返事いただきましてありがとうございました。
早速、IDを入れて、テーブル構造を
ID bumon keyword
01 01:河川・砂防及び海岸 沿岸道路
・ ・・・・・・・・・・・・ ・・・・
としました。
そしてチェックボックスも
foreach ($_POST['bumon'] as $bt) {
if ($bt == '1') {
・・・(略)
}
を
<INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"01:河川・砂防及び海岸\">01:河川・砂防及び海岸
・・・・・・・・・・・・・・・・
の代わりに入れて試してみたのですが、
チェックボックスにチェックを入れて検索すると、そのたびにチェックボックスが増えてしまいます。
入れるところが悪いのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- MySQL #1062 - '0' は索引 'PRIMARY' で重複しています。とでています。 1 2023/01/01 06:13
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHP MySql ページング 2 2022/09/20 06:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA ACCESS SQL...
-
insert1つの処理でもトランザ...
-
Pro*Cの構文エラー
-
Q&Aサイトを作成していてURLの...
-
ResultSetインターフェイスでの...
-
CakePHPとMySqlを使用していま...
-
MySQLのINSERT時にたまに重複に...
-
JAVA SQLServerException 列名 ...
-
データベースに存在するデータ...
-
PHPでMySQLのテーブルからcount...
-
order by での変数使用について。
-
エクセルVBAについて
-
VBAをつかってクエリの情報を抽...
-
MySQLでデータベースにデータin...
-
実行時エラー3131 FROM 句の構...
-
円マークが付加されて保存され...
-
DBで検索結果に該当するデータ...
-
phpにて出欠登録管理を作成して...
-
phpのエラーについてです
-
sortable ギブアップです…助け...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
Q&Aサイトを作成していてURLの...
-
<VB.NET>INSERT文でDBにデータ...
-
insert1つの処理でもトランザ...
-
Pro*Cの構文エラー
-
ResultSetインターフェイスでの...
-
データベースに存在するデータ...
-
PHP&MySQLでの文字列+数列の一...
-
VBA ACCESS SQL...
-
phpで複数の検索語を検索対象に...
-
like検索の複数キーワードで、...
-
MySQLのINSERT時にたまに重複に...
-
C# で発生したException.Messag...
-
PHP+PDO+MYSQL で実行されたSQ...
-
PHPのUndefined index や varia...
-
INSERT,DELETEを同時に
-
配列をループさせてUPDATE
-
VB.NET エラーになる箇...
-
php postgres Insert と updat...
-
C#でDBの特定列をUpdate
おすすめ情報