HTML,PHPとMYSQLを用いて
企業の求人情報を検索するフォームを作成しています.
HTMLの入力フォームは
・キーワード入力(企業名)
・プルダウンから選択(業種選択)
・チェックボックスで複数選択(職種選択)
の構成です.
検索を行う際は{企業名 AND 業種 AND (職種[1]OR[2]・・・)}というように職種の部分のみOR検索という構成で考えています.
しかし,職種を複数選択して検索を行うことが出来なくて非常に困っています.
以下が現在作成中のコードです.
HTMLはチェックボックスの部分のみ貼りますね
serch_form.html
<form action="library_search.php" method="post">
<input type="checkbox" name="box[]" value="プログラマー">プログラマー
<input type="checkbox" name="box[]" value="システムエンジニア">システムエンジニア
<br>
<input type="checkbox" name="box[]" value="ネットワークエンジニア">ネットワークエンジニア
<input type="checkbox" name="box[]" value="その他情報系">その他情報系
library_search.php
<html>
<head><title>検索結果</title></head>
<meta http-equiv="Content-Type" content="text/html charset=EUC-JP">
<body>
<?php
//POST表示用
print_r($_POST);
$where = array();
$host = "localhost";
if (!$conn = mysql_connect($host, "usr", "passwd")){
die("データベース接続エラー.<br />");
}
mysql_select_db("db", $conn);
$condition = "";
if(isset($_POST["title"]) && ($_POST["title"] != "")){
$title = mysql_escape_string( $_POST["title"]);
$title = str_replace("%", "\%", $title);
if ($condition == ""){
$condition = "WHERE cname LIKE \"%".$title."%\"";
} else{
$condition .= "AND cname LIKE \"%".$title."%\"";
}
}
if(isset($_POST["pdown"]) && ($_POST["pdown"] != "")){
$pdown = mysql_escape_string( $_POST["pdown"]);
$pdown = str_replace("%", "\%", $pdown);
if ($condition == ""){
$condition = "WHERE gyousyu LIKE \"%".$pdown."%\"";
} else{
$condition .= "OR gyousyu LIKE \"%".$pdown."%\"";
}
}
if(isset($_POST["box"]) && ($_POST["box"] != "")){
//foreach($_POST["box"] as $val){
$where = mysql_escape_string( $_POST["box"]);
$where = str_replace("%", "\%", $where);
//}
if ($condition == ""){
$condition = "WHERE job LIKE \"%".$where."%\"";
} else{
//$where = inplode(' or ' ,$where);
$condition .= "AND job LIKE \"%".$where."%\"";
}
}
$sql = "SELECT * FROM job_table ".$condition." ORDER BY id LIMIT 50";
$res = mysql_query($sql, $conn);
print("<table border=\"1\">");
print("<tr><td>企業名</td><td>業種</td><td>募集職種</td></tr>");
while($row = mysql_fetch_array($res)) {
print("<tr>");
print("<td>".$row["cname"]."</td>");
print("<td>".$row["gyousyu"]."</td>");
print("<td>".$row["job"]."</td>");
print("</tr>");
}
print("</table>");
mysql_free_result($res);
?>
</body>
</html>
特にforeach文を使って,POSTに格納されたjob[]を分解して格納する方法がわかりません.
PHP初心者で汚いコードですが,どうかお願い致します.
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
最近ヒアドキュメントは駄目だと釘をさされていますが、
あえてここはヒアドキュメントで・・・
この手のSQL作成に関しては基本的には「WHERE 1」とします。
すると条件を設定してないときにすべて表示することになります。
それに「AND」でつないでいくのです。
そうするとWHEREをつける場所の場合分けみたいな処理は不要になります。
配列をまわすのは三項演算子でORをつけて最後にANDをカッコでくくると
よいでしょう。
ちなみにLIKEは前方一致または後方一致しかインデックスがききません。
LIKE '%hoge%'的な使い方ではSQLの高速検索は発揮できませんので
念頭に置いた方がよいでしょう。
<?PHP
/*
エスケープ処理は今回は省略
$KIGYOUMEI=エスケープ処理($_POST['title']);
$GYOUSHU =エスケープ処理($_POST['gyousyu']);
$SHOKUSHU =ループでエスケープ処理($_POST['box']);
*/
//以下テストデータ
$KIGYOUMEI="ソニー";
$GYOUSHU="製造業";
$SHOKUSHU=Array("研究","製造","営業");
if(!empty($KIGYOUMEI)) $where_KIGYOUMEI ="AND `cname` LIKE '%{$KIGYOUMEI}%'";
if(!empty($GYOUSHU)) $where_GYOUSHU ="AND `gyousyu` LIKE '%{$GYOUSHU}%'";
$where_SHOKUSHU="";
if(is_array($SHOKUSHU)){
foreach($SHOKUSHU as $val){
$where_SHOKUSHU.=($where_SHOKUSHU==""?"":" OR ")."`job` LIKE '%{$val}%'";
}
$where_SHOKUSHU="AND ({$where_SHOKUSHU})";
}
$sql = <<<eof
SELECT *
FROM `job_table`
WHERE 1
{$where_KIGYOUMEI}
{$where_GYOUSHU}
{$where_SHOKUSHU}
ORDER BY `id`
LIMIT 50
eof;
print $sql;
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpでmysqlを使ってデータベー...
-
連想配列、オブジェクト配列の...
-
PHPについてなのですが未定義の...
-
mysql_real_escape_string
-
検索結果をgoogleのように数件...
-
PHP 未定義の変数について
-
重複したフィールドに関して
-
mysql_insert_id()の使い方
-
PHPで[]の使い方について
-
テキストボックスに入れた内容...
-
MYSQLからphpで取り出した...
-
SQL文が実行できません
-
OR検索を実装したい
-
phpで複数の検索語を検索対象に...
-
会員サイトでログイン後の会員...
-
宜しくお願いします。
-
phpのエラーについてです
-
PHP/MySQL SQLエラーについて。
-
SQL文の実行に失敗しました???
-
DAOでデータベースを二つ開くに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAについて
-
PHPで[]の使い方について
-
DBで検索結果に該当するデータ...
-
アラートでyes noを作りたいです。
-
dbに登録したデータをphpのプル...
-
phpでmysqlを使ってデータベー...
-
sortable ギブアップです…助け...
-
checkboxクリック時、SQLを実行...
-
PHPでMY SQLの連想配列をリンク...
-
チェックボックスによる複数の...
-
PHPでMySQLデータを呼び出し、w...
-
mysql_fetch_objectの書き方を...
-
SELECT結果から動的にコンボボ...
-
チェックボックスでチェックし...
-
VBA初心者です。
-
PHPについてなのですが未定義の...
-
文字化けが解決できません。お...
-
htmlとphpの分離
-
php テーブルが作成できない
-
検索結果をgoogleのように数件...
おすすめ情報