php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #42960 PHP messes up image submit button data
Submitted: 2007-10-14 10:56 UTC Modified: 2021-09-22 13:41 UTC
Votes:2
Avg. Score:4.0 ± 1.0
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:1 (100.0%)
From: efbiaiinzinz at hotmail dot com Assigned:
Status: Open Package: *General Issues
PHP Version: 5.2.4 OS: *
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: efbiaiinzinz at hotmail dot com
New email:
PHP Version: OS:

 

 [2007-10-14 10:56 UTC] efbiaiinzinz at hotmail dot com
Description:
------------
PHP messes up coordinates for <input type="image" .. fields when fieldname is not simple one level name but multilevel name.
For example name="smth[field]" is easy way to test it

Reproduce code:
---------------
<form action="" method="GET"><input type="image" name="smth[imgsubmit]" src="t.jpg" width="200" height="200"></form>
<?php
print_r($_POST);
?>


Expected result:
----------------
Since single level image submits end up in post and get arrays as
fieldname_x and fieldname_y I would expect above code to produce GET array as such:
Array ( [smth] => Array ( [imgsubmit_y] => 80, [imgsubmit_x] => 80 ) )

or even better would be actually
Array ( [smth] => Array ( [imgsubmit] => Array([x] => 80, [y] => 80) ) )

but it woul be a breaking change when changed to that and would be inconsistent with single level fields, but also it would be much clearer and would not prohibit me from having <input type="image" name="someimage" src="..."> and <input type="hidden" name="someimage_x" value="previousvalue"> fields on same form at the same time

Actual result:
--------------
Array ( [smth] => Array ( [imgsubmit] => 80 ) )

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2007-10-14 12:13 UTC] bjori@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

See bug#42162
 [2007-10-15 09:53 UTC] jani@php.net
Reopened. This is valid issue. Just not a bug but feature/change request.
 [2011-02-21 20:57 UTC] jani@php.net
-Package: Feature/Change Request +Package: *General Issues -Operating System: Windows XP/Linux +Operating System: *
 [2021-09-13 14:04 UTC] ddpm at liscovius dot de
<div style="display:flex;gap:1em;">
<div>With GET using name[key]:
<form action="" method="GET">
<input type="image" name="smth[imgsubmitget]" alt="imgclick coords using get" src="t.jpg" width="200" height="200"></form>
</div>

<div>With GET using name[key][]:
<form action="" method="GET">
<input type="image" name="smth[imgsubmitpost][]" alt="imgclick coords using get (ok)" src="t.jpg" width="200" height="200"></form>
</div>

<div>With POST using name[key]:
<form action="<?= basename(__FILE__) ?>" method="POST">
<input type="image" name="smth[imgsubmitpost]" alt="imgclick coords using post" src="t.jpg" width="200" height="200"></form>
</div>

<div>With POST using name[key][]:
<form action="<?= basename(__FILE__) ?>" method="POST">
<input type="image" name="smth[imgsubmitpost][]" alt="imgclick coords using post (ok)" src="t.jpg" width="200" height="200"></form>
</div>

</div>
<pre>
$_POST: <?php print_r($_POST); ?>
$_GET: <?php print_r($_GET);?>
$_REQUEST: <?php print_r($_REQUEST);?>
</pre>

name[key]:  browser sends get data: testinputimage.php?smth[imgsubmitget].x=175&smth[imgsubmitget].y=177
name[key][]:browser sends get data: testinputimage.php?smth[imgsubmitpost][].x=65&smth[imgsubmitpost][].y=114

Browser send postdata: smth%5Bimgsubmitpost%5D.x=93&smth%5Bimgsubmitpost%5D.y=88
 [2021-09-13 14:06 UTC] ddpm at liscovius dot de
My previous comment shows a better example to understand the issue.

Using the extra [] seems to be ok as workaround?
 [2021-09-13 14:34 UTC] ddpm at liscovius dot de
What the "living" standard says:

https://html.spec.whatwg.org/multipage/input.html#image-button-state-(type=image)
 [2021-09-22 13:41 UTC] cmb@php.net
Regarding HTTP, there is nothing special with parameter names
containing brackets or dots.  Regarding HTML forms, for <input
type="image" name="foo"> actually two parameters are sent (foo.x
foo.y).  PHP translates any dots in HTTP parameters to
underscores, and treats bracketed parts as array indexes.
However, it just ignores *any* trailing content after the last
bracket pair.

> Using the extra [] seems to be ok as workaround?

I wouldn't rely on that.  Maybe better don't use arrays for
multiple images, but roll your own treatment.  E.g. use names like
smth_1, smth_2, etc., and scan for these array indexes (smth_1_x,
etc.)
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 17:01:32 2024 UTC