Форма SQL-Statement в зависимости от скомпилированных полей ввода [duplicate]

2017 ответ: теперь вы можете делать то, что хотите, в каждом текущем браузере и узле

. Это довольно просто:

  • Вернуть обещание
  • Используйте 'await' , в котором JavaScript ожидает, что обещание будет разрешено в vlue (например, hTTP-ответ)
  • Добавьте 'async' для родительской функции

Вот рабочая версия вашего кода:

(async function(){

var response = await superagent.get('...')
console.log(response)

})()

ожидание поддерживается во всех текущих браузерах и узлах 8 [/ д2]

2
задан jayburg 7 March 2015 в 01:25
поделиться

2 ответа

Создайте предложение WHERE динамически. Мой рекомендуемый подход состоит в том, чтобы подтолкнуть каждое условие к массиву, а затем использовать implode(), чтобы объединить все условия, соединяя их с AND или OR в соответствии с вашими предпочтениями.

$wheres = array();
$params = array();
if (!empty($_GET['id'])) {
    $wheres[] = 'a.uid = :uid';
    $params[':uid'] = $_GET['id'];
}
if (!empty($_GET['major'])) {
    $wheres[] = 'a.major = :major';
    $params[':major'] = $_GET['major'];
}
if (!empty($_GET['name'])) {
    $wheres[] = 'b.name LIKE :name';
    $params[':name'] = '%'.$_GET['name'].'%';
}
// And so on for all parameters

$sql = "SELECT * 
        FROM user_details AS a
        JOIN user AS b ON a.uid = b.id";
if (!empty($wheres)) {
    $sql .= " WHERE " . implode(' AND ', $wheres);
}
$stmt = $db->prepare($sql);
$stmt->execute($params);

Затем отображать результаты как в вашем исходном коде.

while ($student = $stmt->fetch()) {
    ...
}
8
ответ дан Barmar 24 August 2018 в 15:51
поделиться

Если вы не собираетесь что-либо менять в базе данных - вы просто выбираете - продолжайте использовать GET вместо POST. Преимущество этого заключается в том, что он позволит вам сохранить URL в качестве строки поиска. Вы также можете обновить поиск, не получая сообщение о повторной отправке сообщения. Вы просто хотите убедиться, что вы параметризуете свои значения перед отправкой их в базу данных. Обычно я отправляю эти значения через функции sanitize, такие как регулярное выражение, которое гарантирует, что у вас есть буквы, если вы ожидаете буквы, или цифры, если вы ожидали числа.

На той же странице (весь поиск):

<form action="<?= $_SERVER["REQUEST_URI"]; ?>" method="GET">
    <input name="major" value="<?= $_GET["major"]; ?>" />
    <select name="college">
        <option value="1" <?PHP if( $_GET["college"] == 1 ) echo 'selected="true"'; ?>>Business</option>
    </select>
</form>

<?PHP
if( ! empty( $_GET ) ){
    if (isset($_GET['major'])) {
       $wheres[] = 'a.major = :major';
       $params[':major'] = $_GET['major'];
    }
    if (isset($_GET['name'])) {
       $wheres[] = 'b.name LIKE :name';
       $params[':name'] = '%'.$_GET['name'].'%';
    }
    // And so on for all parameters

    $sql = "SELECT * 
        FROM user_details AS a
        JOIN user AS b ON a.uid = b.id";
    if (!empty($wheres)) {
        $sql .= " WHERE " . implode(' AND ', $wheres);
    }
    $stmt = $db->prepare($sql);
    $stmt->execute($params);
}
?>

Теперь вы можете отображать свои данные.

edit: Я написал другую половину ответа, а затем он написал вторую половину, поэтому я просто включил его ...

. Кроме того, следующий уровень сложности в этом заключается в том, чтобы вывести PHP из файла поиска и поместить его в другой файл. Когда вы нажимаете кнопку поиска в своей форме, вы должны использовать AJAX для вызова элементов PHP. Затем файл PHP вернет результаты через Ajax. Вы можете вернуть либо предварительно отформатированный HTML, либо JSON, и пусть что-то вроде JQuery отобразит его для вас.

2
ответ дан phpmeh 24 August 2018 в 15:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: