Выберите данные в зависимости от выпадающего и таблицы

0

Некоторое время царапаю мне голову, но, надеюсь, кто-то может вести меня:

У меня есть таблица (стандарты) в моей базе данных, которая имеет разные внешние ключи (Grade, Subject, Branch). С пользовательской стороны пользователь может ввести ключевое слово и может дополнительно фильтровать на основе класса (1-го-12-го), предмета (математика, английский, наука) или ветки (зависит от выбора объекта). Эта дополнительная фильтрация - проблема, с которой я сталкиваюсь. Каков рекомендуемый подход для выбора данных из данных на основе сделанных выборов?

Вот что я имею, когда они не выбирают для фильтрации данных:

function generalResult($keyword, $connection){

$sql = "SELECT standards_eng.Standard FROM standards_eng  WHERE standards_eng LIKE '%".$keyword."%' ";

$query = $connection->query($sql);

if ($query->num_rows > 0) {
    while ($row = $query->fetch_assoc()) {                     
    echo '<p>' .$row['Standard']. '</p>';
    }
 }
}

Единственное решение, которое я мог придумать, - это инструкции If/else, но этого было бы слишком много, чтобы считать. Например:

if(Grade!== "" AND SUBJECT == "" AND BRANCH =="") {
//Selects data where Standard is like keyword AND Grade_ID is equal to value selected

} Else if (Grade!== "" AND SUBJECT !== "" AND BRANCH == "") {
//Selects data where Standard is like keyword Grade_ID and Subject is equal to value selected

}Else if{
...
}Else if{...}
  • 0
    ВНИМАНИЕ : При использовании mysqli вы должны использовать параметризованные запросы и bind_param для добавления пользовательских данных в ваш запрос. НЕ используйте интерполяцию или конкатенацию строк для достижения этой цели, поскольку вы создали серьезную ошибку внедрения SQL . НИКОГДА не помещайте $_POST , $_GET или любые пользовательские данные непосредственно в запрос, это может быть очень вредно, если кто-то попытается использовать вашу ошибку.
Теги:

1 ответ

0

Я не совсем уверен, чего вы хотите, но если я прав, вы хотите, чтобы дополнительные фильтры были пустыми?

Что бы я сделал, это создать фильтр и добавить/объединить эту строку, если нужен дополнительный фильтр. см. ниже для примера.

$filter="WHERE standards_eng LIKE '%".keyword."%'";

if(Grade!==""){
     $filter."AND Grade="value here";
}
if(SUBJECT!==""){
    $filter."AND SUBJECT="value here";
}
if(BRANCH!==""){
    $filter."AND BRACH="value here";
}



$sql = "SELECT standards_eng.Standard FROM standards_eng".$filter;
  • 0
    Это хорошая идея. Я не думал об этом. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню