将条件下降写入MySQL

时间:2014-10-22 14:58:36

标签: javascript php jquery mysql

希望这不会太令人困惑..

我有一个条件表单,让用户根据该类别选择一个类别,他们需要从该类别的子类别中进行选择。这很好。

然而,我的问题是在写入MySQL时,插入我的子类别列中的值始终是最后一个选择组的第一个值(在这种情况下,它是“三明治”)。实施例..

我的主要类别:初学者|晚餐|三明治

  • 初学者的子类别:沿海或南部
  • 晚餐的子类别: Smokehouse或Specialties
  • 三明治的子类别:三明治或宝男孩

无论您选择哪个类别/子类别,它总是在MySQL中写入“三明治”子类别。有意义吗?

所以这是我的代码& JSFiddle如果你想玩下拉菜单。的 http://jsfiddle.net/kkobayashi/5f5tw4t0/

PHP到MySQL

<?php
    if( isset( $_POST['create'] ) ):

    $cat = $_POST['cat']; 
    $catsubs = $_POST['subcategory']; 
    $name = $_POST['name'];
    $description = $_POST['description'];
    $price = $_POST['price'];

    mysql_query("INSERT INTO leDB (cat,subcategory) 
        VALUES('$cat','$catsubs')") 

    or die(mysql_error());

    echo "Success."; /** success message **/

    endif;
?>

HTML

<form action="" method="POST">
<!-- MAIN CATS -->
<select id="mainCat" class="source" name="cat">
    <option value="starters">Starters</option>
    <option value="supper">Supper</option>
    <option value="sandwiches">Sandwiches</option>
</select>


<!-- SUB CATS -->
<div id="cat_starters" class="subcategory" style="display:inline;">
    <select class="" id="starters" name="subcategory">
        <option value="coastal">Coastal</option>
        <option value="southern">Southern</option>
    </select>
</div>
<div id="cat_supper" class="subcategory hidden">
    <select class="" id="supper" name="subcategory">
        <option value="smokehouse">Smokehouse</option>
        <option value="specialties">Specialties</option>
    </select>
</div>
<div id="cat_sandwiches" class="subcategory hidden">
    <select class="" id="sandwiches" name="subcategory">
        <option value="sandwich">Sandwich</option>
        <option value="poboy">Po-Boys</option>
    </select>
</div>
</form>

JS

// Conditional Drop Down
    $(document).ready(function(){
        $('#mainCat').on('change', function() {         
            // Setting this variable to add inline
            var inline = document.querySelector('#cat_' + $(this).val() );

            // Show/Hide
            $('div.subcategory').hide();
            $('#cat_' + $(this).val() ).show();
            inline.style.display = "inline";
        });
    });

一点CSS

div.hidden { 
   display: none; 
}

不知道我描述这个问题的工作有多好,如果你感到困惑,请随意对我大喊大叫。谢谢你们。

3 个答案:

答案 0 :(得分:0)

隐藏选择实际上并不会从DOM中删除它,正如您将查看是否要检查源。它只是隐藏了用户。

这意味着具有相同name属性的每个选择都将覆盖最后一个,因此您只能获得最后一个。 一个简单的解决方法是将name属性添加到正确的选择中。

$(document).ready(function(){
    $('#mainCat').on('change', function() {         
        // Setting this variable to add inline
        var inline = document.querySelector('#cat_' + $(this).val() );

        // Show/Hide
        $('div.subcategory').hide().attr('name', '');
        $('#cat_' + $(this).val() ).show().attr('name', 'subcategory');
        inline.style.display = "inline";
    });
});

答案 1 :(得分:0)

您需要为选择添加唯一名称。 例如,对于初学者,请添加name="starters"。添加名称作为类别的选项值。

然后,使用:$catsubs = $_POST[$cat];

答案 2 :(得分:0)

将子类别名称更改为子类别1,... 2和.... 3或者只是在表单中将它们设为唯一

您需要名称是唯一的。无论你选择什么,你最终得到相同的三明治是因为你使用相同的名称。发送$ _POST数据时,它会发送一个数组,其中键的大小等于表单中的名称。因此,要准确了解用户点击,选择或键入的内容,每个名称必须是唯一的