0

不動産のウェブサイトを作ろうとしていますが、検索フォームに問題があります。

フォームには5つのフィールドがあります。price_to; number_rooms、locationおよびnumb_square_meters。データベースには、id、price、location、numb_square_meters、number_roomsの5つの列があります。

価格フィールドには、入力タイプフィールドを使用します。numb_roomsの場合、(vila、コンドミニアム、4ベッドルームアパートメント..そのようなものとALL OPTIONSオプション)などのオプションを含む選択タイプフィールドを使用します。locationとsquare_metersの場合は、numb_roomsの場合と同じです。

問題は、これが実際には複数あることです。

  1. フォームの[場所]フィールドで[すべてのオプション]オプションを選択すると、他のオプションの1つを取得しない場合でも、SQLDBからすべての場所を取得するようにします。

  2. ユーザーが価格フィールドに入力しても、他のフィールドは[すべてのオプション]オプションが選択されたままである場合、部屋の場所の数や平方メートルに関係なく、その価格範囲にある行のみを取得する必要があります。

これは私のコードの一部です...

 <form method="post" action="index.php" enctype="multipart/form-data">
 <input type="hidden" name="id">
 Price <input type="text" name="price">
 Price2 <input type="text" name="price2" />



 Square_meters<input type="text" name="Square_meters">

  Location<select name="Location">
 <option>All options</option>
 <option>Bucuresti</option>
 <option>Iasi</option>
 <option>Brasov</option>
 <option>Focsani</option>     
  </select>
    Numb_rooms<select name="Numb_rooms">
 <option>All options</option>
 <option>Garsoniera</option>
 <option>2 Camere</option>
 <option>3 Camere</option>
  <option>4 Camere</option>
 <option>Vila</option>     
 </select>
   <input type="submit" name="send" value="Search">
  </form>
<?php
 header("content-type: image.jpg");



  if(isset($_POST['send']))
  {
   require_once("conexiune.php"); (this is my conect to sql database script)
  $id = $_POST['id'];
  $price = $_POST['price'];
  $price2 = $_POST['price2'];
  $square_m = $_POST['Square_meters'];
  $location = $_POST['location'];
  $numb_rooms = $_POST['Numb_rooms'];
   $selectie = mysql_query("SELECT * FROM apartamente WHERE id = '$id' && Pret>='$price'&& Pret<='$price2' && Location = '$location' &&     Square_meters='$Square_meters' && Numb_rooms = '$Numb_rooms ' ");


  while($row = mysql_fetch_array($selectie,MYSQL_ASSOC))
      {

      print"<tr><td>"; 
      print $row['id']; 
      print"</td><td>"; 
      print $row['Pret'];
      print"</td><td>";
      print $row['Nr_camere'];
      print"</td><td>";
      print $row['Suprafata'];
      print"</td><td>";
      print $row['Locatie'];
      print"</td><td>";
      print $row['Descriere'];
      print"</td><td>";
4

1 に答える 1

1

SQLインジェクション攻撃の幅広い選択肢を残しているという事実を無視すると、次のようなことができます。

$selectie = mysql_query("SELECT * FROM apartamente WHERE id = '$id' 
       && Pret>='$price'&& Pret<='$price2'" . ($location == "ALL OPTIONS" ? "" : " 
       && Location = '$location'") . ($Square_meters == "ALL OPTIONS" ? "" : " 
       && Square_meters='$Square_meters'") . ($Numb_rooms == "ALL OPTIONS" ? "" : " 
       && Numb_rooms = '$Numb_rooms '"));
于 2012-09-07T20:33:04.010 に答える