2016-06-14 14 views
3

私はいくつかのタイプのクエリビルダを作成しています。そして、そのクエリにANDステートメントを追加するボタンを実装したいと思います。私は1つのANDステートメントを実装したバージョンを作ったが、それはちょっと邪悪で、ユーザーに複数のANDステートメントを実行させたい。これは私が今のところ持っているコードです。ANDステートメントをクエリに追加するANDボタンを作成するにはどうすればよいですか?

UPDATEDこれは私の.phpファイルです:

<?php 

include "connect.php"; 

//Ophalen van de waarden uit de tabel(len) en veld(en) 
$table   = $_GET['tableSelected']; 
$field   = $_GET['fieldSelected']; 
$attribute  = $_GET['attributeSelected']; 
$operator  = $_GET['operatorSelected']; 
$fieldList  = $_GET['fieldList']; 

$fieldstr = $fieldList . ",ST_AsGeoJSON(ST_Transform(l.geom,4326))"; 

$sql = "SELECT $fieldstr 
     FROM $table l"; 

if (!empty($field) && !empty($operator) && !empty($attribute)) { 
    $sql .= " WHERE {$field} {$operator} '{$attribute}' AND {$field}"; 
}; 

//echo ($sql); 
?> 

そして、ここではそれがどのように見えるかの画像です: click here

答えて

1

いくつかのこと:

  • あなたをWHEREがなく、しかないため、最初のペアが空になると、現在のsqlは失敗します。 210条項。
  • htmlで配列を使うと、phpで配列を使うことができ、すべてをループして処理するほうがずっと簡単です。

簡単な例:

HTML:

<select name="field[]">...</select> 
<select name="operator[]">...</select> 
<select name="value[]">...</select> 

あなたは正確に同じコードの多くのペアを追加するためにJavaScriptを使用することができます。ちなみに

$sql = 'SELECT ...'; 

# this array will contain all "AND" conditions 
$pairs = []; 

# loop over all your select groups 
foreach ($_POST['field'] as $key => $field) { 
    if (!empty($field) && !empty($_POST['operator'][$key]) && !empty($_POST['value'][$key])) { 
     $pairs[] = $field . " " . $_POST['operator'][$key] . " '" . $_POST['value'][$key] . "'"; 
    } 
} 

# add the conditions 
if (count($pairs) > 0) { 
    $sql .= ' WHERE ' . implode(' AND ', $pairs); 
} 

# add sort order, execute sql, etc... 

、プレースホルダと値を交換し、データベース - 、テーブルのためのホワイトリストを使用する必要があります

は今、PHPであなたの$_POST変数はあなたのような何かを行うことができるように配列されます列名と演算子を使用してSQLインジェクション/クエリの破損を防ぎます。

+0

ありがとう、これは私が必要とするように見えます。しかし、これをjavascriptと組み合わせて使用​​する方法については、同じコードのペアをさらに追加する方法はありますか?@jeroen –

+0

@ L.fcgこのPHPパーツでは、「無制限」のペアが可能です。 JavaScriptを使ってhtmlを生成するには、ここで新しい質問をする必要があります。 – jeroen

+0

@ L.fcgところで、質問と回答は意味をなさないので、質問を元の状態に戻す必要があります。 – jeroen

関連する問題