• 締切済み

MySQL+PHPでキーワード検索をもとに五十音検索を作りたいです

キーワード検索のソースを元に五十音検索を作りたいです。 キーワード検索のソースを元に五十音検索を作りたいのですが、”あ”という文字を押したら”あ”の頭文字の一覧が出るようにするにはどうしたらいいでしょうか。 キーワード検索ではすでにキーワードを入れたら検索結果の一覧が出るようになっています。 以下が必要そうなコードの抜粋です。 <?php //抽出条件を組み立てる $array = explode(" ", $keyword); $cnt = count($array); $where = "WHERE "; for($i=0; $i < $cnt; $i++){ $where.= "koji OR kana LIKE '%".$array[$i]."%'"; if($i < $cnt-1){ $where .=" ".$searchSelect." "; } } // クエリを送信する $sql = "SELECT * FROM sampletable ".$where; $result = executeQuery($sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //表示するデータを作成 if($rows){ while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row[no]."</td><td><A href='result2.php?koji=$row[koji]' target='_blank'>".$row[koji]."</A></td><td>".$row[kana]."</td>"; $tempHtml .= "</tr>\n"; } $msg = $rows."件のデータがあります。"; }else{ $msg = "データがありません。"; } ?> <h3>キーワード検索</h3> 故事成語用検索フォーム(複合語検索ができます) <form name="form2" action="search2.php" method="post"> <input type="text" name="keyword" size="25"> <input type="submit" name="search2" value="検索"><br /> </form>

  • PHP
  • 回答数3
  • ありがとう数1

みんなの回答

回答No.3

No1です。 ラジオボタンのNAME属性を間違えました。 <form name="kana_search" method="post" action="search.php"> <input type="radio" name="s_kana" value="あ"> あ<br> <input type="radio" name="s_kana" value="い"> い<br> <input type="radio" name="s_kana" value="う"> う <br> <input type="submit" name="Submit" value="ひらがな検索"> </form> が正しいソースです。

Hwakami
質問者

お礼

とても丁寧なご回答ありがとうございました!! テキストリンクだと難しそうですね…!!これの応用で固定キーワードの検索も作ってみたいと思っていたのですが…! ひとまずラジオボタンで試してみます。 本当にありがとうございました!

回答No.2

No1です。 テキストリンクでやりたいという事ですね。 通常、日本語文字をテキストリンクにする場合だと、URLエンコードが必要になってくるので、手間を省きたいなら、ラジオボタンなどを使ってPOST送信した方が楽だと思います。 ///ひらがな検索用のFORMを用意 <form name="kana_search" method="post" action="search.php"> <input type="radio" name="s_form" value="あ"> あ<br> <input type="radio" name="s_form" value="い"> い<br> <input type="radio" name="s_form" value="う"> う <br> <input type="submit" name="Submit" value="ひらがな検索"> </form> 選択されたひらがなと$row[kana]の頭文字とを比較して、一致しないものはスルーする形で、前の回答でソースを提供させていただきました。 if( (isset($_POST['s_kana']) && !empty($_POST['s_kana']) ) && mb_substr($row[kana],0) != $_POST['s_kana'] ){ continue; } ちなみにテキストリンクの場合だと、 <a href="search.php?s_kana=%82%A0">あ</a> <a href="search.php?s_kana=%82%A2">い</a> <a href="search.php?s_kana=%82%A4">う</a> のようになり、変数も$_POST['s_kana']ではなく、$_GET['s_kana']に変わります。

回答No.1

