0

私は何時間もこれに取り組んできましたが、わずかなブレークスルーが得られましたが、現時点では立ち止まっています. メーカー、モデル、年などの車両情報を格納する SQL データベースがあります。私がやりたいことは、ユーザーがクエリを変更して特定の結果のみを表示できるようにすることです。

すべてのレコードを一度に表示する方法は理解していますが、追加したいのは、たとえばメーカーを「トヨタ」としてユーザーが選択したときに、その特定のメーカーのみを表示したいということです。このコードを使用して、このどこかに到達しました。

<form method="post" action=""> 
 <div id="search_query" >
     Make 
    <select name="make" size="0">
    <option value="honda">Honda</option>
  <option value="toyota">Toyota</option>
  <option value="nissan">Nissan</option>
    </select>

     <input type="submit" name="submit" value="submit">

 </div>
 </form>     

<?php

    $db_con = mysql_connect('localhost', 'root', '');

    if (!$db_con) {
        die('Could not connect: ' . mysql_error());
    }

    mysql_select_db('my_db', $db_con);

    $make = mysql_real_escape_string($_POST['make']);

    $sql = sprintf("SELECT * FROM chjadb_vehicles WHERE v_make= '$make' ");


    $result = mysql_query($sql);


    echo "<table width= 970 border=1>
         <tr>
           <th width='120' scope='col'>Image</th>
           <th width='170' scope='col'>Details</th>
           <th width='185' scope='col'>Seller</th>
           <th width='126' scope='col'>Price</th>
         </tr>";
    while($row = mysql_fetch_array($result))
      { 
         echo "<tr>";
           echo "<td> <img src=" .$row['v_image']. " width =200 height = 130>" . "</td>";
           echo "<td>". $row['v_year'] . "&nbsp;" . $row['v_make'] . "&nbsp;". $row['v_model'] . "&nbsp;". $row['b_type']. "</td>";
           echo "<td>". $row['user_id'] ."</td>";
           echo "<td>". $row['v_price'] ."</td>";
         echo "</tr>";
      }
       echo "</table>";

     mysql_close($db_con);
    ?>

ただし、最初にページを実行すると、次のエラーが表示されます。

いくつかの調査を行ったところ、値が設定されていないためにこれが発生していることに気付きました。ここでやりたいことは、すべての車両を表示したいページに移動する開始時です。

4

2 に答える 2

0

問題は、ユーザーがメーカーを選択する前にクエリが送信されていることです。if(isset($_POST['submit']))これを修正するには、ユーザーが実際にフォームを送信したことを確認する必要があります(「送信」はname送信ボタンであるため、PHP コードを囲みます)。

//place connection code here (do not query the database yet)

if(isset($_POST['submit']))
{
   //all of the database retrieval code
}
else
{
  $query_makes = "SELECT v_make FROM chjadb_vehicles";
  $result_makes = mysqli_query($query_makes);
  echo "Please choose a make."
  //echo opening select tag
  while($row = mysql_fetch_array($result_makes))
  {
     //echo each option tag
  }
  //echo ending select tag
}

また、自己完結型の入力タグにスラッシュがありません。最後に、MySQL 関数は PHP では推奨されていないため、 MySQLi 関数を使用する必要があります。

于 2012-07-09T14:30:23.900 に答える
0
  1. ページが初めて読み込まれるときに、次のクエリを実行する必要があります。

    SELECT * FROM chjadb_vehicles
    
  2. ユーザーが送信ボタンをクリックして make フィールドを投稿したかどうかを確認する必要があります。これを行うには isset() を使用します。

    if (isset($_POST['make']){
        $make = mysql_real_escape_string($_POST['make']);
    }
    
  3. jqueryajaxを使用することを強くお勧めします

編集:

ページを初めてロードすると、すべての車両が表示されます。

JavaScript で onSelect イベントをドロップダウンにバインドし、ユーザーが make を選択すると、サーバーに ajax リクエストを送信し、サーバーからの新しい結果を表示するので、次のようになります。

$('#search_query select').change(function(){
//get the selected option text
var selectedVal = $(this).find('option:selected').text();

//send ajax request
$.ajax( {
url : url,
type : "POST",
data : selectedVal ,
dataType : 'json',
success : function(data) {//handle returned data}
})

});

jquery の完全なビデオ チュートリアルについては、こちらをご覧になることをお勧めします。

于 2012-07-09T14:32:49.750 に答える