Я уже смог построить запрос mySQL с помощью блоков выбора. Начиная с ajax для PHP, например.Построить mySQL-запрос из динамических полей выбора
HTML/JS (соответствующие части)
var call = true;
switch(parseInt($(this).val())) {
case 1:
cat_code ="ager";
sortv = "database_percent";
sorto = "asc";
break;
case 2:
cat_code ="ager";
sortv = "database_percent";
sorto = "desc";
break;
default:
cat_code ="ager";
sortv = "value";
sorto = "asc";
break;
}
if(call) {
$.ajax({
url: 'all_get_2.php',
type: 'GET',
dataType: 'JSON',
data: {cat_code: cat_code, sortvalue: sortv ,sortorder:sorto},
success: function(data) {
//stuff
}
})
PHP (соответствующие части ... просто пример)
$whereCategory = isset($_GET['cat_code'])? "{$_GET['cat_code']}" : '';
$sortvalue = isset($_GET['sortvalue'])? "{$_GET['sortvalue']}" : '';
$sortorder = isset($_GET['sortorder'])? "{$_GET['sortorder']}" : '';
$sql = "select count(guid) from full_db2 where '{$whereCategory}' = '{$sortvalue}'' and example = '{$sortorder};";
$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
header('Content-type: application/json');
echo json_encode($result);
Все хорошо. Я перепутал некоторые переменные на этой иллюстрации, но это не проблема. Это возвращает счетчик для атрибутов, выбранных пользователем из выбранных. Выборы динамически генерируются на основе того, что выбрал пользователь в предыдущем выборе.
Что делать, если бы я хотел, чтобы пользователи могли выбрать набор дополнительных атрибутов для добавления в запрос. Так, например, вместо того, чтобы найти счетчик для количества записей в базе данных (пользователей), возраст которых превышает 40, они могли бы добавить к этому больше, например, пользователи с возрастом старше 40 лет и состоящие в браке и имеющие детей.
Я рассмотрел в основном добавление опции для добавления другого набора полей выбора (например, нажмите «+» и появится новый набор), но я быстро понял, что не смог бы выяснить, сколько из них выбрано там и логичный способ создания запроса.
Каков наилучший способ разрешить пользователям выбирать (теоретически) неограниченное количество атрибутов для построения в одном запросе mySQL?
Примечание стороны. Вы слышали о ['SQL Injenction'] (http://php.net/manual/en/security.database.sql-injection.php)? –
@ PM77-1 К сожалению, да, и просто читал о них. Я совершенно новый с PHP, поэтому я до сих пор не совсем понял, как обновить (например) приведенный выше код, чтобы предотвратить это. Мы ценим любые предложения. – jonmrich
Вы не знаете, сколько элементов ... первое, что приходит в голову, это 'array'. Вы можете указать каждый флажок с тем же именем, используя флажок «name =» [] «. Таким образом вы отправляете список со значениями на сервер, а затем используете php для получения необходимых значений. В php вы можете использовать '$ data = $ _GET ['field_name'];' для получения массива со значениями. –