Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I am using PHP 5.3.8 with Apache 2.0. I am also using Symfony 2 but that's not where the script is failing. I have a form with array variables:

<form action="/app_dev.php/admin/position/create" method="post">
  <input type="text" id="po_name" name="po[name]" required="required" maxlength="50">
  <input type="text" id="po_role" name="po[role]" required="required" maxlength="20">
</form>

Directly in the app_dev.php file (to rule out Symfony from the problem) I do:

echo file_get_contents("php://input"); // outputs: po%5Bname%5D=Developer&po%5Brole%5D=ROLE_USER
var_dump($_POST); // outputs: array(1) { ["po"]=> array(1) { ["name"]=> string(9) "Developer" } }
die();

Basically it keeps only the first variable in the array. If I change the name of the variable from po[role] to ba[role] then $_POST outputs:

array(1) {
  ["po"]=> array(1) { ["name"]=> string(9) "Developer" },
  ["ba"]=> array(1) { ["role"]=> string(9) "ROLE_USER" }
}

Typical problems I have found that can cause this issue are due to the following php.ini configuration, I also give you what are my values:

max_execution_time = 30
max_input_time = 60 
max_input_nesting_level = 64
max_input_vars = 1000
post_max_size = 8M
upload_max_filesize = 2M
memory_limit = 128M

These values seems reasonable and I think don't cause the problem, but cannot be 100% sure.

I do not have suhosin installed as I've read it can cause similar problems too.

It is also similar to this problem but the solution given would require me to rewrite the HttpFoundation Symfony component.

Also I don't want to have to rewrite the form variable without and array (e.g. po[name] to po_name) as the form are automatically generated by Symfony and this seems to be a basic feature that PHP should be able to handle.

Does someone have any idea about this problem ?

PS: this is similar to the problem described in here. Plus the problem happens on the same version of Suse (SUSE Linux Enterprise Server 11 ).

share|improve this question
2  
I've never seen something like this.. po[name] and po[role] –  Mr. Alien Oct 2 '12 at 4:57
1  
@Mr.Alien It's perfectly valid syntax. There's nothing wrong with using name="po[name]" etc. It should work exactly like the question assumes it will work. –  meagar Oct 2 '12 at 5:11
2  
@Mr.Alien Then you simply haven't seen a lot. It works just fine. Usually, that is. –  deceze Oct 2 '12 at 5:11
2  
@deceze interesting... it returns array(1) { ["po"]=> array(1) { ["name"]=> string(9) "Developer" } } –  Sylvain Oct 2 '12 at 5:21
1  
@Sylvain Hmm, then PHP's string parsing is apparently borked. I'd create/look for a bug report for that and/or try upgrading to the latest PHP version. –  deceze Oct 2 '12 at 5:22
show 17 more comments

2 Answers

What you're proposing works fine for me. Full test code:

<html>
<body>
<pre>
<?php
if (isset($_POST) && !empty($_POST))
{
        echo file_get_contents("php://input");
        echo "\n\n";
        var_dump($_POST);
}
?>
</pre>
<form action="" method="post">
  <input type="text" id="po_name" name="po[name]">
  <input type="text" id="po_role" name="po[role]">
  <input type="submit">
</form>
</html>

Result snippet with 'one' and 'two' values:

po%5Bname%5D=one&po%5Brole%5D=two

array(1) {
  ["po"]=>
  array(2) {
    ["name"]=>
    string(3) "one"
    ["role"]=>
    string(3) "two"
  }
}

My PHP:

PHP Version 5.3.3-7+squeeze14
CGI/FastCGI
Apache/2.2
Suhosin Patch 0.9.9.1

No issues here, so it should clearly work. If this test code doesn't work for you, my best bet is a PHP bug in the version you have (or a bug in some seemingly unrelated functionality that hasn't been mentioned anywhere).

share|improve this answer
add comment
up vote 0 down vote accepted

We finally decided to update our version of PHP to a more recent version (5.3.15) and it works fine now. So this was for sure a problem with this 5.3.8, at least the version we had.

share|improve this answer
 
Yeah, so like I said, "a PHP bug in the version you have" :) –  eis Oct 15 '12 at 7:53
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.