Multidimensional array problems in $_POST

Posted on 16th Feb 2014 by admin

I'm having trouble with a three-dimensional $_POST array. It starts as a two-dimensional array on this side:

Code: <html>
<head>
<title>test</title>
<script type="text/javascript">
var Dom = {
get: function(el) {
if (typeof el === 'string') {
return document.getElementById(el);
} else {
return el;
}
},
add: function(el, dest) {
var el = this.get(el);
var dest = this.get(dest);
dest.appendChild(el);
},
remove: function(el) {
// var el = this.get(el);
// el.parentNode.removeChild(el);
}
};
var Event = {
add: function() {
if (window.addEventListener) {
return function(el, type, fn) {
Dom.get(el).addEventListener(type, fn, false);
};
} else if (window.attachEvent) {
return function(el, type, fn) {
var f = function() {
fn.call(Dom.get(el), window.event);
};
Dom.get(el).attachEvent('on' + type, f);
};
}
}()
};
Event.add(window, 'load', function() {
var i = 2;
Event.add('add-element', 'click', function() {
var el = document.createElement('span');
el.innerHTML = '<input type="text" name="theArray['+i+']['name']" value="">';
i++;
Dom.add(el, 'content');
Event.add(el, 'click', function(e) {
Dom.remove(this);
});
});
});

</script>
</head>
<body>
<p id="add-element">Add Elements</p>
<form action="testPost.php" name="test" method="post">
<input type="text" name="theArray[1]['name']" value="foo" />
<input type="text" name="theArray[2]['name']" value="bar" />
<div id="content"></div>
<input type="submit" name="submit" value="submit" />
</form>
</body>
</html>

(If you're wondering why I only have one element it's because this is for a project where I will need nested lists later.)

Now, onto testPost.php to process the code:

Code: <html>
<head>
<title>asdfdf</title>
</head>
<body>
<ul>
<?php


for ($i=1;$i<=count($_POST["theArray"]);$i++){

echo("<li>".$_POST['theArray'][$i]['name']."</li>");

}

?>
</ul>
</body>
</html>

$_POST itself is an array, so we convert from a two-dimensional to a three-dimensional array. For some reason, only the first letter gets printed; the rest of the string gets truncated.

My only request is that you don't suggest I just use a database or something of the like. This has to be easily portable and I will probably merge this into one document later.

Thank you

Other forums