2016-04-06 22 views
0

私は連想配列の形でデータを送信するために次のhtmlファイルを持っています。フォームは、Jquery Ajax(送信ボタン不要)を使用して動的に送信されます。チェックボックスから配列の値を取得し、コンテンツを選択するクエリを動的に作成する

<html> 
<form id="checkboxform" method="GET"> 
<input type="checkbox" name="navi[key1]" value="value1" <?php echo array_key_exists("value1",$navi)?"checked":""; ?>> Item1 
<input type="checkbox" name="navi[key2]" value="value2" <?php echo array_key_exists("value2",$navi)?"checked":""; ?>> Item2 
<input type="checkbox" name="navi[key3]" value="value3" <?php echo array_key_exists("value3",$navi)?"checked":""; ?>> Item3 
</form> 
</html> 

次に、フォームを処理し、Mysqlデータベースからデータを選択するための次のPHPファイルがあります。クエリは、ユーザーがチェックする入力フィールドに応じて動的に生成されます。

<?php 

    if(isset($_GET['navi'])): 

     $navi=$_GET['navi']; 

     //foreach 

     foreach($navi as $key =>$value): 
       $query=$key."="."'".$value."'"; 
     endforeach; 

     // run the query using PDO 

     $content = $db->getRows("SELECT * FROM products WHERE $query"); 

    endif; 
    ?> 

私の質問は、「$クエリ」変数は、ユーザーが複数のチェックボックスを選択したことを提供した後、「OR」を追加するにはどうすればよい、以下の通りです。 Whickは次のようなクエリが生成されます。私のコード

SELECT * FROM products WHERE key1='value1' OR key2='value2' OR key3='value3' 

ORせずに次のクエリを生成し、その正しいません。

SELECT * FROM products WHERE key1='value1' key2='value2' key3='value3' 

あなたはこれを試すことができ、あなたに

答えて

1

に感謝 -

$query = array(); 
    foreach($navi as $key =>$value): 
      $query[] = $key."="."'".$value."'"; // store in array 
    endforeach; 

    // run the query using PDO 

    $content = $db->getRows("SELECT * FROM products WHERE " . implode(' OR ', $query)); // implode with OR 
0

私はこのようなpreparebindValueを使用する注入を防止するために、前の回答のコードから(私はそれを試していないが、あなたはそのアイデアを得ることができます):

$query = array(); 
    $params = array(); 
    foreach ($navi as $key =>$value): 
      // store in array 
      $query[] = $key . '=' . ':' . $key; 
      // store values to bind them 
      $params[':' . $key] = $value; 
    endforeach; 

    // run the query using PDO 
    $query = $db->prepare('SELECT * FROM products WHERE ' . implode(' OR ', $query)); 

    // bind params 
    foreach ($params as $key => $value) : 
     $query->bindValue($key, $value); 
    endforeach; 

    // get rows 
    $query->execute(); 
    $content = $query->fetchAll(); 
+0

私は同意しますそれ。 – Angie

関連する問題