Reputation: 2688
I am trying to get a Make/Model/Year form running properly... and while I've got the UI part of it working good... on retriving the results I am stumped
The fields are generated like this:
<div class="input-group">
<input type="text" placeholder="Vehicle Model for This Make" id="PartVehModel0" name="PartVehModel[Chevy]" class="form-control">
<span style="cursor:pointer;" onclick="$(this).parent().remove();$('#vYear' + $(this).parent().find('input').val()).remove();" class="input-group-addon"><i class="fa fa-fw fa-minus-square-o"></i></span>
<span onclick="addChildGroup($(this).parent().find('input'), 2, '#vYear');" style="cursor:pointer;" class="input-group-addon"><i class="fa fa-chevron-right fa-fw"></i></span>
</div>
<div class="input-group">
<input type="text" placeholder="Vehicle Model for This Make" id="PartVehModel1" name="PartVehModel[Chevy]" class="form-control">
<span style="cursor:pointer;" onclick="$(this).parent().remove();$('#vYear' + $(this).parent().find('input').val()).remove();" class="input-group-addon"><i class="fa fa-fw fa-minus-square-o"></i></span>
<span onclick="addChildGroup($(this).parent().find('input'), 2, '#vYear');" style="cursor:pointer;" class="input-group-addon"><i class="fa fa-chevron-right fa-fw"></i></span>
</div>
etc...
When I try to do a var_dump
of the $_POST['PartVehModel']
I can only ever see the 1st item, and nothing else. For instance: I may put in Chevy, Honda as Makes... CRV/Civic, and Corvette/Malibu as respective models, and then a ton of years for each model, but all I ever get back is:
array(2) {
[0]=>
string(5) "Chevy"
[1]=>
string(5) "Honda"
}
array(2) {
["Honda"]=>
string(5) "Civic"
["Chevy"]=>
string(6) "Malibu"
}
array(4) {
["Civic"]=>
string(4) "2003"
["CRV"]=>
string(4) "2001"
["Malibu"]=>
string(4) "1990"
["Corvette"]=>
string(4) "1968"
}
From the following form:
my javascript producing this is:
var $ct = 0;
function addFormField(which, initialEle, val){
var $nField;
$iEle = $(initialEle);
$iEle.find('i').removeClass('fa-plus-square-o');
$iEle.find('i').addClass('fa-minus-square-o');
switch(which){
case 1: // make
$iEle.attr('onclick', '$(this).parent().remove();$(\'#vModel\' + $(this).parent().find(\'input\').val()).remove();');
$nField = '<div class="input-group"><input type="text" class="form-control" name="PartVehMake[]" id="PartVehMake'+$ct+'" placeholder="Vehicle Make for This Part" /><span class="input-group-addon" onclick="addFormField(1, this);" style="cursor:pointer;"><i class="fa fa-plus-square-o fa-fw"></i></span><span class="input-group-addon" style="cursor:pointer;" onclick="addChildGroup(\'#PartVehMake'+$ct+'\', 1, \'#vModel\');"><i class="fa fa-chevron-right fa-fw"></i></span></div>';
$('#vMake').append($nField);
$ct++;
break;
case 2: // model
$iEle.attr('onclick', '$(this).parent().remove();$(\'#vYear\' + $(this).parent().find(\'input\').val()).remove();');
$nField = '<div class="input-group"><input type="text" class="form-control" name="PartVehModel['+val+']" id="PartVehModel'+$ct+'" placeholder="Vehicle Model for This Make" /><span class="input-group-addon" onclick="addFormField(2, this, \'' + val + '\');" style="cursor:pointer;"><i class="fa fa-plus-square-o fa-fw"></i></span><span class="input-group-addon" style="cursor:pointer;" onclick="addChildGroup($(this).parent().find(\'input\'), 2, \'#vYear\');"><i class="fa fa-chevron-right fa-fw"></i></span></div>';
$('#' + $iEle.parent().parent().attr('id')).append($nField);
$ct++;
break;
case 3: // year
$iEle.attr('onclick', '$(this).parent().remove();');
$nField = '<div class="input-group"><input type="text" class="form-control" name="PartVehYear['+val+']" id="PartVehYear'+$ct+'" placeholder="Vehicle Year for This Model" /><span class="input-group-addon" onclick="addFormField(3, this, \'' + val + '\');" style="cursor:pointer;"><i class="fa fa-plus-square-o fa-fw"></i></span></div>';
$('#' + $iEle.parent().parent().attr('id')).append($nField);
$ct++;
break;
}
}
var $ct1 = 0;
function addChildGroup(val, which, where){
var $val = $(val).val();
var $whr = $(where);
var $nField;
if($val.length > 0){
switch(which){
case 1: //model
$whrID = where.replace('#', '') + $val;
$nField = '<div class="input-group"><input type="text" class="form-control" name="PartVehModel[' + $val + ']" id="PartVehModel'+$ct1+'" placeholder="Vehicle Model for This Make" /><span class="input-group-addon" onclick="addFormField(2, this, \'' + $val + '\');" style="cursor:pointer;"><i class="fa fa-plus-square-o fa-fw"></i></span><span class="input-group-addon" style="cursor:pointer;" onclick="addChildGroup($(this).parent().find(\'input\'), 2, \'#vYear\');"><i class="fa fa-chevron-right fa-fw"></i></span></div>';
$whr.append('<div id="' + $whrID + '"><h5 style="margin-top:10px;">' + $val + '<span class="fa fa-minus pull-right" style="cursor:pointer;" onclick="$(\'#' + $whrID + '\').remove();"></span></h5>' + $nField + '</div>');
$ct1++;
break;
case 2: //year
$whrID = where.replace('#', '') + $val;
$nField = '<div class="input-group"><input type="text" class="form-control" name="PartVehYear[' + $val + ']" id="PartVehYear'+$ct1+'" placeholder="Vehicle Year for This Model" /><span class="input-group-addon" onclick="addFormField(3, this, \'' + $val + '\');" style="cursor:pointer;"><i class="fa fa-plus-square-o fa-fw"></i></span></div>';
$whr.append('<div id="' + $whrID + '"><h5 style="margin-top:10px;">' + $val + '<span class="fa fa-minus pull-right" style="cursor:pointer;" onclick="$(\'#' + $whrID + '\').remove();"></span></h5>' + $nField + '</div>');
$ct1++;
break;
}
}
}
So, how can I get this "grouping" thing to work?
Upvotes: 0
Views: 79
Reputation: 20469
You need to use array syntax in your form:
name="PartVehModel[Chevy][]"
Upvotes: 1