Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Chained select


Автор: ekodrive 12.5.2017, 15:33
Добрый день друзя.
Вот сталкнулься весьма интерестной проблемой. Есть форма заказов обоев для внутренно сети. 
Заказ по одной штуки отлично работает. 
index.php
Код

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Order</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>  
    <script type="text/javascript">
$(document).ready(function(){
    $('#oboy').on('change',function(){
        var tovarID = $(this).val();
        var stena= $('#stena').val();
        if(tovarID){
            $.ajax({
                type:'POST',
                url:'ok.php',
                data:'tovar='+tovarID+'&stena='+stena,                
                success:function(html){                  
                    $('#cvet').html(html);                
                }
            }); 
        }
    });
    
      $('#cvet').on('change',function(){
        var color = $(this).val();
        var stena= $('#stena').val();
        var total= color*stena;
        $('#total').val(total+' USD');
  
    });
    });
    </script>          
</head>

<body>
<label>Стена кв/м:</label>
<input type="text" name="stena" id="stena">
<label for="select">Обой:</label>
<select name="oboy" id="oboy">
<option value="Первый">Первый</option>
<option value="Второй">Второй</option>
<option value="Третий">Третий</option>
</select>
<label>Цвет:</label>
<select name="cvet" id="cvet">

</select>
<label>Цена:</label>
<input type="text" name="total" id="total">
</body>
</html>


ok.php
Код

<?
include_once('lib/class.php');
$object=new BAZA();  
if(isset($_POST["oboy"]) && !empty($_POST["oboy"])){ 
   $tovar=$object->Readvib("SELECT * FROM `colors` WHERE `oboy_id`=1  ORDER BY name ASC");
   $number = 1;
    echo"<option value=\"\">Выберите цвет</option>";
    foreach ($tovar as $row) {
    echo"<option value=".$row['price'].">".$row['name']."</option>";
    $number++;
    }
}else{
        echo '<option value="">Выберите цвет</option>';
    }

?>


Но хочу чтоб было несколько полей а в таком случаее имена полей соответственно будеть выглядеть так: stena[],oboy[],cvet[],total[]

Код

<label >Стена кв/м:</label>
<input type="text" name="stena[]" id="stena[]">
<label for="select">Обой:</label>
<select name="oboy[]" id="oboy[]">
<option value="Первый">Первый</option>
<option value="Второй">Второй</option>
<option value="Третий">Третий</option>
</select>
<label>Цвет:</label>
<select name="cvet[]" id="cvet[]">

</select>
<label>Цена:</label>
<input type="text" name="total[]" id="total[]">


как быть токга с Php стороной ? неделю мучаюс.

Автор: whatisnot 19.9.2017, 21:04
Цитата(ekodrive @  12.5.2017,  15:33 Найти цитируемый пост)
id="oboy[]"


Это никуда не годится, во-первых нет в таком ID ни нужды, ни смысла, а во-вторых, это геморройный селектор. А для клиентского сценария вообще не нужны ID в данном случае.

Что касаемо имени списков, можно конечно иметь их как элементы одного массива, но только тогда с явно указанными индексами:

name="oboy[0]"
name="oboy[1]"
.....

На сервере иметь массив соответствий полей таблицы с индексами списков

Код

$fields = ['field1', 'field2', ...];
//принимая форму
if($post = array_diff(array_map('intval', $_POST), [0])) {
    $where = implode(' AND ', array_map(function($k, $v) {
         return $k .'='. $v;
    }, array_intersect_key($fields, $post), $post); 
}
  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)