ЗАДАЧА: поиск чего-то в БД.
основная идея следующая:
На главной странички-php созадём форму для ввода значений:
*вот это onkeypress="if(event.keyCode == 13) return false - не реагировать на нажатие ENTER
при нажатии на кнопку клавиатуры выполняется функция showHintAdress (над введёным в этой форме значениями)
основное тут это:
var url="gethintstreetnumber-split.php?qstr="+arr[0]+"&qnum="+arr[1] ; xhttp.open("GET", url, true);
эта строчка передаёт два параметра указаный php файл.
дальше главное - это принять эти параметры:
$sql = "SELECT cubic_house_id, адреса FROM
(SELECT cubic_house_id, cubic_street||', '||cubic_house as адреса, array_to_string(regexp_matches(cubic_house,'^[0-9]+'),',')::integer as sort FROM ".$selectedCity.".".$selectedCity."_cubic_buildings
WHERE cubic_nettype NOT LIKE 'Off_net%'
AND lower(replace(cubic_street,'''','')) like $1
AND lower(cubic_house) like $2 “
$stmt = pg_prepare($conn, "my_query", $sql); // вот этот prepare помогает запустить sql-запрос cо знаком ? -для mysql $1 -для postres.
*stmtname имя создаваемой заготовки. Должно быть уникальным в пределах сессии
$q1 = $_REQUEST["qstr"]; // этот q приходит сюда с главной
$q2 = $_REQUEST["qnum"]; // этот q приходит сюда с главной
$q1 = mb_strtolower($q1,'UTF-8');
$q2 = mb_strtolower($q2,'UTF-8');
$stmt=pg_execute($conn, "my_query", array($q1."%",$q2."%", "%".$q3."%")); // эта сцепка $q1."%" - это решение как использовать like внутри sql-запроса
дальше запускаем pg_fetch_array для всех строк
$arr = pg_fetch_array($stmt, NULL, PGSQL_ASSOC); //pg_fetch_array по умолчанию возвращает и числовые индексы и ассоциацию
//PGSQL_ASSOC - возвращает только асоциацию
if( is_array($arr) ==FALSE ){echo "
Подключеных домов нет
";}
else {
echo '
' ;
echo "";
echo "
";
foreach ($arr as $key => $value)
{
echo "
".$key."
";
}echo "
";
echo "";//это заголовок для таблицы
//ДАЛЬШЕ ЛАЖА: Последующий вызов функции pg_fetch_row() возвратит следующую запись в результирующем наборе
//поєтому НУЖНО сбросить счётчик на ноль:
$seek=pg_result_seek($stmt,0); //это помогло
echo'';
while ($arr = pg_fetch_array($stmt, NULL, PGSQL_ASSOC)) {
echo "
ЗАДАЧА: поиск чего-то в БД. основная идея следующая: На главной странички-php созадём форму для ввода значений:
*вот это onkeypress="if(event.keyCode == 13) return false - не реагировать на нажатие ENTER при нажатии на кнопку клавиатуры выполняется функция showHintAdress (над введёным в этой форме значениями)
основное тут это: var url="gethintstreetnumber-split.php?qstr="+arr[0]+"&qnum="+arr[1] ; xhttp.open("GET", url, true);
эта строчка передаёт два параметра указаный php файл. дальше главное - это принять эти параметры:
$sql = "SELECT cubic_house_id, адреса FROM (SELECT cubic_house_id, cubic_street||', '||cubic_house as адреса, array_to_string(regexp_matches(cubic_house,'^[0-9]+'),',')::integer as sort FROM ".$selectedCity.".".$selectedCity."_cubic_buildings WHERE cubic_nettype NOT LIKE 'Off_net%'
AND lower(replace(cubic_street,'''','')) like $1 AND lower(cubic_house) like $2 “
$stmt = pg_prepare($conn, "my_query", $sql); // вот этот prepare помогает запустить sql-запрос cо знаком ? -для mysql $1 -для postres.
*stmtname имя создаваемой заготовки. Должно быть уникальным в пределах сессии
$q1 = $_REQUEST["qstr"]; // этот q приходит сюда с главной $q2 = $_REQUEST["qnum"]; // этот q приходит сюда с главной $q1 = mb_strtolower($q1,'UTF-8'); $q2 = mb_strtolower($q2,'UTF-8'); $stmt=pg_execute($conn, "my_query", array($q1."%",$q2."%", "%".$q3."%")); // эта сцепка $q1."%" - это решение как использовать like внутри sql-запроса
дальше запускаем pg_fetch_array для всех строк $arr = pg_fetch_array($stmt, NULL, PGSQL_ASSOC); //pg_fetch_array по умолчанию возвращает и числовые индексы и ассоциацию //PGSQL_ASSOC - возвращает только асоциацию if( is_array($arr) ==FALSE ){echo "
Подключеных домов нет
";} else { echo '}
hint_street.zip