1

私はphpとsqlが初めてなので、ご容赦ください。検索してみましたが、探しているものがまったく見つかりませんでした。あなたが私を助けてくれることを願っています。だからここに行きます!

値を持つ一定数のドロップダウン メニューがあります。すべてのオプションを選択し、すべての値に対してSQLクエリを実行するselect allオプションを含めるのが好きです。if 条件を使用してクエリを実行するサンプル コードを作成しましたが、if 条件の数はドロップ ダウン メニューの数に基づいて指数関数的に増加します。2^n 私は推測しています。これを行うためのより良い方法があるかどうかを知りたかったのです。以下のコードを見つけてください。

$sql = mysql_query("SELECT distinct `Num. of Parts` from `$verb`");
echo "<select name='filter1'>";
echo "<option value='1'> Select all </option>";
while($row = mysql_fetch_assoc($sql))
{
$filter1 = $row['Num. of Parts'];
echo "<option value='$filter1'> $filter1 </option>";
}
echo "</select>";
$sql = mysql_query("SELECT distinct `Type of positioning` from `$verb`");
echo "<select name='filter2'>";
echo "<option value='1'> Select all </option>";
while($row = mysql_fetch_assoc($sql))
{
$filter2 = $row['Type of positioning'];
echo "<option value='$filter2'> $filter2 </option>";
}
echo "</select>";
echo "<input type=\"submit\" name=\"submitC\" value=\"SUBMIT\">";

submitC 値はここに渡されます。

if($filter1==1 && $filter2!=1)
{$sql = mysql_query("SELECT * from `$verb` where `Num. of Parts` like '%' and `Type of positioning`='$filter2' and `Distance range`='$dist'");
}
elseif($filter1!=1 && $filter2==1)
{$sql = mysql_query("SELECT * from `$verb` where `Num. of Parts`='$filter1' and `Type of positioning` like '%' and `Distance range`='$dist'");
}
elseif($filter1==1 && $filter2==1)
{$sql = mysql_query("SELECT * from `$verb` where `Num. of Parts` like '%' and `Type of positioning` like '%' and `Distance range`='$dist'");
}
else
{
$sql = mysql_query("SELECT * from `$verb` where `Num. of Parts`='$filter1' and `Type of positioning`='$filter2' and `Distance range`='$dist'");
}

よろしくお願いします!ps EXCLUDE $dist

4

3 に答える 3

1

複数のオプションを選択できますname='filter1[]'

これらは次の方法で保存できます$filter1= serialize($_POST['filter1']) ;

于 2012-10-09T17:23:00.427 に答える
0

このようにしてみてください

if($filter1==1) {  if(&& $filter2!=1){
$sql = "SELECT * from `$verb` where `Num. of Parts` like '%' and `Type of positioning`='$filter2' and `Distance range`='$dist'"; }
elseif($filter2==1){$sql = "SELECT * from `$verb` where `Num. of Parts` like '%' and `Type of positioning` like '%' and `Distance range`='$dist'";  }  }

elseif($filter1!=1 && $filter2==1) { 
$sql = "SELECT * from `$verb` where `Num. of Parts`='$filter1' and `Type of positioning` like '%' and `Distance range`='$dist'";  }

else{
$sql = "SELECT * from `$verb` where `Num. of Parts`='$filter1' and `Type of positioning`='$filter2' and `Distance range`='$dist'";  }

$result = mysql_query($sql);
于 2012-10-09T17:32:30.337 に答える
0

私があなたを正しければ、あなたはこのようなものを探しています:

<?php

$mapping = array ( 'column1' => 'Num_of_Parts' , 
      'column2' => 'Type_of_positioning'
);  
    $sql = "select * from table ";
    $connector = " AND ";
    if ( isset($_POST['filters']) ) {
        $sql = $sql . "where ";
        foreach ($_POST['filters'] as $key=>$val) {
            $sql .= $mapping[$key] ." like '%"  . $val. "%'" . $connector ; 
        }

    }//end of if
    $sql.= " Distance range = 'value'";
    var_dump($sql);


?>


<html>
<body>

<form action="" method="post">
<select name = "filters[column1]">
  <option value="">Select All</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>

<select name = "filters[column2]">
  <option value="">Select All</option>
  <option value="saab">Car</option>
  <option value="mercedes">Bus</option>
  <option value="audi">Cycle</option>
</select>

<input type="submit" value="submit">
</form>

</body>
</html>

ノート

  1. mysqli_real_escape_stringなどを使用してユーザー入力を常にサニタイズしますが、 php doc では使用しないことが推奨されているため、mysql ファミリー関数は使用しないでください。
  2. セキュリティ上の理由から、要素の名前として列名を使用しないでください。簡単なトリックを使用して列名を再マップする方法をコードで確認できます。

ハッピーコーディング:)

于 2012-10-09T18:02:18.250 に答える