0

複数のチェックボックスを持つ html フォームがあります。それらをphpに渡します...

値は、たとえば「G,BW」のようになります (「BW,G」も一致する必要があります)。check.php では、$_GET から値を取得し、SQL クエリ用に変更する必要があります...

<?php
if(!empty($_GET['wireColor'])) {
    foreach($_GET['wireColor'] as $colors) {
    echo $colors; //make sure it's right, then comment out
    }
}

$colors = rtrim($colors, ','); //Get rid of trailing , - not working right

$wireSearch = '\'REGEXP \'.*(^|,).$wireColor.(,|$)\''; //Trying to add the sql bits to pass to the query.

理想的には、これを渡すには:

$colors_lookup_sql = "SELECT * FROM parts WHERE ( wire_colors REGEXP '.*(^|,)$wireSearch(,|$)' and wire_colors REGEXP '.*(^|,)$wireSearch(,|$)' );";

クエリの最後は次のようになります。

SELECT * FROM parts WHERE ( wire_colors REGEXP '.*(^|,)G(,|$)' and wire_colors REGEXP '.*(^|,)BW(,|$)' );

正規表現ビットをクエリに入れるのに苦労しています。

アップデート

これが私が今持っているものです:

<?php
if(!empty($_GET['wireColor'])) {
    foreach($_GET['wireColor'] as $colors) {
        $wireSearch = ' REGEXP \'.*(^|,)' .$colors.'(,|$)\' AND ';
    }
}

$Search = rtrim($wireSearch, 'AND'); //Trying to trim the last "AND"
$colors_lookup_sql = "SELECT * FROM parts WHERE ( wire_colors $wireSearch% );";

これにより、ほとんど必要なものが得られますが、結果を印刷/エコーすると、次のようになります。

$wireSearch は次のようになります:REGEXP '.*(^|,)G(,|$)' AND REGEXP '.*(^|,)BW(,|$)' ANDこれは素晴らしいことです - 最後の "AND" を削除する必要があるだけです。ただし、上記のトリムでは、代わりに 2 番目の値に置き換えられます。変。

$colors_lookup_sql は次のようになります。SELECT * FROM parts WHERE ( wire_colors REGEXP '.*(^|,)BW(,|$)' AND % );

しかし、何らかの理由で配列の最初の値が消えてしまいました。これは、SQL ステートメントの前に存在していたのでわかりません。

4

3 に答える 3

0

私はあなたのデータがどのように保存されているかを完全に理解しているとは言えません。

$wireSearch = explode(",", $_GET['wireColor']);
$query = "SELECT * FROM parts WHERE wire_colors LIKE '%$wireSearch[0]%' 
         AND wire_colors LIKE '%$wireSearch[1]%'";

これが役立つかどうかはわかりませんが、idがアイデアを投入すると思いました.

于 2013-07-03T07:16:24.953 に答える