phpとpostgresを利用した検索システムについて

このQ&Aのポイント
  • phpとpostgreSQLを使った検索システムの開発についてお困りのようです。
  • 具体的な実装方法や参考サイトの紹介、プログラムの実現方法についてのアドバイスを求めています。
  • また、要約文では、phpとpostgreSQLを使った検索システムの作成や問題の解決に関連するキーワードを含めることで、SEOを意識しています。
回答を見る
  • ベストアンサー

phpとpostgresを利用した検索システムについて

ご覧頂き有難う御座います。 ◆ 説明 ◆ phpを利用し、postgreSQLにデータを登録させるシステムを作成致しました。そこで、検索システムも作成したいと思い簡単な検索システムは作成出来たのですが、更に踏み込んだ検索をしようと思い実装に取り組んでおります。 ◆ DB構成 ◆ ユーザマスタ: ユーザ情報を格納(名前、ふりがな、etc) 種別マスタ : 問合せ種別を格納(0=問合せ、1=商品、2=求人、etc) データT : 時間や内容を格納(問合せ時間、内容、etc) ◆ システム構成 ◆ php、Apache : 最新版 postgres : 8.1.4 上記を踏まえての質問です。 例えば検索条件を種別(問合せ)とし検索を実行すると、テーブルを連結し、phpで結果を取得、表示を行います。 例) メアド |名前 |種別 |問合せ日時|内容 | a@a.com |テスト|問合せ|07/11/07…|書き込み| このように検索条件に沿った登録レコードを件数分表示されています。 ◆ 実装したい事 ◆ この「メアド欄」の左に「詳細ボタン」というものを付け、クリックすると別画面に検索条件に沿った全情報(メアドや名前だけではなく、フリガナや会社名、郵便番号等)を表示させたいのですが、どのように実現すれば良いのかが分かりません。 ◆ 今している事 ◆ とりあえず、検索条件で検索された値を表示させ、機能はしませんが詳細ボタンの表示をすることができました。次は、検索条件に沿ったデータが複数件存在したときに、複数行ある中で、その行(ボタン)が選択されたことが取得できれば、ボタン名か何かでレコードを取得できるのではないかと考えておりますが、そこで訳が分からなくなってしまいました。 複数件分の検索結果表示と詳細ボタンの表示は実装できました。また、詳細ボタンを押すと別窓を開く(JavaScript)なども実装していますが、しかし、どのように各当レコードを取得し、別窓に値を渡し、表示すればいいのかが分かりません。 どのようにすれば、思うようなプログラムを実装できるのか、参考サイトやサンプルサイトへの誘導、もちろんご指導して頂ける等のお力添えをお願い致します。

  • merus
  • お礼率100% (12/12)
  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

