0

MySQL データベースにクエリを実行して結果を表示するフォームを作成しました。ここで、結果をフィルタリングできるようにしたいと考えています。私は持っている:

<input type="checkbox" name="multi_cif[]" value="<?php echo $g1 ?>"><font size="1" face="Arial, Helvetica, sans-serif">

foreach を介してすべての結果を表示している出力では、変数 $g1 は MySQL クエリ値 (アドレス) です。結果の横にあるこれらのチェックボックスをクリックできるようにして、ユーザーが「フィルター」というラベルの付いたボタンをクリックすると、チェックされた結果のみが表示されるようにします。

これまでのところ、私のコードは次のとおりです。

<?PHP
if (isset($_POST['Submit2']))
{
$stmt = $dbh->prepare('SELECT * FROM CIF WHERE address LIKE ?');
$stmt->execute(array("%$_POST[multi_cif]%"));
//$stmt->execute(array(":term" => "%" . $_POST["multi_cif"] . "%"));
//$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
/*while ($results = $stmt->fetch())  //WILL UNCOMENT AND ADD OR LIKE AFTER SINGLE QUERY WORKING
{
    echo $results['address'];
    echo $results['alternativeid'];
}*/
print_r($_POST);
$results = $stmt->fetch();
echo $results['address'];
echo $results['alternativeid'];
}
?>

コメントアウトされたものは、私が試した他のものです。私は私の結果に非常に近いです。次のコードの結果は次のようになります。

 [multi_cif] => Array ( [0] => test.13ann.com [1] => testfortestltd444557.com.tw ) ) coralarray.ruhttp://mirror3.malwaredomains.com/files/domains.txt

そのため、multi[] に割り当てられた目的のアドレスではなく、明らかに「配列」が値として渡されています。誰かがこれがなぜなのか説明して、それを修正するのを手伝ってもらえますか? 私は昨日の時点で PDO を初めて使用しましたが、動的に構築するのではなく、それを使用して他のステートメントを再加工して、準備されたステートメントを実装することを選択しました。前もって感謝します!

編集済み: ブラッドのアドバイスをいくつか取り入れましたが、「OR アドレス LIKE ?」を追加せずにステートメントを保持しました。現在、チェックボックスを1つだけクリックしていますが、「test.13.ann.com」の代わりに「Array」を取得しています「Array」と値の理由を理解したら、追加のORを追加します-指摘してくれたBradに感謝します!

4

2 に答える 2

1

外側の配列ではなく、最初の配列値にアクセスしてみてください -

$stmt->execute(array("%{$_POST['multi_cif'][0]}%"));

動的に行うには、試すことができます

// create n number of placeholders based off number of $_POST['multi_cif']
$place_holders = implode(' OR', array_fill(0, count($_POST['multi_cif']), ' address LIKE ?'));

// create n number of values based off number of $_POST['multi_cif']
$values = '"%'. implode('%","%', $_POST['multi_cif']).'%"';
// explode the values into an array
$values = explode(',',$values);

$stmt = $dbh->prepare("SELECT * FROM CIF WHERE $place_holders");
$stmt->execute(array($values));
于 2013-07-19T18:18:20.593 に答える