DreamweaverでPHP 検索ページ作成3

検索窓と検索結果を同じページに表示

今回は、データの検索窓と検索結果を同じページ内に配置する方法を書いていきたいと思います。

①まず、以前作成した検索用のページ(search.php)をコピーして、search_and_result.phpという名前のページを作成します。

②作成したページの検索窓テーブルの下にカーソルを移動して、一般タブのテーブルをクリックします。2行4列のテーブルを作成したら、1行目に項目名を記入します。

③サーバービヘイビアのレコードセットをクリックします。

④名前(任意)を決め、接続先とテーブルを選択します。フィルターを「Title」にし、検索条件を曖昧検索の「を含む」にします。比較方法を今回はフォーム変数にして、比較対象を「Title」にします。「OK」ボタンをクリックします。

⑤バインディングを開き、レコードセットの各項目を該当の箇所へドラッグします。

⑥タグセレクターの「form#form1」をクリックし、「プロパティインスペクタ」のアクションのファイル名を削除して、メソッドを「GET」にします。

③次に前回と同じようにレコードセットナビゲーションバーを挿入します。検索結果表示用テーブルの下にカーソルを移動し、データタブのレコードセットナビゲーションバーをクリックします。

④レコードセットを選択。表示方法を今回はイメージにしてみます。「OK」ボタンをクリックします。

⑤次にレコードセットナビゲーションステータスをクリックします。ダイアログボックスが表示されたら「OK」をクリックします。

⑥検索結果テーブルの2行目を選択し、サーバービヘイビアのリピート領域をクリックします。

⑦レコードセットを選択し、表示件数を入力(今回は5にします)。「OK」ボタンをクリックします。

⑧これで一応完成です。それでは、実際に試してみましょう。『愛』と入力して検索ボタンをクリックして、検索結果が表示されたらOKです。

⑨尚、前回は指摘しなかったのですが、この検索結果のページには重大な欠陥があります。検索窓に何も入力しないで、検索ボタンを押してみましょう。するとすべてのデータが表示されます。わざとそうしたいのなら別ですが、すべてのデータが表示されるというのは、まずいので多少の手直しをします。

NULL値検索の修正

①サーバービヘイビアのレコードセットをクリックして、レコードセットダイアログボックスが表示されたら、「詳細設定」をクリックします。

②SQL文を多少いじりますが、そんなに難しくはありませんので、覚えてください。

③3行目の『WHERE Title LIKE %colname%』のあとに『AND colname is not NULL』と入力して、『OK』をクリックします。

④これで、何も検索値を入力していないのに検索結果が返ってくることはなくなりました。只、値が何もないのに検索結果のテーブルが表示されるのは、見た目が悪いので、検索結果が何もないときは検索結果テーブルは表示されないようにしましょう。

⑤タグセレクターでテーブル全体を選択し、サーバービヘイビアの領域の表示→レコードセットが空でない場合に表示とクリックします。出てきたダイアログボックスのレコードセットを選択し、「OK」をクリックします。

これで、検索結果が空の場合はテーブルが表示されないようになります。以上、本日はここまでにします。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

トラックバック

コメント

  1. kazu より:

    はじめまして管理者 様
    こちらのHPとても参考にさせていただいております。
    とつぜんで申し訳ありませんが質問させてください。

    私は現在、同郷会の名簿を作成しているのですが

    DreamweaverでPHP 検索ページ作成3
    検索窓と検索結果を同じページに表示の
    ⑧で表示された結果の個人IDを選択できるようにし、選択(マウスクリック)した際、個人詳細ページを表示させたいのですが可能でしょうか?

    他のページを参考に設定してみたのですが、サーバービヘイビアエラーになってしまいます。
    もし可能であればどのように設定すればよいか教えてください
    お手数をおかけしますよろしくお願いいたします。

    • nakada より:

      kazu 様
      コメントありがとうございます。
      来週にでも詳細ページへの移動方法をサイトにてご紹介いたします。
      お楽しみに!!

  2. AKI より:

    はじめまして。
    DreamweaverでのPHP作成の参考書やWEBサイトが数少なく、いつも参考にさせて頂いております。

    質問なのですが、検索時に複数語句で区切って検索した場合、完全一致のみしか表示されないので、他の検索サイトの様に空白で区切って検索する方法はあるのでしょうか?
    もし可能であれば方法を教えてください。
    宜しくお願いします。

    • nakada より:

      AKI様
      コメントありがとうございます。
      ご質問の件ですが、直接PHPで記述した方が簡単なのですが、あえてDreamweaverのコードジェネレータ(自動生成されたPHP)を修正して複数語句の検索をするには、いくつかの行程が必要です。
      1.まず、ページの先頭部分あたりに下記のPHPコードを記述します。『keyw』は、POST送信する為のテキストフィールド名です(ご自身の状況に合わせて修正して下さい)。又、『preg_split(‘/』の後は必ず全角の空白を挿入して下さい。
      < ?php //POST送信されたら if(isset($_POST['keyw']{ //検索文字を空白(全角又は、半角)で区切って配列に代入 $keywords=preg_split('/ |\\s/',$_POST['keyw']); //配列の数だけ繰り返し foreach($keywords as $key=>$keyword){
      $keywords[$key]=’ title like “%’.$keyword.’%”‘;
      }
      //配列keywordsをANDで区切って$sqlに代入
      $sql=implode(‘AND’,$keywords);
      }
      ?>
      2. 中程にDreamweaverで自動生成されている
      $colname_keyw=”-1″; 以下を下記に変更します。
      $colname_keyw=”NULL”;
      if(isset($sql)){
      $colnama_keyw=$sql;
      }
      3. その2行下あたりに作成されている
      $query_keyw=sprintf(……); を下記に変更します。
      $query_keyw=sprintf(“SELECT * FROM DVD WHERE %s”,$colname_keyw);
      4. これで複合語検索が出来るはずです。上記のDVDはデータベースのテーブル名、titleはテーブルの中の検索対象フィールド名ですので、ご自身の状況に合わせて修正して下さい。
      5. 尚、上記のように修正すると、DreamweaverのPHPコード自動生成が適用されなくなり、Dreamweaverのバインディングからコピー&ペーストが出来なくなりますので、修正する前に元のファイルをコピーするなりして保存しておいて下さい。

      これからも宜しくお願いします。
      AdobeCS6が5月11日に発売されるそうですが、楽しみですね。
      発売されたら新しいDreamweaverの新機能などをこのサイトでご紹介したいと思います。

      • AKI より:

        管理人様

        とても分かりやすくご回答頂き、有難うございます。
        今後もこちらのサイトを利用させて頂きます。
        お体に気をつけて、いつまでも続けて下さい。


コメントをどうぞ

このページの先頭へ