あまり難しく考えないように(笑。 詳細ボタンをクリックすると、別画面に詳細情報が表示される、と言うだけですよね。 ユーザID等は設定されているでしょうから、ユーザIDを別窓に渡します。 一番簡単に実装するとすればこんなリンクです。 <a href="hogehoge.php?id=ユーザID" target="_blank">詳細</a> hogehoge.phpは、GETで来たユーザIDを元に詳細情報を表示させます。概要はこんな感じですか。 <?php if(isset($_GET["id"])){ //データベース接続、 //ユーザIDで詳細情報取得 //$sql = "SELECT * FROM hogehoge WHERE id='".addslashes($_GET["id"])."'"; //取得した詳細情報を表示 } ?> これは別窓と言うよりtargetで新しいウィンドウですね。javascriptを使う場合はこんな感じでリンクを作れば良いと思います。 <a href="javascript:window.open('hogehoge.php?id=ユーザID', 'hogehoge', 'width=200,height=200');">詳細表示</a> 当然ながら、ユーザID部分はそれぞれ違うでしょうから、PHPから書き出して下さい。 例 foreach($arr as $data){ echo "<tr><td>{$data["name"]}</td><td>{$data["email"]}</td><td><a href=\"javascript:window.open('hogehoge.php?id={$data["id"]}', 'hogehoge', 'width=200,height=200');\">詳細</a></td></tr>"; }

merus
質問者

お礼

ご回答有難う御座います。 >詳細ボタンをクリックすると、別画面に詳細情報が表示される、と言うだけですよね。 まさにその通りです。 現在検証と実験を行っており、まだ、実現したわけではないので、良いお知らせをする事が出来ず、申し訳ありません。 これより本腰を入れて作成したいと思います! また、サンプルソースも記述して頂き、理解し易く、とても感謝しております。 アルゴリズムを含め、参考にさせて頂きます。

merus
質問者

補足

今、ようやく完成致しました。 <a href=\"javascript:window.open('hogehoge.php?id={$data["id"]}', 'hogehoge', 'width=200,height=200');\">詳細</a> この箇所ですが、javascript:void(window.open(…))というように変更すると、きちんと値を渡し、親ウィンドウを変更させることなく、別窓へ値を渡すことができました。 また、元々自分で作成したかった型でも作成できました。 ボタン方式 for ( $i=0; $i<$scount; $i++ ){ print <<<_EOH_ <tr> <td><font color='{$color}'>{$prn_div/*領域用*/}</font></td> <td>{$email}</td> <td>{$uname}</td> <td align='center'> <form action='./hogehoge.php' method='post' target='_blank'> <input type='hidden' id='email'(name='email') value='{$email}'> <input type='hidden' id=name(name='name') value='{$uname}'> <input type='submit' value='表示'> </form> </td> </tr> _EOH_; } 項目数とか細かいことは上記のプログラムではおかしいかも知れませんが、無事に動作致しました。 本当に有難う御座います!! お礼の後に補足にて失礼致しました。 以上を持ちまして質問を締め切らせて頂きます。

関連するQ&A

  • html+php+mysql検索画面構成について

    お世話になります。 htmlからphpを呼びmysql結果を表示したいのですが ファイル構成について教えてください。 イメージとしては、下のようなものが1ページに表示されます。 ---------------- ・検索条件入力域 ・検索ボタン ---------------- 検索結果表示域 ---------------- 1.検索結果には初回アクセス時に条件なしの結果が表示されます。 2.検索ボタンを押下すると、検索結果のみ再描画されます。 このような処理をしたいのですが、ファイル構成としてはどうすればよいでしょうか。 今考えているのは main.html ----------- 検索フォーム記載 -- (1) 検索.php呼び出し(初期表示 ----------- 検索.php --------- mysqlからデータ取得し出力 --------- です。 ここでイメージができないのですが 検索ボタン押下時に呼ぶファイルは別途作成する必要がありますか? 仮に検索.phpに渡すとしたら、検索.php内にmain.htmlの(1)を記載しなくては いけないのではと思ってます。 もっとスマートな構成があると思うので、熟練者の方ご教示お願いします。

    • ベストアンサー
    • HTML
  • PHPとMySQLでのシステム開発について

    現在PHPとMySQLである不動産システムを業務で開発しております。 ある程度の機能の実装は完了しているのですが、一点実装方法になやんでおります。 それが、不動産の新着物件の表示方法なのですが例えばなにかしら新規でDB上に物件データを登録して あるテーブル【estate_index_table】というテーブルのあるレコード上のupdate_timeというカラムを 4月1日( フォーマットここではおいておきます)とします。 そのレコードを例えば二週間後の4月15日にその新着という表記を消したいのです。 その場合の、一般的な実装方法をしりたいのです。 現在、私が考えているのが、update_timeというカラムと同じテーブルに【estate_new_flag】というカラムをつくり その新着フラグには1か2の論理値を格納するようにします。 フレムワークはFuelPHPを使用していますが、とりあえずビュー上でestate_new_flagが1の時は新着アイコンを表記、2の時は表記しない。 そして新着期間の2週間目に、任意のクライアントPCからその情報が閲覧できるURLにアクセスした際に、 そのレコードのupdate_timeを参照して、2週刊前ならestate_new_flagを2へとupdateする、そうでなければスルー という処理を行う、APIを作って叩かせるといった具合です。 そのestate_new_flagは一般的な管理画面から随時任意のタイミングで新着にするというボタンをつくり 新着にするという変更をレコードに行った場合、冒頭で述べた【estate_index_table】のupdate_timeを更新するというAPIを叩きます。 これが、現在私が考えている実装方法です。どうも、考え方がシステム初心者てきな感じがしてひっかかっているのです。 理想はMySQLだけで、cronタブみたく、任意のタイミングで自動で特定のレコードを変更するような処理がいい(やってみたい) のですが、一般的にこのような新着情報の上げ下げっていうのはどのように実装するのがベストなのでしょうか? 今回初めてDBから一人で設計してやっているので、後々になってただしい実装だったのかどうか悩むのは嫌なので どなたかベターな方法をお教えください。 よろしくお願いします。

    • 締切済み
    • PHP
  • PHPによる検索システムでの文字化けについて

    PHPによる検索システムでの文字化けについて 現在、ダウンロード販売によるシェアソフトを利用し、PHPによる検索システムを作成しています。 (掲示板のようなフォームから登録するとHTMLを自動生成し、そのHTMLから一覧を自動生成、検索が行える、といったシステムです。) このソフトは作成時の文字コードをShift_JIS又はEUC-JPにユーザーが自由に選択出来るようになっているのですが、困ったことにどちらを選択しても一部の文字が文字化けを起こしてしまいます。 (Shift_JISの場合に文字化けする語句と、EUC-JPの場合に文字化けする語句は違います。) 現在のところShift_JISで作成しています。 (検索システムを導入するサイトの他のページをShift_JISに統一しているためShift_JISにしました。) ファイル構造としましては、 <form>のactionで実行されるphpファイル 登録したデータが格納されているHTMLファイル 登録したデータを流し込んで表示するテンプレート(HTMLファイル) 登録画面のテンプレート(HTMLファイル) といった形で、HTMLファイルは全てformのaction属性によりPHPファイルを実行するようになっています。 色々と検索をして調べてみましたが、PHPを介している限り、文字化けを防止するのはPHPファイルを編集するしか方法はないのでしょうか。 というのも、PHPファイルは全て暗号化されており、こちらでは編集が出来ません。 HTMLファイルは自由に編集が可能です。 こちらでもJavaScriptのreplace関数を使った置換やformにaccept-charset属性を追加するなど、色々と試してみましたが、やはり上手く行きませんでした。 ソフト制作会社には問い合わせを入れているのですが、何度問い合わせを入れても「調査中です」といってかれこれ1ヶ月以上経ちますが、解決策は打ち出されておりません。 こちらの環境はWindowsXP、IE8です。 質問内容に不備などありましたら申し訳ありません。 もし何か方法をご存知の方がいらっしゃいましたら、ご教授頂けますでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPの検索について

    現在html、PHP、MySQLを使い検索システムの作成を行っているのですが、検索をしてMySQLより所得した結果何件表示されました、という感じにしたいです。 yahooでPHPで検索すると約11,440,000,000件みたいに。 やり方が分からなく何か参考になるサイトなどがありましたら教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでの検索機能がうまく動きません

    PHPでの検索機能が動かなくて困っています。 <form>で入力した値を、MySQLのWHEREで条件付けて取り出したいのですがうまくいきません....。 最終的に、 1、formに検索ワードを入力 2、DBから条件にあったレコードを持ってくる 3、持ってきた値を表示 という機能にしたいのですが....。 --- --- --- --- --- --- --- --- --- --- --- --- <?php //データベースに接続 mysql_connect('xxx', 'xxx', 'xxx') or die(mysql_error()); mysql_select_db('xxx'); mysql_query('SET NAMES UTF8'); //フォームで送られてきた条件を元にSELECT文を作成 if (!empty($_POST['nm'])) { $q = $_POST['nm']; $sql = 'select * from test_tb where name like "%$q%"'; $record = mysql_query($sql) or die(mysql_error()); } ?> <html> <body> <form action="" method="post">    名前:<input type="text" name="nm">    <input type="submit" name="exec" value="検索"> </form> <?php while($row = mysql_fetch_assoc($record)): ?> <?php echo $row['id']; ?> <?php echo $row['name']; ?> <?php endwhile ?> </body> </html> --- --- --- --- --- --- --- --- --- --- --- --- エラーは表示されないのですが、結果も表示されません。 さまざまなサイトや他の方の質問、MySQLやPHPの本を参考にしたのですが うまくいかなかったのでご質問させていただきました。 プログラミング初心者の上、はじめての質問で不備があると思いますが、 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPで検索ボタンを押さずに検索結果を返したい

    初めて質問させていただきます。 今、独学でPHP・MySQL・HTMLを使って、 検索結果を表示する画面を作っています。 作っているプログラムは、こんな感じです。 ================================================ xxx.php ================================================ <?php ここで、入力のエラーチェック MySQLに接続 入力したコードに対応するデータを取得 ?> <html> <form action="xxx.php" method="post"> <input type="text"> <select name="XX1"></select> <select name="XX2"></select> <input type="submit" name="submit" value="検索"> </html> ================================================ このプログラムでは、テキストタイプの部分にコードを 入力し、selectの部分で各項目を選択して、 最後に検索ボタンを押すと、 エラーチェックをした後に、検索結果のデータを データベースから取得してHTMLで表示します。 毎回、検索ボタンを押すという動作を減らすため、 SELECTの部分が変わったら、 検索ボタンを押さなくても、上のPHPで記述されて いる部分の処理に飛ばす方法がないかなあと 思いまして質問しました。 イメージ的にはJavaScriptの、onchangeみたいなものなのですが、何かいい方法は ないでしょうか? 以前似たような質問があったかもしれませんが、 すみませんがよろしくお願いいたします。

    • ベストアンサー
    • CSS
  • phpでsqlを利用した検索結果表示画面について

    phpで検索結果画面の制作を勉強中です。 pdoでmysqlデータベースに接続しています。 検索フォームに入力されたテキストデータを条件に tableA内をあいまい検索をして 必要項目columnA、columnB、columnCを取得し、 htmlのテーブルの<td></td>に それぞれ$row['columnA']、$row['columnB']、$row['columnC']を入れ、 while($row = $stmt->fetch(PDO::FETCH_ASSOC)で繰り返すことで テーブル一行ごとに取得できたデータを1つ記載して結果として表示するプログラムを書き、うまく稼働させることができました。 問題は、今度はtableB内で、tableAで取得したcolumnAとtableBのcolumnDの値が同じという条件のもと、 該当レコードのcolumnE、columnFを取得して、 検索結果のテーブルに、tableAの取得データと同じ行で データを表示させたいという点です。 単純に、上記のうまく稼動したテーブル内の <td></td>内に $stmtb=$db->prepare('SELECT columnE,columnF FROM tableB WHERE columnD :columnA'); $stmtb->bindValue(':columnA',$row['columnA'],PDO::PARAM_STR); $stmtb->execute(); $row_b = $stmtb->fetch(PDO::FETCH_ASSOC); print htmlspecialchars($row_b['columnD']); というプログラムを記述しましたが、 テーブル上にデータが表示されませんでした。 どのようにしたら同一テーブル行内で別テーブルの該当データを表示することができるのでしょうか? イメージが伝わりづらいかと思いますので以下、テーブルとカラムに名称を付けて、 表示したいテーブルのイメージとデータベーステーブルのイメージの画像を添付します。 添付画像の 顧客No.・顧客名・住所のデータが顧客情報用のテーブルに格納されていて 顧客No.・購入品・購入日のデータが購入品ログ用のテーブルに格納されている 状態で、 顧客No.と照合した購入品ログ用テーブル内の購入品のデータと購入日のデータを 添付画像のように、同じテーブルの行で表示をさせたいです。 ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 検索システムについて

    はじめまして。最近PHPの勉強を始めてプログラムを組んでいるのですが、検索システムを作る際、自分のDB内にあるファイルの単語を検索し表示するためにはどういった風に書けばいいのでしょうか。 何をここに最初に書いていればいいかわからないので聞かれてわかることは極力答えます。よければアドバイスをお願いします。

    • 締切済み
    • PHP
  • 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
  • PHP&MYSQLでの検索システムについて

    PHP&MYSQLでチェックボックスを使用した絞込み検索システムを制作しようと思っています。 検索機能の内容は □居酒屋□レストラン□美容室 のチェックボックスに複数また、いずれかにチェックをして該当されたお店の写真(一枚)と説明文を1ページ20店舗ずつ表示したい思っています。 現在、MYSQLにデータベース、テーブルをつくりそれをチェックボックス用のHTMLとデータ取得用のPHPでMYSQLに接続、データを読み出すことはまでは出来たのですがチェックボックスで絞込みが出来ない状態で作業がとまっています。どなたかにご教授お願いしたいと思い質問させていただきました。よろしくお願い致します。 また、画像はどこに格納しておくのが良い方法なのでしょうか? ソースは select.html <body> <form name="form" action="search.php" method="post"> <input name="key[1]" value="居酒屋" type="checkbox" />居酒屋<br> <input name="key[2]" value="レストラン" type="checkbox" />レストラン<br> <input name="key[3]" value="美容室" type="checkbox" />美容室<br> <p><input value="検索開始" type="submit" /></p> </form> </body> search.php <?php $link = mysql_connect('localhost', 'root', 'pass'); if (!$link) { die('接続失敗です。'.mysql_error()); } $db_selected = mysql_select_db('mysqltest', $link); if (!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } if($debug) print_r($HTTP_POST_VARS); //クエリ生成 $query = "SELECT id,name,state FROM personal_info "; mysql_set_charset('utf8'); //検索条件生成 //名前 if(!empty($name)) { $value = addslashes($value); $where = "value = '$value' && "; } if(!empty($where)) { $where = substr($where, 0, -4); $where = "WHERE " . $where; } $query .= $where; if($debug) { print "<BR><BR>"; print $query; } $result = mysql_query($query); $num_rows = mysql_num_rows($result); if($num_rows == 0) $message = "該当するデータはありませんでした"; else $message = $num_rows . "件ヒットしました"; ?> 検索結果<br> <?=$message?> <table border=0> <? while($row = mysql_fetch_assoc($result)): ?> <tr><td><?=$row[name]?></td></tr> <? endwhile; ?> </table> <a href="select.html">再検索</a> 環境 XAMPP 1.3.0.1 PHP 5.2.9.9 MYSQL 5.1 また、この検索システムに関する書籍やサイトがありましたら教えて頂けたらうれしいです。

専門家に質問してみよう