• ベストアンサー

php複数キーワード検索

tkc2007の回答

  • tkc2007
  • ベストアンサー率50% (2/4)
回答No.1

とりあえず、うまく動作しない時の$sqlをecho なりprint なりで表示してみて下さい。 それと複数条件でのSELECT文を書いてみてください。 比べてみた時にPHPからのSELECT文は思った通りのSELECT文になってるでしょうか? WHERE以降は条件が1つなら WHERE words like '%aaa%'" でOKですが、複数の条件を指定したいのであれば WHERE words like '%aaa%' AND words like '%bbb%' のようになっていないといけないので、 スペースをANDに変換するだけではこの形にはならないですよね? なので、うまく動作しなかったんですね。 それと、スペースを変換するだけだと、ユーザーが検索文字の最後にスペースを入れてしまった場合にエラーになると思います。 その辺りの配慮も必要になりますね。

nori1969
質問者

お礼

回答ありがとうございます。 ご指摘の 『WHERE words like '%aaa%' AND words like '%bbb%'』 この表現に思い至りませんでした。 以下のように変えたところ、意図したとおりに動作しました。 ありがとうございます。 また、ご指摘のように、キーワード間以外にスペースが入る場合についても考慮する必要は感じておりますが、現段階ではそこまで緻密でなくともよいので(仕事のwebではないため)、もう少しスキルアップしたら(gooで聞かなくてもいいくらいのレベルになったら)改変しようと思います。 重ね重ねありがとうございました。 $word=mb_convert_kana($word,"as","SJIS"); $word=preg_replace('/ /','%\' AND words like \'%',$word);

