希望这不会太令人困惑..
我有一个条件表单,让用户根据该类别选择一个类别,他们需要从该类别的子类别中进行选择。这很好。
然而,我的问题是在写入MySQL时,插入我的子类别列中的值始终是最后一个选择组的第一个值(在这种情况下,它是“三明治”)。实施例..
我的主要类别:初学者|晚餐|三明治
无论您选择哪个类别/子类别,它总是在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;
}
不知道我描述这个问题的工作有多好,如果你感到困惑,请随意对我大喊大叫。谢谢你们。
答案 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数据时,它会发送一个数组,其中键的大小等于表单中的名称。因此,要准确了解用户点击,选择或键入的内容,每个名称必须是唯一的