複数のチェックボックスを持つ 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 ステートメントの前に存在していたのでわかりません。