2016-04-17 25 views
0

私はユーザがgenderageに基づいて任意のユーザを見つけることを可能にするフォームを持っています。たとえば、ユーザはgenderだけで検索し、性別が検索されたものであるランダムなユーザを見つけることができます。ここでフィルタ実行時のクエリが正しくありません - クエリが実行されていません

は、上記目的を達成するために私のアプローチです:

$refined_gender = (htmlentities (strip_tags(@$_POST['gender'])) != 'any' ? htmlentities (strip_tags(@$_POST['gender'])) : '%'); 
$age_from  = (htmlentities (strip_tags(@$_POST['age_from'])) != 'none' ? htmlentities (strip_tags(@$_POST['age_from'])) : '17'); 
$age_to   = (htmlentities (strip_tags(@$_POST['age_to'])) != 'none' ? htmlentities (strip_tags(@$_POST['age_to'])) : '50'); 

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

if (isset($_POST['submit_form'])){ 

    $sql = "SELECT * FROM users WHERE 
       gender like ? AND 
       age BETWEEN ? AND ? AND 
       username != ? AND 
       account_type != 'admin' 
      ORDER BY RAND() 
      LIMIT 1"; 
    $defined_chat = mysqli_prepare ($connect, $sql); 
    mysqli_stmt_bind_param($defined_chat, "ssss",$refined_gender,$age_from,$age_to,$username); 
    mysqli_stmt_execute ($defined_chat); 

    while ($get_user = mysqli_fetch_assoc($defined_chat)){ 
     $rand_name = $get_user['username']; 
     header ("Location: /messages.php?u=$rand_name"); 
    } // while closed 
    echo "No user found fitting those requirements."; 
    mysqli_stmt_close($defined_chat); 

    echo $sql; 
} 

:私は性別と年齢の両方の上の任意の選択なしでも検索できるようにする(1つのフィルタを使用することができ、検索が動作するはずです)、私はワイルドカード%、PHPのような演算子と三項演算子の組み合わせを使用しています(私もgender = ?を試しました - しかし同じ問題です)。

しかし、検索はうまくいかなかったため、echo $sqlになりました。私は男性ユーザーを検索し、検索をクリックした場合、$sqlエコーは以下です:

SELECT * FROM users WHERE gender like ? AND age BETWEEN ? AND ? AND username != ? AND account_type != 'admin' ORDER BY RAND() LIMIT 1 

同じアイデアは年齢のために適用されます。私はなぜ理解しないでもない変数がクエリに渡されていることを意味

SELECT * FROM users WHERE gender = ? AND age BETWEEN ? AND ? AND username != ? AND account_type != 'admin' ORDER BY RAND() LIMIT 1 

、:30、$sqlエコーのこの - 私は26歳の間に誰かを探している場合。検索するとき

また、私は、この行にmysqli_fetch_assoc() expects parameter 1 to be mysqli_resultエラーを取得することに留意すべきである:

クエリで間違っている彼らのかもしれ何かを示し
while ($get_user = mysqli_fetch_assoc($defined_chat)){ 

?しかし、フィールド名とロジックは私にとってはうまく感じられるので、わかりません。

答えて

0

準備済み明細書にはこの小さな問題があります。あなたは実際に(この時点で)調整可能なクエリーをそれらと一緒に行うのは簡単ではありません。これは、あなたが実行中にエラーが発生し得ることを意味

SELECT * FROM users WHERE gender = AND age BETWEEN 26 AND 30 AND account_type != 'admin' ORDER BY RAND() LIMIT 1 

SELECT * FROM users WHERE gender = ? AND age BETWEEN ? AND ? AND account_type != 'admin' ORDER BY RAND() LIMIT 1 

が、実際、それはのようなものが含まれています。だから何が起こって終わることは、あなたが作成し、ように見えるあなたの文を準備しています。あなたがそれを捕まえなければ、出力されず、私はそのように推測される警告です。しかしそれがあなたが今までに得ることができる理由です。

私は決定されたため、これは私のプロジェクトの1つで回りました。私はこれを行うために多くのif != ""セットをやったし、醜い醜いコードです。しかし、それは動作します。

if($gender != ""){ 
    array_push($selectParams,"gender = ?"); 
    $bindString .= "s"; 
} 

$where = join(" AND ", $selectParams); 

これは基本的にどのように周りを回ったのですか、あなたのニーズに合わせて変更する必要があります。再び...超醜いとおそらくスーパーエラーになりやすい。これはそれを行う方法ですが、私はそれが本当に行われなければならないと確信していません。

関連する問題