関連するQ&A

  • 検索結果が複数ページになるとき

    病院を検索するページを作っています。 結果が複数ページになる時に、2ページ目からうまくいきません。 $hospcat = mb_convert_encoding($hospcat,"EUC-JP","SJIS"); $hospname = mb_convert_encoding($hospname,"EUC-JP","SJIS"); $hospadd = mb_convert_encoding($hospadd,"EUC-JP","SJIS"); //診療科目か病院名か住所で where条件を組み立てます $where = " where (hospcat like '$hospcat') and (hospname like '%$hospname%') and (hospadd like '%$hospadd%')"; これで、1ページ目は表示するのですが 2ページ目にはどうやってこの情報を送ったらいいのでしょうか? 参考書には以下のように書いてあるのですが。。 //ページナビゲーションのパラメータの設定 if (isset($key) and strlen($key) > 0) { //キーワードが指定されていたらパラメータに追加します $keynavi = "&key=" . urlencode($key); } else { $keynavi = ""; } 色々やって見ますが、変な検索結果が出てきます。 堂かよろしくお願いいたします。 apache 1.3.34 mysql 4.0.26 php 4.4.2 で運用しています。

    • 締切済み
    • PHP
  • PHPからのLike検索について。

    初めまして。 ロリポップでPHPとMySQLを使ってHPを作成しているのですが Likeの条件を付け足すと結果が取得できなくなってしまいます。 ロリポップ上の【phpMyAdmin】で同じSQLを実行すると 結果を取得してくれるのですが PHP上でLike条件を付け足すと、上手く結果を取得してくれなくて困っています。 $key = "あ"; $LIKE = " where furigana Like '$key%'"; $SQL = "select count(*) from item_info" . $LIKE; $rst = mysql_query( $SQL, $con ); print $SQL; $col = @mysql_fetch_row($rst); $ret[0] = mb_convert_encoding($col[0],"SJIS","EUC-JP"); print "<br>"; print $ret[0]; このSQLで結果【1】が取得できるはずなのですが 表示すると必ず【0】となってしまいます。。 上記のコードに何か間違いがありますでしょうか? ご教授お願い致します。

    • 締切済み
    • PHP
  • 絞込み検索(and検索)について

    PHPの勉強をしています。色々試してみたのですが解決までいたらなかったのでご相談させて頂きます。 テストで検索を掛けたら下記のようなエラーが発生しました。 Warning: mb_convert_encoding() [function.mb-convert-encoding]: Unable to detect character encoding in C:\Program Files\xampp\htdocs\PHPSAMPLE\sample_php\search.php on line 19 上記のエラーは $KeyWord=mb_convert_encoding($KeyWord,"Shift_JIS","auto"); を外す事でエラーにならず検索する事ができました。 ■ソース --------------------------------------------------------------------------- 13 if($_GET["key"]==""){ 14 print"キーワードを入力してください"; 15 }else{ 16 $KeyWord=$_GET["key"]; 17 $KeyWord=htmlspecialchars($KeyWord); 18 $KeyWord=mb_convert_encoding($KeyWord,"Shift_JIS","auto"); 19 $KeyWord=mb_convert_kana($KeyWord,s); 20 $ArrKeyword=explode(" ",$KeyWord); --------------------------------------------------------------------------- つづいて、区切りに使われるスペースを「半角」「全角」どちらでも対応できるように 「全角スペース」が入力された場合、すべて半角スペースに統一するようになっているはずなんですが 例)フルーツ リンゴ と全角スペースで絞り込んだ場合。検索結果が0と表示されてしまいます。 半角スペースで絞り込んだ場合。表示結果が1件と正常に表示されます。 ■ソース --------------------------------------------------------------------------- 13 if($_GET["key"]==""){ 14 print"キーワードを入力してください"; 15 }else{ 16 $KeyWord=$_GET["key"]; 17 $KeyWord=htmlspecialchars($KeyWord); 18 $KeyWord=mb_convert_kana($KeyWord,s); 19 $ArrKeyword=explode(" ",$KeyWord); --------------------------------------------------------------------------- mb_convert_kanaで「全角」スペースを「半角」に変換するように設定し explodeで文字列を半角スペースで分割するようにしているはずなんですけど うまく機能しません。。。 記述方法が間違っているのか?何かがたらないのか? 自分なりに考えたのですが改善策が見つかりません。 どなたか知恵を貸して頂ければと思います。 宜しくお願いいたします。

    • 締切済み
    • PHP
  • メール転送でPHPの正規表現です。

    sakuraサーバーで、mailfilterを使用して、パイプでメール転送しようという魂胆です。 http://ameblo.jp/topepe/entry-10325428465.html ※PHPにて正規表現を使って整形してメール転送しようと思っています。 #!/usr/local/php/5.2.17/bin/php-cgi <?php $content = null; $fp=fopen("php://stdin",'r') or die('File Open Error'); while( !feof($fp) ){ $content .= fgets( $fp ,1024); } mb_language("japanese"); mb_internal_encoding("UTF-8"); mb_send_mail("xxx@example.com","subject",$content); ?> のような簡単な転送では成功しています。 そこでpreg_replaceでメールヘッダーを削ったり、本文中の日本語句を削除してから転送しようとしているのですが、preg_replaceをかけるとすべて消えてしまいます。 ◎英数字だけの正規表現(/\A(.*?).jp/sなど)の場合はうまく動きます。 ×日本語が入ると駄目です。(/\A(.*?).受信者/usなど) sakuraの場合、パイプで動かすPHPファイルはEUC+LFでないと動きません。 なので $content_utf8 = mb_convert_encoding($content,"UTF-8","EUC-JP"); $patturn_utf8 = mb_convert_encoding("/\A(.*?)受信者/us","UTF-8","EUC-JP"); $c = preg_replace($patturn_utf8,"",$content_utf8); mb_send_mail("xxx@example.com","subject",$c); などとしていますが、駄目です。 preg_matchだとメールすら転送されません。 ※ヘッダーを削るだけならPEARもありだと思いますが、本文のもろもろを削るので、 PEARがあろうが、preg_replaceを使いたいことには変わりありません。 できればPEARはインストールしないでただの正規表現で行きたい、という段階です。 なにかヒントはありますでしょうか。 sakuraサーバー php/5.2.17 php-cgi PHPファイルはEUC+LF

    • ベストアンサー
    • PHP
  • php+mysqlでand検索

    ソースコード抜粋 下記のコードを見つけたのですがNotice: Undefined variable: where・・・。 と表示されて実行できません。 なにぶんPHP初心者なのでわかり易く教えてください。 $search = str_replace(" ", " ", $text); $keywords = preg_split("/[  ]+/",$text); $where = " where 1"; foreach( $keywords as $word ){ $where .= " and $key2 like '%$word%'"; } //SQL文 $result = mysql_query("select * from song $where ORDER BY number ASC LIMIT $start,$end");

    • ベストアンサー
    • PHP
  • PHP,MYSQLで検索が出来ません。sjis→ euc→sjis。

    apache 1.3.34 mysql 4.0.26 php 4.4.2 で運用しています。 HTML 入力 sjis → DATA sjis →読み出し sjis で運用していたのですが、文字化けのおかげで データを EUC にしました。 HTML(入力)sjis→EUC→HTML(読み出し)sjis に変更しました。 参考書を頼りに、変換しながらやっているのですが データが漢字(ひらがなも同じかも)の場合に検索が出来ません **他はうまくいっています***入力、表示ともに 入力時 function cnv_dbstr($string) { $string = htmlspecialchars($string); $string = mb_convert_encoding($string, "EUC-JP", "SJIS"); if (!get_magic_quotes_gpc()) { $string = addslashes($string); } return $string; } 出力時 function cnv_dispstr($string) { $string = mb_convert_encoding($string, "SJIS", "EUC-JP"); $string =nl2br($string); return $string; } 今までは下記のsqlで出来ていたのですが、この福岡市を cnv_dbstr(福岡市) にしてみたりしたのですが検索が出来なくて データが出てきません。 $sql = "select * from mem where area = 1 and cate = '福岡市'" ; $rst = mysql_query($sql, $con); どなたか、アドバイス宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • cakephpでキーワード検索

    すみません。いろいろやってみたんですが 断念して、ここに投稿しました。 検索キーワードでページングするための方法がわかりません。 例)東京 寿司屋 このようにスペースで単語ごとに区切ります。 一文字だけは成功しましたが、スペースを空けて単語を読みとる 方法が浮かびません。 $keyword = mb_convert_kana($this->data["Hoge"]["keyword"],'rnask'); $keywords = preg_split("/[\s]+/",$keyword); $set = array(); $set = array( 'OR' => array( 'Hoge.name LIKE' => '%'.$keywords[0].'%', 'Hoge.prefecture LIKE' => '%'.$keywords[0].'%', 'Hoge.job LIKE' => '%'.$keywords[0].'%', ), //'OR' => array( //'Hoge.name LIKE' => '%'.$keywords[1].'%', //'Hoge.prefecture LIKE' => '%'.$keywords[1].'%', //'Hoge.job LIKE' => '%'.$keywords[1].'%', //), // コメントをはずしてみると、案の定エラーこきます。 'Hoge.cp_flag' => 1, ); $this->set("hogehoes",$this->paginate('Hoge',$set,null)); お願いします。どなたかお助け下さい。

    • ベストアンサー
    • PHP
  • 全角スペースを半角スペースに変換

    $str = mb_convert_kana($usersearch, "s", "EUC-JP"); $usersearch= $_POST['usersearch']; 上記のソースを記述し、htmlのテキストボックス(usersearch)内にある全角スペースを半角にしようと試みるのですが、上手く変換されません。何か解決策はないでしょうか?? 全体的にはこのようなソースです。 $search_query = "select * from kensaku2"; $str = mb_convert_kana($usersearch, "s", "EUC-JP"); $usersearch= $_POST['usersearch']; $clean_search = str_replace(',', ' ', $usersearch); $search_words = explode(' ', $clean_search); $final_search_words = array(); if (count($search_words) > 0) { foreach ($search_words as $word) { if (!empty($word)) { $final_search_words[] = $word; } } } // Generate a WHERE clause using all of the search keywords $where_list = array(); if (count($final_search_words) > 0) { foreach($final_search_words as $word) { $where_list[] = "syou LIKE '%$word%'"; } } $where_clause = implode(' AND ', $where_list); // Add the keyword WHERE clause to the search query if (!empty($where_clause)) { $search_query .= " WHERE $where_clause"; } よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpのソースによって、文字化けしてしまいます

    お世話になっております。 PHPとMySQLを利用しております。php.iniでPHP 、my.cnfでMySQL、それぞれの文字コードを「日本語EUC」に設定し、問題なく動作しております。 ただ、PHPスクリプトのソースコードが日本語EUCでない場合、出力結果が???????のように文字化けしてしまいます。 PHPスクリプトのソースの文字コードが、日本語EUCであっても、シフトJISであっても文字化けしないようにするには、どのように設定したらよいでしょうか。 初心者であり、困っております。 どなたか、お助けいただくことはできますでしょうか。 どうか、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • checkbokとキーワード検索を組み合わせた検索

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

    • 締切済み
    • PHP