五十音の検索元の変数がはっきりわかりませんが、$row[kana]の頭文字の事ですかね? それなら単純にmb_substr($row[kana],0)で頭文字を取得することでは駄目ですか?それともmb系は利用できないとか、、、。 //表示するデータを作成 if(mysql_num_rows($result) > 0){ //カウント開始 $rows=0; while($row = mysql_fetch_array($result)) { //ここで頭文字を取得 //検索対象の頭文字を仮に$_POST['s_kana']とする if( (isset($_POST['s_kana']) && !empty($_POST['s_kana']) ) && mb_substr($row[kana],0) != $_POST['s_kana'] ){ continue; } $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row[no]."</td><td><A href='result2.php?koji=$row[koji]' target='_blank'>".$row[koji]."</A></td><td>".$row[kana]."</td>"; $tempHtml .= "</tr>\n"; $rows++; } if($rows > 0){ $msg = $rows."件のデータがあります。"; }else{ $msg = "データがありません。"; }

Hwakami
質問者

補足

ご回答ありがとうございます! えっと、HTMLで あ い う え お と表記し、「あ」にリンク指定をして「あ」の文字を押すとが$row[kana]のデータの頭文字「あ」の一覧が出るようにしたいのですが、「あ」をリンクしたときに検索キーワードが「あ」であるとsearch.phpに認識させる方法がわかりません。 初心者のため、質問内容からわかりづらくて大変申し訳ございません。 もし解決方法がわかるようでしたら教えて頂けるととても助かります…!

