Это код PHP, который у меня есть, чтобы получить счет из моей базы данных:
$hostname = '****'; $username = '****'; $password = '****'; try { $dbh = new PDO("mysql:host=$hostname;dbname=firstdb", $username, $password); echo 'Connected to database<br />'; $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /*** some example variables ***/ $firstpara = 'age'; $secondpara = 'marital_status'; $thirdpara = 'gender'; $data = array($firstpara=>55, $secondpara=>'single', $thirdpara=>'male'); /*** prepare the SQL statement ***/ $stmt = $dbh->prepare("SELECT COUNT(guid) FROM full_db2 WHERE {$firstpara} = :{$firstpara} AND {$secondpara} = :{$secondpara} AND {$thirdpara} = :{$thirdpara}"); $stmt->execute($data); $count =$stmt->fetch(); echo json_encode($count); /*** close the database connection ***/ $dbh = null; } catch(PDOException $e) { echo $e->getMessage(); }
Это успешно дает мне JSON, содержащий количество пользователей в базе данных, которые имеют атрибуты, установленные в моих переменных выше ($ firstpara, $ secondpara, $ thirdpara).
Конечно, все это жестко закодировано, и я хочу, чтобы пользователь выбирал из ящиков, содержащих различные параметры атрибута (например, семейное положение, пол), и на основе этого давал им возможные варианты значений во втором выборе (например, один). Я генерирую эти окна выбора динамически без проблем и сохраняю выбор в качестве переменных. Я могу передать их в AJAX для отправки в файл PHP, но я понятия не имею, как разбирать их все вместе. Что-то вроде этого, чтобы отправить переменные. var para1 = "мужчина"; // это снято с выбранного значения // больше выбранных атрибутов
$.ajax({ url: 'all_get_2.php', type: 'GET', dataType: 'JSON', data: {firstpara: para1, secondpara: para2 ,thirdpara: para3}, success: function(data) { //do something } });
И в моем PHP я могу добавить такие строки, чтобы установить переменные:
$firstpara = isset($_GET['firstpara'])? "{$_GET['firstpara']}" : ''; $firstpara = mysql_real_escape_string($firstpara);
Проблема здесь в том, что я не знаю, сколько атрибутов (например, семейного состояния) пользователь может выбрать. Они могут использовать два или десять или какое-то другое число. Итак, мои вопросы таковы:
Как я могу отправить данные на PHP (безопасно … так что нет никаких инъекций), так что я могу динамически добавлять правильное число $firstpara
как переменные, для учета всего, что передавалось AJAX, включая добавление правильного числа предложений where в инструкция SQL?
Я предполагаю, что для каждого цикла или подобного типа должен быть какой-то тип, но я просто недостаточно знаком с PHP, чтобы знать, как это сделать.
Любое направление будет оценено по достоинству.
Я не уверен, правильно ли я получил вашу проблему, но вы можете попробовать (или прокомментировать, если я ошибаюсь).
Замените этот фрагмент:
$stmt = $dbh->prepare("SELECT COUNT(guid) FROM full_db2 WHERE {$firstpara} = :{$firstpara} AND {$secondpara} = :{$secondpara} AND {$thirdpara} = :{$thirdpara}"); $stmt->execute($data);
с этим:
$validKeys = array('gender','maritalstatus', 'age'); $sql = 'SELECT COUNT(guid) FROM full_db2'; $any_condition = false; foreach($_GET as $key=>$val) { if (!empty($val) && in_array($key,$validKeys)) { if ($any_condition) { $sql .= ' AND '.$key.' = :'.$key; } else { $sql .= ' WHERE '.$key.' = :'.$key; $any_condition = true; } } } $stmt = $dbh->prepare($sql); foreach($_GET as $key=>$val) { if (!empty($val) && in_array($key,$validKeys)) { $stmt ->bindValue(':'.$key, $val, PDO::PARAM_STR); } } $stmt->execute();
для вашего запроса ajax, просто прочитайте здесь: Отправить форму с помощью jQuery
в вашем формате изменения строки запроса ajax: data: {firstpara: para1, secondpara: para2 ,thirdpara: para3}
к data: {age: para1, maritalstatus: para2 ,gender: para3},