|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2002-09-18 05:52 UTC] php-jp at typhoon dot jp
When checkboxes are used in a form with arrays (e.g. name=something[]) values retrieved from the resulting $_POST[something] array are trunacted. In fact, the first 4 bytes are truncated.
If values are POSTED one by one, i.e. not via an array, things seem to work.
The same script used to work on 4.2.2. I discovered this problem after upgrading to 4.2.3
---sample form starts---
<html>
<head>
</head>
<form action="prob1.php" method="POST">
<input type=checkbox name=somevar[] value="01234567890abcdefghijklmnopqrstu">
01234567890abcdefghijklmnopqrstu<br>
<input type=checkbox name=somevar[] value="abcdefghijklmnopqrstu">abcdefghijklmnopqrstu<br>
<input type=checkbox name=somevar[] value="01234567">01234567<br>
<input type=checkbox name=somevar[] value="0123456">0123456<br>
<input type=checkbox name=somevar[] value="012345">012345<br>
<input type=checkbox name=somevar[] value="01234">01234<br>
<input type=checkbox name=somevar[] value="0123">0123<br>
<input type=checkbox name=somevar[] value="012">012<br>
<input type=checkbox name=somevar[] value="01">01<br>
<input type=checkbox name=somevar[] value="0">0<br>
<input type="submit" value="OK">
</body>
</html>
---sample form ends---
---PHP used to process above starts---
<html>
<head>
</head>
<?
$somevar_arr = $_POST["somevar"];
if( sizeof( $somevar_arr ) ) {
for( $i = 0; $i < count( $somevar_arr ); $i++ ) {
printf("somevar[%d]: %s <br>", $i, $somevar_arr[$i] );
}
}
for( $i = 0; $i < count( $_ENV ); $i++ ) {
printf("env[%d]: %s <br>", $i, $ENV[$i] );
}
?>
<hr>
</body>
</html>
---scripts ends ---
Results generated by script:
somevar[0]: 4567890abcdefghijklmnopqrstu
somevar[1]: efghijklmnopqrstu
somevar[2]: 4567
somevar[3]: 456
somevar[4]: 45
somevar[5]: 4
somevar[6]:
somevar[7]: 012
somevar[8]: 01
somevar[9]: 0
-------------------------
===end of report===
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 02:00:01 2025 UTC |
This bug is not restricted to checkbox's! I think it applies to all input types.. The following example is a modification of the first test script but using text inputs. I asked my ISP to apply the recommended recompile config but it didn't work! PLEASE HELP ---sample form starts--- <html> <head> </head> <form action="phptest.php" method="POST"> 0 <input type=text name=somevar[] value="01234567890abcdefghijklmnopqrstu">01234567890abcdefghijklmnopqrstu<br> 1 <input type=text checked name=somevar[] value="abcdefghijklmnopqrstu">abcdefghijklmnopqrstu<br> 2 <input type=text checked name=somevar[] value="01234567">01234567<br> 3 <input type=text checked name=somevar[] value="0123456">0123456<br> 4 <input type=text checked name=somevar[] value="012345">012345<br> 5 <input type=text checked name=somevar[] value="01234">01234<br> 6 <input type=text checked name=somevar[] value="0123">0123<br> 7 <input type=text checked name=somevar[] value="012">012<br> 8 <input type=text checked name=somevar[] value="01">01<br> 9 <input type=text checked name=somevar[] value="0">0<br> 10 Text <input type=text name=somevar[] value="ABCDEFGHI"><br> <input type="submit" value="OK"> <hr> <P> <? $somevar_arr = $_POST["somevar"]; if( sizeof( $somevar_arr ) ) { for( $i = 0; $i < count( $somevar_arr ); $i++ ) { printf("somevar[%d]: %s <br>", $i, $somevar_arr[$i] ); } } for( $i = 0; $i < count( $_ENV ); $i++ ) { if ($ENV[$i]) { printf("env[%d]: %s <br>", $i, $ENV[$i] ); } } ?> </body> </html> ---scripts ends --- Results generated by script: somevar[0]: 4567890abcdefghijklmnopqrstu somevar[1]: efghijklmnopqrstu somevar[2]: 4567 somevar[3]: 456 somevar[4]: 45 somevar[5]: 4 somevar[6]: somevar[7]: 012 somevar[8]: 01 somevar[9]: 0 somevar[10]: EFGHI -------------------------