0

フォームに複数のPOSTデータフィールドがあり、mysqlデータベースにクエリを実行したいのですが、1つのPOSTデータフィールドだけを入力するとすべてが機能しますが、2つ以上のフィールドがある場合は、質問の間にANDを入力する必要があるためエラーが発生します。

$sql ="SELECT * FROM  `medlem` WHERE";

if(!empty($_POST[fnamn])){
    $a=mysql_real_escape_string($_POST['fnamn']);
    $sql .= " `Fornamn` LIKE '%$a%'";
}
if(!empty($_POST[enamn])){
    $a=mysql_real_escape_string($_POST['enamn']);
    $sql .= " `Efternamn` LIKE '%$a%'";
}
if(!empty($_POST[adress])){
    $a=mysql_real_escape_string($_POST['adress']);
    $sql .= " `adress` LIKE '%$a%'";
}
if(!empty($_POST[postnr])){
    $a=mysql_real_escape_string($_POST['postnr']);
    $sql .= " `postnr` LIKE '%$a%'";
}
if(!empty($_POST[stad])){
    $a=mysql_real_escape_string($_POST['stad']);
    $sql .= " `stad` LIKE '%$a%'";
}
if(!empty($_POST[pnr])){
    $a=mysql_real_escape_string($_POST['pnr']);
    $sql .= " `pnr` LIKE '%$a%'";
}
if(!empty($_POST[tfn])){
    $a=mysql_real_escape_string($_POST['tfn']);
    $sql .= " `tfn` LIKE '%$a%'";
}
if(!empty($_POST[mobil])){
    $a=mysql_real_escape_string($_POST['mobil']);
    $sql .= " `mobil` LIKE '%$a%'";
}
if(!empty($_POST[epost])){
    $a=mysql_real_escape_string($_POST['epost']);
    $sql .= " `epost` LIKE '%$a%'";
}

ユーザーが2つの投稿フィールドに入力した場合、SQLは「SELECT * FROM medlemWHERE Fornamn LIKE'bar LIKE 'foo' Efternamn'」を取得し、それらの間にANDがありません。この問題の簡単な解決策はありますか?

アーラシュ

4

2 に答える 2

2

止まる!

Stack Overflowへようこそ!新しいコードで関数を使用しないでくださいmysql_*。それらはもはや維持されておらず、非推奨プロセスが開始されています。赤いボックスが表示されますか?代わりにプリペアドステートメントについて学び、 PDOまたはMySQLiを使用してください-この記事はどちらを決定するのに役立ちます。PDOを選択した場合は、ここに優れたチュートリアルがあります。


これが表示される理由は、またはなしでクエリを作成しているためORですAND。(論理ステートメントを分離するために必要なもの)。

最善の解決策は、すべてのクエリパーツを配列に追加し、区切り文字が。で内包することです" AND "

于 2012-11-16T18:00:40.117 に答える
2

あなたはそれを周期的に行うことができます

$params = array(
    'fnamn' => 'Fornamn',
    'enamn' => 'Efternamn',
    'adress' => 'adress',
    'postnr' => 'postnr',
    'stad' => 'stad',
    'pnr' => 'pnr',
    'tfn' => 'tfn',
    'mobil' => 'mobil',
    'epost' => 'epost'
);
$condition = array();
foreach ($params as $key => $field) {
    if (isset($_POST[$key]) && !empty($_POST[$key])) {
        $a = mysql_real_escape_string($_POST[$key]);
        $condition[] = "`{$field}` LIKE '%{$a}%'";
    }
}

$slq = 'select * from `medlem` where '.implode(' and ', $condition);
于 2012-11-16T18:06:52.393 に答える