関連するQ&A

  • PHPでの複合列への検索

    始めまして、現在 PHPとMySQLで検索機能でDBのリストから該当する検索ワードを表示する物を作成しています。 1つの列での検索は、問題なく検索できるのですが、別の列を検索する為には、どの様に変更または追加すれば宜しいのでしょうか? 私自身でプログラムの追加を試したのですが、一つの列しか検索されません。 PHPは、始めたばかりで余り解っていません。 現時点でのプログラムです。 <?php //Read file require_once("connectDB.php"); //Pick up data $searchSelect = $_POST['searchSelect']; $keyword = $_POST['keyword']; $keyword = ereg_replace("[ @]+", " ", $keyword); $keyword = trim($keyword); //Search words if(empty($keyword)){ print "<html>"; print "<head><title>Blank</title></head>"; print "<body>"; print "Please input search word"; print "<p><a href=\"select3.php\" target=\"_self\">To all</a><p>"; print "</body>"; print "</html>"; exit; } //Make programing $array = explode(" ", $keyword); $cnt = count($array); $where1 = "WHERE "; $where2 = "WHERE "; <-今回追加した内容です。 for($i=0; $i < $cnt; $i++){ $where1 .= "PREF_ITEM LIKE '%".$array[$i]."%'"; $where2 .= "PREF_VALUE LIKE '%".$array[$i]."%'"; <-今回追加した内容です。 if($i < $cnt-1){ $where1 .=" ".$searchSelect." "; $where2 .=" ".$searchSelect." "; <-今回追加した内容です。 } } // send query $sql1 = "SELECT * FROM KA_SP ".$where1; $sql2 = "SELECT * FROM KA_SP ".$where2; <-今回追加した内容です。 $sql1 .= " ORDER BY PREF_CD"; $sql2 .= " ORDER BY PREF_CD"; <-今回追加した内容です。 $result = executeQuery($sql1, $sql2); <-今回変更した内容です。 //Set line $rows = mysql_num_rows($result); //Show data if($rows){ while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["PREF_CD"]."</td><td>".$row["PREF_AD1"]."</td><td>".$row["PREF_AD2"]."</td><td>".$row["PREF_ITEM"]."</td><td>".$row["PREF_VALUE"]."</td><td>".$row["PREF_SET"]."</td>"; $tempHtml .= "</tr>\n"; } $msg = $rows."Hit parameter list"; }else{ $msg = "No hit parameter"; } // Release memory mysql_free_result($result); ?> このプログラムからDBのKA_SPのテーブルの列:PREF_ITEMまたはPREF_VALUEから該当文字する検索文字の結果を表示したと思っています。 現時点では、PREF_ITEMの列のみで該当文字が検索されて結果が表示されます。 宜しくお願い致します。

    • 締切済み
    • PHP
  • 2つのMySQLのテーブルをPHPで同じ行に表示

    MySQL クライアントのバージョン: 5.0.45 phpMyAdmin バージョン情報: 3.2.4-rc1 でデータベースを作成しております。 簡単な例ですが、 PRIMARY=id PHPのテーブルを下記のように表示させたい場合。 ┼─┼──┼──┼ │id │add │name│ ┼─┼──┼──┼ │0 │東京 │田中│ ┼─┼──┼──┼ │1 │長野 │鈴木│ ┼─┼──┼──┼ │2 │大阪 │佐藤│ ┼─┼──┼──┼ │3 │山口 │井上│ ┼─┼──┼──┼ idを共通にしていれば、 「add」はtable1、「name」はtable2の情報を 上記のように表示することは可能なのでしょうか? もし可能であれば、この表示の仕方の名称を教えていただけないでしょうか? (調べるときの検索ワードが分からなくて…すみません) 必要かわかりませんが、PHP上で表示する表の部分はこのように作成しています。 $result = executeQuery($sql); $rows = mysql_num_rows($result); if($rows){ while($row = mysql_fetch_array($recordSet)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["id"]."</td>"; $tempHtml .= "<td>".$row["add"]."</td>"; $tempHtml .= "<td>".$row["name"]."</td>"; $tempHtml .= "</tr>\n"; } $msg = $rows."件みつかりました"; }else{ $msg = "0件です"; } 経験が浅く、お伝わりにくいことがあったら、申し訳ございません。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpとmysqlで「あいまい検索」をしたいです。

    phpとmysqlで「あいまい検索」をしようと思い、下記サイトを参考にしましたが、 http://d.hatena.ne.jp/akihito_sado/20120602/p1 PDOを使ってlikeデータを抜き出したい場合、bindParamを使うらしいですが、 http://rasukaru55.sitemix.jp/or_kensaku.php 下記の場合どう書き直すべきでしょうか? 打ち方が悪いのか、うまく作動しません。 教えてください。 ※bindParamを使えばSQLインジェクション対策になっていると言う事でしょうか? <html> <head></head> <body> <?php //POST送信されたデータを$text1へ $text1 =@$_POST["text1"]; //SQL(テーブルから列を抽出する $sql ="SELECT 列名 FROM 表名 "; //キーワードが入力されているときはwhere以下を組み立てる if (strlen($text1)>0){ //受け取ったキーワードの全角スペースを半角スペースに変換する $text2 = str_replace(" ", " ", $text1); //キーワードを空白で分割する $array = explode(" ",$text2); //分割された個々のキーワードをSQLの条件where句に反映する $where = "WHERE "; for($i = 0; $i <count($array);$i++){ $where .= "(列名 LIKE '%$array[$i]%')"; if ($i <count($array) -1){ $where .= " AND "; } } //別カラムも同じ検索したい $where2 = " OR "; for($i = 0; $i <count($array);$i++){ $where2 .= "(2列名 LIKE '%$array[$i]%')"; if ($i <count($array) -1){ $where2 .= " AND "; } } } ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table> <tr> <td><input type="text" name="text1"></td> <td><input type="submit" value="検索" name="sub1"></td> </tr> </table> </form> <?php //組み立てたSQL分を表示する echo "<p>組み立てたSQL分: ".$sql.@$where.@$where2; ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPでMySQLのストアドプロシージャを実行するには?

    こんにちは、この件でいろいろ検索していたのですが ストアドの作成まではできているのですが、PHPからの 実行のさせ方がわからず質問させていただきました。 環境は、PHP 5.2.9 + MySQL5.1.32 で MySQLでストアドプロシージャを作成して、実行できるのですが これをphpから実行させたいのですが、どのように記述すればよいのかわからず悩んでおります。 実行したいストアドは Gen_rank という名前でコンソールから実行できることは確認しています。 下記のようにしてみましたが、ストアドは走りませんでした。 <?php require_once("db_connect.php"); // クエリを送信する $sql = "call Gen_rank();"; $sql = "SELECT id, name, phonetic, age, s4, s9, rank FROM tmp_records ORDER BY rank"; $result = executeQuery($sql); // 結果セットの行数を取得する $rows = mysql_num_rows($result); // 表示するデータを作成 if($rows){  while($row = mysql_fetch_array($result)) {   $tempHtml .= "<tr>";   $tempHtml .= "<td>".$row["id"]."</td><td>".$row["name"]."</td><td>".$row["phonetic"]."</td><td>".$row["age"]."</td><td>".$row["s4"]."</td><td>".$row["s9"]."</td><td>".$row["rank"]."</td>";   $tempHtml .= "</tr>\n"; }  $msg = $rows."件のデータがあります。"; }else{  $msg = "データがありません。"; } // 結果保持用メモリを開放する mysql_free_result($result); ?>

    • 締切済み
    • PHP
  • mysql と php で、2テーブル結合の検索!

    mysql と php を勉強しはじめで、解からないので、どなたか教えてください! 2テーブルあります。( 例 ’name’ と ’jusyo’ テーブルです。) ’name’テーブルは、NO int、IC_NO char(5)、NAME char(18)、 ・・・・・です。 ’jusyo’テーブルは、NO int、NAME_KANA char(30)、TEL char(6)、JUSYO char(50)、 ・・・・です。 この2テーブルを、《NO int、》で、左結合(レフトジョイン)させます。 テキスト入力フィールド、があり、検索ボタンで検索させようと思っています。 テキスト入力フィールドには、IC_NO を入力し、’jusyo’テーブルの、NAME_KANA TEL JUSYO・・・ を表示させたいと思っています。 <?php extract($_POST); echo " <form action=\"kensaku2.php\" method=\"post\" > <p>検索番号 : <input type=\"text\" name=\"nam\" value=\"$nam\" size=\"10\">   <input type=\"submit\" value=\"検索\"></p>\n </form> "; if($nam<>''){ mysql_connect('localhost','root','******'); mysql_select_db('データベース名'); $sql= "select * from name left join jusho on NO=NO"; $sql= "select * from name where IC_NO like '%$nam%'"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>\n"; } else { while($row = mysql_fetch_array($result)){ echo "詳細情報"; echo "<br />\n"; echo "<br />\n"; echo "インター名 : "; echo $row["NAME_KANA"]; echo "     "; echo "<p>";               ↓ としてますが、NAME_KANAが表示されません、どこが間違っていますか? 考え方がおかしいのでしょうか?

  • 検索結果をgoogleのように数件ずつ表示

    データベース初心者で申し訳ないのですが、質問失礼いたします。 googleのような検索結果ページで、検索結果を3件ずつ表示し、改ページ(?)をさせたいと思っております。 【web表示例】 1ページ目 3件表示/20件中表示 +------+------+---+ | name | anime | age | +------+------+---+ | サザエ | サザエさん | 24 | | マスオ | サザエさん | 29 | | タラオ | サザエさん | 3 | +------+------+---+ 1234567 //ページ数へのリンクですが、現在表示されている「1」にはリンクをさせません ※あらかじめLIMITで1~3件、4~6件を表示させるというページを作っているやり方でなく、  検索結果を自動で1ページ、2ページと振り分けてくれるものと考えています。 現在作成しておりますPHP部を、抽出条件など省いてはおりますが下記に表記させていただきました。 <?php //データベース接続 省略・・・ //検索ワードを取得 $keyword = $_POST['keyword']; $sql = "SELECT * FROM TABLE1 WHERE '%".$keyword."%' ORDER BY age "; $result = executeQuery($sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); if($rows){ while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["name"]."</td><td>".$row["anime"]."</td><td>".$row["age"]."</td>"; $tempHtml .= "</tr>\n"; } $msg = $rows."件のデータがあります。"; }else{ $msg = "データがありません。"; } mysql_free_result($result); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title></title> </head> <body> <?= $msg ?> <table> <?= $tempHtml ?> </table> </body> </html> 他HTMLで検索したあと、上記1ページで検索結果を表示しています。 ○件ずつ表示・・・というのは、難しいと調べている時にありましたが、 もっと理解してからでないととは思ったのですが必要となり自分なりに調べて試したものだけでは解決にならず質問の方させていただきました。 が、やはり初心者には難しいでしょうか?? ちなみに、調べていて「CGIで・・・」というものも多かったのですが、 検索ページがPHP+MySQLで作られているので、同じものでと考えています。 今使用しているものがPHP+MySQLなので、こちらでできればと思っております。 何卒宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPとMySQLについて

    PHPとMySQLについて PHP、MySQLともに初心者の者です。 ネットの情報を参考に以下のようなプログラムを作成しました。 <?php //ファイルを読み込み require_once("DB47.php"); // クエリを送信する $sql = "SELECT * FROM japanDB ORDER BY PREF_CD"; $result = executeQuery($sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //表示するデータを作成 if($rows){ while($row = mysql_fetch_array($result)) { $tempHtml .= "".$row["PREF_CD"]." ".$row["PREF_NAME"]." "; $tempHtml .= "\n"; } $msg = $rows."件のデータがあります。\n\n"; }else{ $msg = "データがありません。\n\n"; } //結果保持用メモリを開放する mysql_free_result($result); ?> <?= $msg ?> <?= $tempHtml ?> これはデータベースに 1、北海道 2、青森 ・  ・ ・  ・ ・  ・ 47、沖縄 といった情報を与えており、PHP側でMySQLに接続し、その内容をコマンドプロンプト上で表示するといったものです。 しかし、PHPプログラムを実行してしまうと、全データが一気に表示されてしまうので、見づらいものとなっています。 そこで、地名や番号を入力すれば、地名を表示するような検索機能を付けたいのですが、PHPからMySQLデータベース内を検索する方法が分かりません。検索機能をこのプログラムに組み込みたいのですが・・・。 どなたかご教授お願いいたします。 ***環境*** OS : Windows XP Pro PHP4.2.3 、MySQLインストール済み **********

    • ベストアンサー
    • PHP
  • phpでキーワード検索

    お世話になっております。 前回より少し変化があったので改めて質問させて頂きます。 前回のhttp://oshiete1.goo.ne.jp/qa3220932.htmlより <table border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="middle">&nbsp;</td> <td>キーワード</td> <td>&nbsp;</td> </tr> <tr> <td valign="middle">&nbsp;</td> <!-- フリーワード検索ここから --> <td> <input name="key" type="text" size="20" maxlength="30"> </td> <td><table border="0" cellspacing="0" cellpadding="0"> <tr> <!-- 送信ボタンここから --> <td><form name="form1" method="get" action="list.php"> <input type="image" src="image/serch_but.gif" alt="検索" value="検索" width="65" height="20" border="0"> </form></td> <?php $sql = "select Ui_id,Ui_name from Upindustry_table order by Ui_order"; $rs = mysql_query($sql); while($row=mysql_fetch_array($rs)) ?> <!-- 送信ボタンここまで --> </tr> </table></td> </tr> <!-- フリーワード検索ここまで --> </table> <input name="fn" type="hidden" id="fn" value="sr"></td> </tr> </table> このようにしました所、エラーは出なくなりましたが検索結果が0になります。 これは元々エリア検索と一緒についていたもので、キーワードのみ、もしくはエリアのみ、または両方で検索出来るというもので下。 これをキーワードのみにしたいのですが、エリア検索の記述を消すとうまく動いてくれません。 どうやらキーワードがうまく送信されていないようで検索結果が「list.php?x=20&y=7」のように座標で出て来てしまいます。 エリア検索が一緒についている状態で、検索をすると「list.php?munic=9999&area=0&key=%83z%83e%83%8B&upcat=9999&lowcat=0&x=38&y=10&fn=sr」 と出ます。 どのようにしたら良いか教えて下さい。 もしこの他に必要なソース等あれば提示致します。 宜しくお願い致します。

    • 締切済み
    • PHP
  • PHPからMySQLへの検索

    PHPからデータベースの検索について勉強をはじめたばかりで初歩的な質問かと思いますが過去ログを読んでも解決しなかったため質問いたします。 たとえばデータベースに教授名や授業名などを収納しておいてPHPで教授名を入力すると授業名等が表示されるようにするスクリプトを作ろうと思っているのですがうまくいきません。 少なくともMySQLで『田中』という教授名は入っているので検索すれば出てくるはずなのですが検索件数が0件になってしまいます。 テキストボックスに入力された情報を受け渡すところに原因がある気がするのですが原因はわかりませんでした。 おわかりになりましたらご教授ください http://iskiso3.hustle.ne.jp/test.php <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>テスト</title> </head> <form action="test.php" method="post"> 教授名を入力してください<br> <input type="text" name="namae" size="30"> <input type="submit" value="送信"> </form> <body> <?php $name = $_POST['namae']; $con = mysql_connect("mysql3.naid.jp" , "ID" , "PASS") or die ('DB Connection Error= '. mysql_error()); mysql_select_db("iskiso3", $con) or die ('DB Connection Error= '. mysql_error()); $sql = "select * from jugyou where kyouju like "*$name*" "; $result = mysql_query($sql,$con); if ( $result == $FALSE ) { die("Search Result: 0 items"); } $num = mysql_num_rows($result); print "<table><tr><td>科目名</td><td>教授名</td><td>内線</td></tr>"; for ($i=0; $i<$num; $i++) { $r = mysql_fetch_row($result); print "<tr><td>$r[0]</td><td>$r[1]</td><td>$r[2]</td></tr>"; } print "</table>"; ?> </body> </html>

    • ベストアンサー
    • MySQL
  • PHPの検索システムについてご教授下さい

    こんにちは。現在PHPで検索システムを実装しようとしておるのですが、どうしても条件絞り込みを行うことができず(全件表示されてしまう)困っております。PHP初心者で、無知なため先輩方ご教授頂けますと幸いです。PHPのソースは以下となります。 <?php $debug = fales; //DB接続 mysql_connect('db_host','db_user','db_pass') or die(mysql_error()); mysql_select_db('db_name') or die(mysql_error()); if($debug) print_r($_POST); //エラーチェック //リクエストメソッドチェック if($_SERVER["REQUEST_METHOD"] != "POST"){ // ブラウザからHTMLページを要求された場合 }else{ // フォームからPOSTによって要求された場合 } $query = "SELECT * FROM search "; if(!empty($name)) { $name = addslashes($name); $where = "name = '$name' "; } if(!empty($tel)) { $tel = addslashes($tel); $where .= "tel '$tel' "; } if(!empty($sex)) { $sex = addslashes($sex); $where .= "sex = '$sex' "; } if(!empty($where)) { $where = substr($where, 0, -4); $where = "WHERE" . $where; } $query .= '$where'; $result = mysql_query($query . implode(" AND ", $where)); $num_rows = mysql_num_rows($result); if($num_rows == 0) $message = "該当するデータはありませんでした"; else $message = $num_rows . "件ヒットしました"; ?> 検索結果<br> <?=$message?> <table border=1> <tr><td>名前</td><td>電話番号</td><td>性別</td></tr> <? while($row = mysql_fetch_assoc($result)): ?> <tr><td><?=$row['name']?></td><td><?=$row['tel']?></td><td><?=$row['sex']?></td></tr> <? endwhile; ?> </table> <a href="input.html">再検索</a> 現在データベースにはサンプルとして10件入れておりますが、どの条件で検索を行なっても10件全てが検索結果として表示されてしまいます。どこを触れば良いのでしょうか…? お忙しいところ大変恐れ入りますが何卒、よろしくお願い申し上げます。

    • 締切済み
    • PHP

専門家に質問してみよう