4

まず第一に、私はこれに対する解決策を見つけるために狂ったように探し求めてきましたが、今のところ運がありません。私の問題は次のとおりです。

数十行のMySQLデータベースがあり、データを表示するためにjQueryグリッドを作成しました。このページはすでに機能しています。要件に従って、チェックボックスからいくつかのオプションを選択して結果をフィルタリングできるページをまとめています。これがどのように機能するかです:

ページ1には3つのチェックボックスグループ(名前、場所、言語)があり、各セットには異なるオプション([名前:David、Nickなど]、[場所:ニューヨーク、ワシントン、ムンバイ、ロンドン、マイアミ]、[言語:英語、スペイン語]。ユーザーがオプションを選択すると、次のようなフォームが送信されます

grid.php?location = Washington&location = Mumbai&language = English&name = David

文字列の作成は簡単ですが、このパラメーターを受け取り、配列に配置してSQLステートメントを作成するレシーバーは、私が苦労しているところです。

私はこのようなもので試しました:

$location= $_GET['location'];
$language= $_GET['language'];
$name= $_GET['name'];

if($location!=""){
    $where[] = 'location=';
    $where_args[] = $location;
}
//same code for the other 2 options

$where_clause = implode(' OR ', $where_args);

$sql_json = "SELECT * FROM myTable WHERE $where_clause ORDER BY id DESC";

どのオプションも必須ではないため、クエリは値が設定されている場合とされていない場合がある可能性を受け入れる必要があるため、最終的にはgrid.php?language=Englishのようになります。

上記のコードがうまく機能しないことは知っていますが、誰かが私を正しい方向に向けてくれれば幸いです。

4

2 に答える 2

5

これを試して:

<?php
$location= $_GET['location'];
$language= $_GET['language'];
$name= $_GET['name'];

if($location!=""){
    $where[] = " `location` = '".mysql_real_escape_string($location)."'";
}
if($language!=""){
    $where[] = " `language` = '".mysql_real_escape_string($language)."'";
}
if($name!=""){
    $where[] = " `name` = '".mysql_real_escape_string($name)."'";
}
$where_clause = implode(' OR ', $where);
//same code for the other 2 options

$sql_json = "SELECT * FROM myTable WHERE $where_clause ORDER BY id DESC";
?>
于 2013-02-07T21:47:03.327 に答える
2

いつでも $_GET を反復処理して、値でキーを取得できます。

foreach ($_GET as $key=>$val) {
   if ($val != "") {
      $where_args[] = "$key='$val'";
  }
} 
$where_clause = implode(' OR ', $where_args);

ただし、おそらく上記の例よりも優れた検証を行う必要があり、特定の値のチェックを実行する必要がある場合は、select/case ステートメントを追加できます...

于 2013-02-07T21:48:15.433 に答える