2016-02-14 3 views
0

Я начинающий PHP и MySQL, поэтому, пожалуйста, держите свои ответы простыми !!!Использование флажков для фильтрации записей PHP MySQL

У меня есть база данных, в которой перечислены группы пенсионеров и сервисы, которые они предлагают. У меня есть ряд полей, использующих логический (tinyint), и если они предлагают услугу, они получают 1. Если они этого не делают, то получают 0.

У меня есть отображение хорошо, но теперь я пытаюсь отфильтруйте список, используя флажки. Я также ищу по городу и штату (которые работают), но как только я добавляю свой код для флажков, он терпит неудачу. Он просто показывает все записи независимо от того, что. Вот что у меня есть:

HTML:

<form action="" method="post"> 
<fieldset><legend>Filter</legend> 
    <p><label>City:&nbsp;</label><input type="text" name="by_city" /></p> 
    <p><label>State:&nbsp;</label><input type="text" name="by_state" /></p> 
    <p> 
    <input type="checkbox" name="IndependentLiving" value="1" /> Independent Living<br> 
    <input type="checkbox" name="AssistedLiving" value="1" /> Assisted Living<br> 
    <input type="checkbox" name="SkilledNursing" value="1" /> Skilled Nursing<br> 
    <input type="checkbox" name="MemoryCare" value="1" /> Memory Care<br> 
    <input type="checkbox" name="ContinuingCareCommunity" value="1" /> Continuing Care Community<br> 
    <input type="checkbox" name="Respite" value="1" /> Short-term/Respite<br> 
    </p> 
    <p><input class="button" type="submit" name="submit" value="Search" /></p> 
</fieldset>  
</form> 

PHP код:

$by_city = $_POST['by_city']; 
$by_state = $_POST['by_state']; 
$IndependentLiving = $_POST['IndependentLiving']; 
$AssistedLiving = $_POST['AssistedLiving']; 
$SkilledNursing = $_POST['SkilledNursing']; 
$MemoryCare = $_POST['MemoryCare']; 
$ContinuingCareCommunity = $_POST['ContinuingCareCommunity']; 
$Respite = $_POST['Respite']; 



mysql_select_db('CommunityList'); 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
$query = "SELECT * FROM Communities WHERE (City='$by_city') OR (State='$by_state') OR (IndependentLiving='$IndependentLiving') OR (AssistedLiving='$AssistedLiving') OR (SkilledNursing='$SkilledNursing') OR (MemoryCare='$MemoryCare') OR (ContinuingCareCommunity='$ContinuingCareCommunity') OR (Respite='$Respite')"; 
} 
else { 
$query = "SELECT * FROM Communities"; 
} 
$result = mysql_query($query); 
+0

Флажки указаны только в том случае, если они отмечены. Поэтому вам нужно установить значение по умолчанию, т.е. '0', если он не установлен. Вы можете использовать тройку, чтобы сделать это. то есть. '$ IndependentLiving = isset ($ _ POST ['IndependentLiving'])? $ _POST ['IndependentLiving']: 0; '. Это говорит о том, установлен ли '$ _POST ['IndependentLiving']', т.е. 'name =" IndependentLiving "' был проверен, используйте его значение. если нет, то используйте значение «0» в качестве значения. – Sean

+0

Кроме того, как правило, если вы хотите отфильтровать эти флажки, вы должны использовать 'AND IndependentLiving = 1', чтобы оно требовало этого значения. Таким образом, еще одна альтернатива заключается только в добавлении этих фильтров, когда они проверены, и удалять их из запроса при снятии флажка. – Sean

+1

Если вы видите 'action =" "' подразумевает, что вы используете весь свой код в том же файле, и вы должны получать неопределенные индексные заметки * сразу же с места *. Таким образом, вам нужно будет отрегулировать свой код в соответствии с ответом (ответами), если они не упомянули его/не компенсировали. Сообщение об ошибке сообщит вам, что http://php.net/manual/en/function.error-reporting.php –

ответ

0

Вы используете OR в вашем SELECT запросе, что означает OR, так что, если по крайней мере один WHERE совпадает, запись будет возвращена.

Что вы можете это:

$postToColumnMaps = array('by_city' => 'City', 'by_state' => 'State'); 
$sqlWhereParts = array(); 
foreach ($postToColumnMaps as $postKey => $columnKey) { 
    if (strlen($_POST[$postKey]) > 0) { 
     $sqlWhereParts[] = $columnKey . ' = \'' . $_POST[$postKey] . '\''; 
    } 
} 

$sqlWhere = implode(' AND ', $sqlWhereParts); 

вы можете использовать этот фильтр, то как

$query = "SELECT * FROM Communities WHERE " . $sqlWhere; 

Просто, чтобы получить представление, я закодировал без тестирования. Будьте также осведомлены о SQL-инъекции, необходимо избегать, по крайней мере, $_POST[$postKey].

Смежные вопросы