2017-01-31 11 views
0

MySqlデータベースに添付されたテキストボックスを持つページがあり、姓を使用している人々のレコードを検索するために使用されます。テキストボックスと2つのプルダウンを使用してPHPページのMySql結果を検索してフィルタリングする

ページをより便利にするために、2つのプルダウンメニューを追加しました。 1つのメニューは記念館の場所、もう1つは第一次世界大戦、第二次世界大戦などの紛争のためのものです。プルダウンメニューを検索結果のフィルタとして使用したいと思います。

プルダウンメニューとして、レコードの結果を与え、独立しても、テキストボックスを使用する必要があるとします:

  • 姓+記念
  • 姓+対立
  • 記念
  • メモリアル+コンフリクト
  • コンフリクト

フォームの私が持っているコードは次のとおりです。

<div class="memorialphp"> 
    <form action='./memorial.php' method='get'> 

     <!-- $surname or 'surname' --> 
     <input type='text' name='term' placeholder="Search..."> 

     <!-- $memorial or 'memorial' --> 
     <select name="memorialsearch"> 
      <option value=" ">All Memorials</option> 
      <option value="Hinckley War Memorial">Hinckley War Memorial</option> 
      <option value="Burbage War Memorial">Burbage War Memorial</option> 
      <option value="Barwell War Memorial">Barwell War Memorial</option> 
      <option value="Earl Shilton War Memorial">Earl Shilton War Memorial</option> 
     </select> 

     <!-- $conflictsort or 'conflictsort' --> 
     <select name="confictsearch"> 
      <option value="">All Conflicts</option> 
      <option value="1">World War I</option> 
      <option value="2">World War II</option> 
      <option value="3">20th Century Wars</option> 
     </select> 
    </form> 
</div> 

PHPのために私が持っているコードは次のとおりです。

<?php 
    if (!empty($_REQUEST['term'])) { 
     $term = mysql_real_escape_string($_REQUEST['term']);  
     $sql = "SELECT * FROM search WHERE surname LIKE '%".$term."%' ORDER BY surname, fullname, conflictsort"; 
     $r_query = mysql_query($sql); 

     if(mysql_num_rows($r_query)){ 
      while ($row = mysql_fetch_array($r_query)){ 
       $id = $row['id']; 
       $initial = $row['initial']; 
       $surname = $row['surname']; 
       $fullname = $row['fullname']; 
       $dob = $row['dob']; 
       $born = $row['born']; 
       $service = $row['service']; 
       $enlisteddate = $row['enlisteddate']; 
       $enlisted = $row['enlisted']; 
       $number = $row['number']; 
       $rank = $row['rank']; 
       $batt = $row['batt']; 
       $unit = $row['unit']; 
       $section = $row['section']; 
       $died = $row['died']; 
       $death = $row['death']; 
       $memorial = $row['memorial']; 
       $conflict = $row['conflict']; 
       $conflictsort = $row['conflictsort']; 
       $biography = $row['biography']; 
       $link = $row['link']; 

       echo"<h4>$surname</h4> 
       <b>Name:</b> $fullname - <b>Rank:</b> $rank ($number) - <b>Regiment:</b> $batt $unit $section 
       <br /><b>Birth:</b> $dob $born 
       <br /><b>Enlisted:</b> $service - $enlisteddate $enlisted 
       <br /><b>Died:</b> $died $death 
       <br /><b>Memorial:</b> Shown as $initial$surname at $memorial 
       <br /><b>Confilct:</b> $conflict 
       <br /><b><a href='$link'>$biography</a></b> 
       <br /><br /><br />"; 
      } 
     }else{ 
      echo "<br /><br /><br /><br /><br /><p><b>No records, please try again...</b></p>"; 
     } 
    } 
?> 

私は合計初心者ですのでご注意ください、理想的なソリューションでしょうコードを変更して、どのように変更されたのかを説明してください。

答えて

0

最初のもの:常にmysqliモジュールを使用してください。古いものではなく、今後は廃止予定ですmysql

これはmysqliを使用してデータベースへの接続をオープンする方法です:

$db=mysqli_connect($dbhost,$dbuser,$dbpassw,$dbname); 

[OK]を、今、私たちは、検索パーツの準備ができています。 私は$whereという変数を使用します。を保存する場所は、クエリのです。この節は、ユーザーの入力に応じて動的に作成されます。以下のような何か:

$where=''; 

if (!empty($_REQUEST['term'])) { 
    $term=$db->escape_string($_REQUEST['term']); 
    $where.=" AND surname LIKE '%$term%'"; 
} 
if (!empty($_REQUEST['memorialsearch'])) { 
    $memorial=$db->escape_string($_REQUEST['memorialsearch']); 
    $where.=" AND memorial='$memorial'"; 
} 
if (!empty($_REQUEST['conflictsearch'])) { 
    $conflict=$db->escape_string($_REQUEST['conflictsearch']); 
    $where.=" AND conflict='$conflict'"; 
} 

私はあなたのsearchテーブルの正確な構造を知らないので、あなたの実際のフィールド名と一致するように上記のコードを適応させる必要があります可能です。

このブロックの最後に、リクエストに検索フィールドがある場合、$whereは空になりません。また、空でない空の$whereは常に「AND」で始まることに注意してください。これにより、節を動的に作成するのが簡単になりますが、最初の条件である$whereを追加する必要があります。

は、これは私たちが進める方法です:

if ($where) { 
    $sql="SELECT * FROM search WHERE 1".$where; 
    $r_query = $db->query($sql); 

    // generate the output 
} 

クエリは常に真の条件である「1」に我々は$whereを追加し、文法的に正しいことができますしています。

出力部分はまだ問題ありません。

+0

私はmysqli_num_rows [コード] 場合($)維持する必要があります{ \t $のSQLが= $ここで、 "1検索SELECT * FROM" を@xzoertご協力いただきありがとうございます。 \t $ r_query = $ db-> query($ sql); \t \t \t \t (mysqli_num_rows($ r_query)){ \tながら($行= mysqli_fetch_array($ r_query)){ \t \t $番号= $行[ 'ID']であれば、 [/ code] – GrahamUK33

+0

メッセージが乱雑になって申し訳ありませんが、見た目にコードを並べることはできません。 – GrahamUK33

+0

はい、クエリの後のコードは、すでに持っているものと同じでなければなりません(mysql_xxxの代わりにmysqli_xxxを使用する場合を除く)。 – xzoert

関連する問題