2013-05-08 2 views
0

Мне нужно сделать сайт с автомобилем, который фильтрует автомобили в зависимости от предустановленной базы данных mysql. У меня есть фильтр, если все выбрано (например: Honda, белый, бензин, а не на специальном - это покажет этот автомобиль), но если бы я просто хотел увидеть, что все Honda (например) ничего не показывает.Фильтрация, если выбран только один фильтр

Это код, у меня есть:

if(isset($_GET['make']) || isset($_GET['colour']) || isset($_GET['fueltype']) ||   isset($_GET['special'])){ 

if(isset($_GET['make'])){ 
$make = $_GET['make']; 
} 

if(isset($_GET['colour'])){ 
$colour = $_GET['colour']; 
} 

if(isset($_GET['fueltype'])){ 
$fueltype = $_GET['fueltype']; 
} 

if(isset($_GET['special'])){ 
$special = $_GET['special']; 
} 

$result = mysqli_query($con,"SELECT * FROM Cars WHERE MAKE ='$make' AND COLOUR = '$colour' AND FUELTYPE = '$fueltype' AND SPECIAL = '$special'"); 
} 



else{ 
$result = mysqli_query($con,"SELECT * FROM Cars"); 
} 

ПОСТАНОВКА еще делает все автомобили появляются при открытии страницы перед фильтрацией.

+2

** Примечание: ** Существует высокая вероятность [SQL-инъекций] (HTTP : //en.wikipedia.org/wiki/SQL_injection). – BlitZ

ответ

0

escape может означать: mysql_escape_string, проверять список допустимых/допустимых значений или все, что вы хотите после хорошего мышления.

$where = ""; 
$separator = " WHERE "; 

if(isset($_GET['make'])){ 
    $make = $_GET['make']; 
    !! escape here 
    $where .= $separator . " MAKE = '$make' "; 
    $separator = " AND "; 
} 

if(isset($_GET['colour'])){ 
    $colour = $_GET['colour']; 
    !! escape here 
    $where .= $separator . " COLOUR = '$colour' "; 
    $separator = " AND "; 
} 

... 

$result = mysqli_query($con,"SELECT * FROM Cars " . $where); 
0

Вот как вы можете это сделать. Пожалуйста, сделайте что-нибудь для SQL-инъекций. Это только пример.

$query = "SELECT * FROM Cars "; 
$where = array(); 

if(isset($_GET['make'])){ 
    $where['make'] = $_GET['make']; 
} 

if(isset($_GET['colour'])){ 
    $where['colour'] = $_GET['colour']; 
} 

if(isset($_GET['fueltype'])){ 
    $where['fueltype'] = $_GET['fueltype']; 
} 

if(isset($_GET['special'])){ 
    $where['special'] = $_GET['special']; 
} 

$string = ''; 
if(count($where)>0){ 
    $i=0; 
    foreach($where as $key => $value) 
    { 
     if($i==0){ 
      $string .= " WHERE $key = $value "; 
     }else{ 
      $string .= " AND $key = $value "; 
     } 
    $i++; 
    } 
} 
$query .= $string; 

mysqli_query($query); 
+0

Добавьте http://www.php.net/manual/en/mysqli.real-escape-string.php, и это лучшее решение. – Adder

+0

Что такое атаки на SQL-инъекции? его единственный проект колледжа, который он не будет жить в Интернете, должен ли я все-таки что-то с этим сделать, и если да, то как? – user2136106

+0

@ user2136106 см. [Это] (http://www.zdnet.com/sql-injection-attack-what-is-it-and-how-to-prevent-it-7000000881/) и [это] (http: //www.acunetix.com/websitesecurity/sql-injection/). Хотя это может быть проект коллажа, но вы должны научиться предотвращать инъекцию sql. Также в проекте коллажа применение безопасности будет для вас плюсом. –

0
if(isset($_GET['make']) || isset($_GET['colour']) || isset($_GET['fueltype']) ||   isset($_GET['special'])){ 
$where="WHERE "; 
if(isset($_GET['make'])){ 
$make = $_GET['make']; 
$where .="MAKE ='$make' AND"; 
} 

if(isset($_GET['colour'])){ 
$colour = $_GET['colour']; 
$where .="COLOUR = '$colour' AND"; 
} 

if(isset($_GET['fueltype'])){ 
$fueltype = $_GET['fueltype']; 
$where .="FUELTYPE = '$fueltype' AND"; 
} 

if(isset($_GET['special'])){ 
$special = $_GET['special']; 
$where .="SPECIAL = '$special"; 
} 
$where=rtrim($where,'AND'); 

$result = mysqli_query($con,"SELECT * FROM Cars".$where); 
} 



else{ 
$result = mysqli_query($con,"SELECT * FROM Cars"); 
} 
0

Игнорирование вопросов безопасности вы можете заменить весь свой код что-то вроде этого:

$query = "SELECT * FROM Cars WHERE 1 = 1"; 

if (isset($_GET['make'])) 
    $query .= ' AND MAKE = ' . (int) $_GET['make']; 

if (isset($_GET['colour'])) 
    $query .= ' AND COLOUR = ' . (int) $_GET['colour']; 

if (isset($_GET['fueltype'])) 
    $query .= ' AND FUELTYPE = ' . (int) $_GET['fueltype']; 

if (isset($_GET['special'])) 
    $query .= ' AND SPECIAL = ' . (int) $_GET['special']; 

$result = mysqli_query($con, $query); 
+0

Почему ваши утверждения if не имеют {}? как мне добавить сюда еще что-нибудь? извините, если это глупый вопрос, это все ново для меня – user2136106

+0

, если операторы 'if' не имеют скобок, следующая инструкция будет выполняться, только если условие истинно. Вы можете добавить еще сразу после инструкции, а правила о скобках такие же, как указано выше. В любом случае это плохая практика, и вы всегда должны использовать скобки –

Смежные вопросы