![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
プルダウンメニューから前方一致、中間一致、後方一致、完全一致
を選んで検索したいのですが、
うまくいきません。
$mae_naka_ushiro=$_GET['mae_naka_ushiro'];
//日本語入力考慮し、全角スペースを半角にする
$text = str_replace(" ", " ", $text);
$text2="";
$text2 = str_replace(" ", " ", $text2);
$text2=mb_convert_case($text,MB_CASE_LOWER,"UTF-8");
//スペースで分解。
$keywords = preg_split('/[\s]+/', $text, -1, PREG_SPLIT_NO_EMPTY);
print("<br>検索位置:".$mae_naka_ushiro."<br>");
switch($mae_naka_ushiro){
case "mae":
$keywords='%'.$keywords;
print("前"."<br>".$keywords);
break;
case "naka":
$keywords='%'.$keywords.'%';
print("中"."<br>".$keywords);
break;
case "ushiro":
$keywords=$keywords.'%';
print("後"."<br>".$keywords);
break;
case "zen":
$keywords=$keywords;
print("完全"."<br>".$keywords);
break;
default:
$keywords='%'.$keywords.'%';
print("デフォルト"."<br>".$keywords);
break;
}
$where = " where 1";
foreach( $keywords as $word ){
$where .= " and $key2 LIKE '$word'";
}
$time=microtime();
include ('sql_connect.php');
$sql = mysql_query("select count(*) as MAX from song $where");
$row = mysql_fetch_row($sql);
No.1ベストアンサー
- 回答日時:
$keywordsはpreg_splitの戻り値ですから「配列」ですよね?それなのに
>$keywords='%'.$keywords;
こういう書き方は無理でしょう。printしているから、ご自分でも「おかしい」のはわかっていると思います。"%Array"などとなっているのではありませんか?
書くとすれば下記のような感じでしょうか・・・
$where = '';
if (count($keywords) > 0) { // 要素数が0なら処理しない
$like = array();
switch($mae_naka_ushiro){
case "mae":
foreach ($keywords as $val) { $like[] = '(' . $key2 . ' like %' . $keywords . ')'; }
break;
case "naka":
foreach ($keywords as $val) { $like[] = '(' . $key2 . ' like %' . $keywords . '%)'; }
break;
case "ushiro":
foreach ($keywords as $val) { $like[] = '(' . $key2 . ' like ' . $keywords . '%)'; }
break;
case "zen":
foreach ($keywords as $val) { $like[] = '(' . $key2 . ' = ' . $keywords . ')'; }
break;
}
$where = ' where ' . implode('and', $like);
}
#まったくの未検証ですのであしからず
#typoなどがあるかもしれません(汗
なお、上記ソースではエスケープ(mysql_real_escape_string)は端折っています。端折った理由は「ネイティブなMySQL関数はそろそろ先がないので早めにPDOなどで書き直すべき」ということです。プリペアドステートメントを使えばエスケープを意識する必要はありませんので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
重複確認
-
配列を比較して同じものがあっ...
-
pythonで辞書データへのアクセ...
-
うまくいきません
-
思うような連想配列ができない・・
-
PHPでJSONを扱うときに配列の参...
-
クロス集計で商品名かつサイズ...
-
キーが倍数の時の値の存在チェ...
-
$funcって何ですか?
-
executeの実行が一回しかされない
-
大阪へ転勤します。一時長期宿...
-
csvファイルを読み込み→上書き...
-
総当り表
-
Noのデータ受け渡しで同じNoが...
-
phpを実行するとファイルダウン...
-
PostgreSQLの配列項目のデータ...
-
Smartyでtplファイルから配列を...
-
CSVデータの行数カウントをした...
-
2次元配列CSVのソート
-
順位を付ける時のスコアの重複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複確認
-
foreachで上限回数指定方法また...
-
マッチング処理(1:N)
-
Excel VBAでフィルター後の対象...
-
VB.NET で 二次元のハッシュは...
-
多次元配列を、1次元の配列にす...
-
SELECT 使用時の bindValue の...
-
Smartyでインクリメント
-
PHPでこのコード自体に意味は無...
-
配列を比較して同じものがあっ...
-
PHP、{}記号の意味
-
sqlのデーターを『あ行』『か行...
-
phpでforeachの中にforeachがあ...
-
多次元配列の中で条件に合う要...
-
三重県南部の温泉
-
キーが倍数の時の値の存在チェ...
-
ラジオボタンをランダムに表示...
-
構造体の中でユーザー定義型の...
-
ジャグ配列
-
foreachで配列を、左から縦3列...
おすすめ情報