2014-09-23 3 views
0

У меня есть очень простой вид:PHP Сообщение Работа с полями

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<form method="post" action=""> 
<label>Filter By Zip Code: 
<input maxlength="5" name="zipcode" size="6" type="text" /></label> 
<label>Filter By Products: 
<select name="products"> 
    <option value="">Select Product</option> 
    <option value="jewelry">Jewelry</option> 
    <option value="homedecor">Home Decor</option> 
    <option value="kitchen">Kitchen</option> 
</select> </label> 
    <label>Filter By Materials: 
<select name="materials"> 
    <option value="">Select Material</option> 
    <option value="abs">ABS</option> 
    <option value="gold">Gold</option> 
    <option value="silver">Silver</option> 
</select> </label> 
<br> 
<input name="submit" type="submit" value="Submit" /> 
<input name="clear" type="submit" value="Clear" /> 
</form> 
<?php 
if (!isset($_POST['submit'])){ 
     echo "Nothing Selected"; 
} 
elseif(isset($_POST['zipcode']) && ($_POST['zipcode'] != "")) { 
$zip = $_POST['zipcode']; 
     echo "Zip data " . $zip; 
} 

elseif(isset($_POST['products']) && ($_POST['products'] != "")) { 
$products = $_POST['products']; 
     echo "Products data " . $products; 
} 
elseif(isset($_POST['materials']) && ($_POST['materials'] != "")) { 
$materials = $_POST['materials']; 
     echo "Materials data " . $materials; 
} 
?> 

Когда я отправляю данные Это будет принимать только значение первого выбранного элемента.

Я попытался разбить if ... elseif и сделать некоторые действительно избыточные утверждения.

т.е.

elseif(isset($_POST['materials']) && ($_POST['materials'] != "") || ($_POST['products']) && ($_POST['products'] != "") || $_POST['zipcode']) && ($_POST['zipcode'] != "")) { 

Это кажется действительно сложным и я не могу поверить, что это не простой путь.

Я попытался использовать переключатель ... случай, однако получить те же результаты.

Что нужно искать, если выбраны два фильтра?

Что делать, если выбраны все три?

Как я могу получить данные для правильной публикации.

+0

Как ваш код, пользователь не может выбрать несколько фильтров. Вы имели в виду использовать select multiple? –

ответ

1

Вы проверяете, если «почтовый индекс» размещен и если это не, если «продукты "размещена, и т.д. ...

вы должны изменить свой "еще, если" S в "если!":

<?php 
if (!isset($_POST['submit'])) 
{ 
    echo "Nothing Selected"; 
} 
else 
{ 
    if(isset($_POST['zipcode']) && ($_POST['zipcode'] != "")) 
    { 
     $zip = $_POST['zipcode']; 
     echo "Zip data " . $zip; 
    } 
    if(isset($_POST['products']) && ($_POST['products'] != "")) 
    { 
     $products = $_POST['products']; 
     echo "Products data " . $products; 
    } 
    if(isset($_POST['materials']) && ($_POST['materials'] != "")) 
    { 
     $materials = $_POST['materials']; 
     echo "Materials data " . $materials; 
    } 
} 
?> 

Кстати, вы могли бы использовать", если (пусто ($ _ POST [» myfield '])) "вместо проверки" isset ", а затем egal для пустого.

Другая вещь: входы не должны быть внутри метки, так что вы должны иметь:

<label for="myfield">My field :</label> 
<input name="myfield" ... /> 
4

Вы можете сделать это, как

<?php 
if (!isset($_POST['submit'])){ 
     echo "Nothing Selected"; 
} 
else { 
     if(isset($_POST['zipcode']) && ($_POST['zipcode'] != "")) { 
      $zip = $_POST['zipcode']; 
      echo "Zip data " . $zip; 
     } 

     if(isset($_POST['products']) && ($_POST['products'] != "")) { 
      $products = $_POST['products']; 
      echo "Products data " . $products; 
     } 
     if(isset($_POST['materials']) && ($_POST['materials'] != "")) { 
      $materials = $_POST['materials']; 
      echo "Materials data " . $materials; 
     } 
} 
?> 
+0

Помните, что в зависимости от того, что вы планируете делать с этими данными, это может быть большой уровень безопасности ... Будьте осторожны, если вы планируете вставить это в базу данных. В таком случае вы можете прочитать о SQL-инъекциях. –

+0

Вы также должны использовать empty(), чтобы проверить, является ли опубликованное значение пустым или нет. –

0

Вы просто не должны использовать ELSEIF, поскольку она будет проходить только в одном из этих заявлений первой на самом деле, как вы заметили. Используйте, если это вместо того, чтобы ...

Edit: см ответа naincy Гупта, который показывает, что именно я имел в виду :-)