私はユーザがgender
とage
に基づいて任意のユーザを見つけることを可能にするフォームを持っています。たとえば、ユーザは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)){
?しかし、フィールド名とロジックは私にとってはうまく感じられるので、わかりません。