私は検索するために私のウェブサイト上で高度な検索機能を作成しています。私は特定のアカウント(姓、名字、ユーザー名、登録日、アカウントのランク)を検索するために使用できる5つのフィールドを持っており、すべてのフィールドのオプションが一致しなければならないか、1つ以上のフィールドが一致しなければなりません。ユーザーが入力した値は、Javascriptを介してPHPファイルに送られます。 PHPファイルが検索を完了します。SQLの高度な検索/空のクエリを無視する
現在、「AND」検索は空白の値として動作しますが、他の値は一致する必要があるため、検索の結果には影響しません。しかし、 "OR"は、空の検索ボックスが "LIKE%"と一致するので、他のレコードを表示させません。$変数。変数がブランクのときに "%"検索。
私はシステムが空のボックスを無視する方法を理解する必要がありますが、私は間違った場所で "OR"が使用されているSQLコードでエラーを引き起こさずに動作する適切な方法を見つけるのに苦労しています。だから、どんな提案もいいだろう。これは、おそらくこれまで完璧からです事前に
おかげで、 トム
PHP
<?php
//Retrieves variables from Javascript.
$Surname = $_POST["Surname"];
$Forename = $_POST["Forename"];
$Username = $_POST["Username"];
$Joined = $_POST["Joined"];
$Rank = $_POST["Rank"];
$ANDOR = $_POST["ANDOR"];
$data = 0;
include "db/openlogindb.php";
if($DBError == true){
$data = 3;
}
else{
if($ANDOR == "AND"){
$UserSearch = "SELECT username, surname, forename, joined, rank FROM users
WHERE surname LIKE '%".$Surname."%'
AND forename LIKE '%".$Forename."%'
AND username LIKE '%".$Username."%'
AND joined LIKE '%".$Joined."%'
AND rank LIKE '%".$Rank."%'
ORDER BY surname";
}
else if($ANDOR == "OR"){
$UserSearch = "SELECT username, surname, forename, joined, rank FROM users
WHERE surname LIKE '%".$Surname."%'
OR forename LIKE '%".$Forename."%'
OR username LIKE '%".$Username."%'
OR joined LIKE '%".$Joined."%'
OR rank LIKE '%".$Rank."%'
ORDER BY surname";
}
else{
$data = 2;
}
if($data == 0){
$results = mysqli_query($conn, $UserSearch);
if(mysqli_num_rows($results) == 0){
$data = 1;
}
else{
$data = '';
while($row = mysqli_fetch_assoc($results)){
$data .= '<tr><td>'.$row['surname'].'</td><td>'.$row['forename'].'</td><td>'.$row['username'].'</td><td>'.$row['joined'].'</td><td>'.$row['rank'].'</td><td><button type="button" class="btn btn-block btn-primary btn-xs" onClick="ChangePassOpen(\''.$row['username'].'\')">Change Password</button></td></tr>';
}
}
}
}
include "db/closelogindb.php";
echo $data;
?>
HTML/Javascriptの http://thomas-smyth.co.uk/admin/accountlist.php
あなたは[SQLインジェクション](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)にかなり開いている... – Naruto
ご覧ください。 SQLセキュリティ文書。クエリの準備は、この種のエスケープされていないクエリよりはるかに安全です – Bobot
ええ、それは私のリストを行うことです。私はこれを解決した後、私はそれをソートします。私はSQLインジェクション保護をソートしてもこの問題を解決する必要があると考えています。 –