Не выбранный <select>

190
15 июля 2017, 09:11

Возник вопрос как есть 4 селекта как. Если какой то из них не выбран то есть по умолчанию стоит первый не учитывать его и выводить данные из бд на основе других выбранных. То есть не учитывать не выбранные при выводе данных из бд подскажите кто знает

<html> 
<head>    
</head>
<body>
<form action="" method="POST">
<input type="submit" name="smb" value="Применить">
<select name="numbers">
<option>Выберите номер</option>
<option value="№1">№1</option>
<option value="№2">№2</option>
<option value="№3">№3</option>
<option value="№4">№4</option>
<option value="№5">№5</option>
<option value="№6">№6</option>
<option value="№7">№7</option>
<option value="№8">№8</option>
<option value="№9">№9</option>
<option value="№10">№10</option>
<option value="№11">№11</option>
<option value="№12">№12</option>
</select>
<?php
// устанавливаем первый и последний год диапазона
$yearArray = range(2000, 2030);
?>
<!-- выводим выпадающий список -->
<select name="yearrs">
    <option>Выберите год</option>
    <?php
    foreach ($yearArray as $year) {
        // если вы хотите выбрать конкретный год
        $selected = ($year == 1999) ? 'selected' : '';
        echo '<option '.$selected.' value="'.$year.'">'.$year.'</option>';
    }
    ?>
</select>
<select name="langgs">
<option>Выберите язык</option>
<?php
$db = mysql_connect ("localhost", "root", "dtctyybqltym")|| die (mysql_error());
mysql_select_db("scat")|| die (mysql_error());
mysql_query("SET NAMES 'utf8'");
$query = 'SELECT * FROM lang';
$result = mysql_query ( $query ) or die ( 'Query failed: ' . mysql_error ( ) );
   while ( $line = mysql_fetch_array ( $result, MYSQL_ASSOC ) ) {
      echo '<option value="' . $line [ 'lang' ] . '">' . $line [ 'lang' ] . "</option>";
   }
?>          
</select>
<select name="siglaas">
<option>Выберите местонахождение</option>
<?php
$query = 'SELECT * FROM sigla';
$result = mysql_query ( $query ) or die ( 'Query failed: ' . mysql_error ( ) );
   while ( $line = mysql_fetch_array ( $result, MYSQL_ASSOC ) ) {
      echo '<option value="' . $line [ 'name' ] . '">' . $line [ 'name' ] . "</option>";
   }
?>          
</select>
<?php  
if(isset($_POST['smb']))
{
$number = $_POST['numbers'];
$yearr = $_POST['yearrs'];
$langg = trim($_POST['langgs']);
$siglaa = trim($_POST['siglaas']);
$result = mysql_query("SELECT `name`, `year`, `namev`, `lang`, `vid`, `period`, `sigla` FROM `osnov` WHERE `name` LIKE '1%' AND `namev`='$number' AND `year`='$yearr' AND `lang`='$langg' AND `sigla`='$siglaa'");
} else 
$result = mysql_query("SELECT `name`, `year`, `namev`, `lang`, `vid`, `period`, `sigla` FROM `osnov` WHERE `name` LIKE '1%'");   
echo "<table width='100%'>";
echo "<tr><th>Наименование</th><th>Год выпуска</th><th>Номер выпуска</th><th>Язык</th><th>Вид</th><th>Периодичность</th><th>Местонахождение</th></tr>";
while ($row=mysql_fetch_assoc($result)){
extract($row); 
echo "<tr><td>$name</td><td>$year</td><td>$namev</td><td>$lang</td><td>$vid</td><td>$period</td><td>$sigla</td></tr>";
}
echo "</table>";
?>
</form>
</body>
</html>
Answer 1

Вообще бы вынести работу с базой(модель) отдельно, и работать с моделью через нэймспэйсы или инклюды.

Как вариант предварительно создать массив

$data = array(
   'numbers' => '',
   'yearrs' => '',
   'langgs' => '',
   'siglaa' => ''
);

Селектам задать name в формате data[name]

<select name="data[numbers]"></select>

После получить данные через $request = $_POST['data'] и пробежаться через foreach собирая строку фильтра

foreach($request as $key => $value)
{
    if( array_key_exists($key,$data) )
    {
        $data[$key] = $value;
    }
}
$filter = '';
foreach($data as $key => $value)
{
    if( $value != '' )
    {
        $filter .= " AND `".$key."`='".$value."'";
    }
}

В результате получим такой запрос:

$result = mysql_query("SELECT `name`, `year`, `namev`, `lang`, `vid`, `period`, `sigla` FROM `osnov` WHERE `name` LIKE '1%'".$filter);
Answer 2

Установите пустые <option value="none" selected> </option> в селектах, сделайте их дефолтными. Далее ловите в PHP что-то по типу:

if($_POST['numbers'] == 'none'){
$number = '';
} else {
$number = $_POST['numbers'];
}

Хотя какой-то индийский кодинг для большого кол-ва полей получается.

READ ALSO
Вставка элемента в фигурные скобки в html

Вставка элемента в фигурные скобки в html

Здравствуйте! Есть такой html код:

147
Php - получить имя каталога текущего url

Php - получить имя каталога текущего url

Для дальнейшей работы скрипта, необходимо получить из url адреса, имя последнего каталогаПример, нахожусь на странице сайт

189
несколько циклов php

несколько циклов php

ЗдравствуйтеУ меня имеется таблица с товаром в базе в ней строчки id, waybill_id, name, date (идентификатор, номер продажи, товар, дата)

169
передача через POST двумерный массив

передача через POST двумерный массив

Есть цикл который создает input-ы с разными именами

204