Очень-очень прошу помочь. Принимаются любые предположения и гипотезы/Помогаю знакомым делать проект. Суть такова:
По заполненным полям формы на странице делается выборка в бд и достаются результаты.
Скрипт исполняется тут же на странице. По submit'у методом POST на странице вызывается функция fetchFlats(), возвращающая массив значений из базы.
Возникла проблема - форму не удается проверить на заполненность - текстовые инпуты оказываются заполненными пустыми строками при каждом вызове функции. То есть в поля еще ничего не введено, но массив с данными приходит. Дополнительный Header проблему не решил.
Подскажите, пожалуйста, как избавиться от этих пустых строк.
Очень-очень срочно нужно. Спасибо заранее
index.php, где и происходит действие:
<?php
//Подключение библиотек
require "inc/db.inc.php";
require "inc/lib.inc.php";
//header('Content-Type:text/html;charset=utf-8');
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>База</title>
</head>
<body>
<div>
<fieldset legend="Укажите парпаметры выбора">
<form action="" method="post">
<select name="city">
<option selected disabled>Выберите город</option>
<?
$cities = selectCity();
foreach ($cities as $city) {?>
<option value="<?=$city['ID_City']?>"><?=$city['Name']?></option>
<?}?>
</select>
<select name="metro">
<option selected disabled>Выберите метро</option>
<?
$metros = selectMetro();
foreach ($metros as $metro) {?>
<option value="<?=$metro['ID_Metro']?>"><?=$metro['Name']?></option>
<?}?>
</select>
<label for="area">
Общая площадь
<input type="number" name="area_from" min="30" max="150"/>
<input type="number" name="area_to" min="30" max="150"/>
</label>
<label for="price">
Цена
<input type="number" name="price_from"/>
<input type="number" name="price_to"/>
</label>
<button type="submit">Показать варианты</button>
</form>
</fieldset>
<table border="1" cellpadding="5" cellspacing="0" width="100%">
<tr>
<?
if(empty($_POST) ){
echo 'Введите данные для поиска!';
} else {
$flats = fetchFlats();
echo "<pre>";
var_dump($flats);
print_r($_POST);
echo "</pre>";
echo count($_POST);
}
?>
</tr>
</table>
</div>
</body>
</html>
Функция fetchFlats в подключаемом файле lib.inc.php: (чтобы хоть не совсем говнокод был)
function fetchFlats() {
global $link;
$where = '';
if(isset($_POST['city'])){
if (count($_POST) >= 1) {
$where .= 'rc.id_city = '.$_POST['city'].' ';
} else {
$where .= 'rc.id_city = '.$_POST['city'];
}
}
if(isset($_POST['metro'])){
if (count($_POST) >= 1) {
$where .= 'AND rc.id_metro = '.$_POST['metro'].' ';
} else {
$where .= 'rc.id_metro = '.$_POST['metro'];
}
}
if(isset($_POST['area_from']) && isset($_POST['area_to'])){
if (count($_POST) >= 1) {
$where .= 'AND f.total_area >= '.$_POST['area_from'].' AND f.total_area <= '.$_POST['area_to'].' ';
} else {
$where .= 'f.total_area >= '.$_POST['area_from'].' AND f.total_area <= '.$_POST['area_to'];
}
}
if(isset($_POST['price_from']) && isset($_POST['price_to'])){
if (count($_POST) >= 1) {
$where .= 'AND f.cost >= '.$_POST['price_from'].' AND f.cost <= '.$_POST['price_to'].' ';
} else {
$where .= 'f.cost >= '.$_POST['price_from'].' AND f.cost <= '.$_POST['price_to'];
}
}
$sql = "SELECT *
FROM flat f
INNER JOIN building b ON f.id_building = b.id_building
INNER JOIN residential_complex rc ON b.id_residential_complex = rc.id_residential_complex WHERE ".$where;
if (!$result = mysqli_query($link,$sql)) {
echo $where;
} else {
$items = mysqli_fetch_all($result, MYSQLI_ASSOC);
mysqli_free_result($result);
return $items;
}
}
После исполнения кода распечатываю $_POST:
Array
(
[area_from] =>
[area_to] =>
[price_from] =>
[price_to] =>
)
var_dump
дает понять что на месте значений закралась пустая строка, соответственно, $_POST никогда не бывает пуст. Я уже весь мозг сломал, думая, как это побороть. Очень-очень нужна ваша помощь. Еще раз спасибо.