Can't find an input type=image value in $_POST

2019-01-27 00:41发布

问题:

Well may be it is to easy question but:

I want to sort the numbers by clicking an image. I thought that i make a form and add an imagefield.

<form id="form1" name="form1" method="post" action="index.php">
<input name="buyuka" type="image" src="resimler/azalt.gif" />
</form>

Then i will write these codes.

$sorgu='SELECT * FROM urunler';

if(isset($_POST['buyuka'])

{
    $sorgu='SELECT * FROM urunler ORDER BY uyeno DESC';
}

$sonuclar=mysql_query($sorgu);

However it doesn't sort. When i try adding submit button in order to add imagefield, it works. So it means i make a really basic mistake but i cant find it.

Thank you for helping. :)

EDIT --- Solved

Actually as Pascal Martin said:

if(isset($_POST['buyuka_x'], $_POST['buyuka_y']))
{
    $sorgu='SELECT * FROM urunler ORDER BY uyeno DESC';
}

It must be like that. Thanks :)

回答1:

Just use var_dump() to see what's in $_POST :

var_dump($_POST);

And you'll see that, when your form is submitted using the <input type="image">, you get :

array
  'buyuka_x' => string '0' (length=1)
  'buyuka_y' => string '0' (length=1)


So, there is no $_POST['buyuka'] -- instead, there are :

  • $_POST['buyuka_x']
  • and $_POST['buyuka_y']

Which means your code should look like this (not testing for the unexistant buyuka entry, and testing for the two _x and _y -- I suppose that testing for one of those should be enough) :

if(isset($_POST['buyuka_x'], $_POST['buyuka_y']))
{
    $sorgu='SELECT * FROM urunler ORDER BY uyeno DESC';
}



Edit after the comments : I have no idea why it goes like that -- but having a .x and a .y is how it's defined in the HTML standard.

If you take a look at Forms in HTML documents, and scroll down a little, you'll be able to read :

When a pointing device is used to click on the image, the form is submitted and the click coordinates passed to the server.
The x value is measured in pixels from the left of the image, and the y value in pixels from the top of the image.
The submitted data includes name.x=x-value and name.y=y-value where "name" is the value of the name attribute, and x-value and y-value are the x and y coordinate values, respectively.

In PHP, the dots in parameters names are automatically replaced by and unerscore.
So :

  • name.x becomes name_x
  • and name.y becomes name_y

As a source for that last statement, you can read Variables From External Sources - HTML Forms (GET and POST) (quoting) :

Dots and spaces in variable names are converted to underscores.
For example <input name="a.b" /> becomes $_REQUEST["a_b"].



回答2:

If I am reading the question properly, then having the image as part of the form does not automatically submit the form as POST. The button made it work because you were actually submitting the form.

When you initially load the page, it will be a GET request with no relation to the form that you are showing us (and you could have numerous other forms in the page using different names, that would similarly have no effect unless submitted themselves). When you submit using the button, it requests index.php and adds the POST parameters.

Try adding onsubmit="submit-form();" to the input element?



回答3:

<form id="form1" name="form1" method="post" enctype="multipart/form-data" action="index.php">
     <input name="buyuka" type="image" src="resimler/azalt.gif" />
</form>

try this.



回答4:

    if(isset($_POST['buyuka'])
    {
        $sorgu='SELECT * FROM urunler ORDER BY uyeno DESC';
    } 
    else 
    {
        $sorgu='SELECT * FROM urunler';
    }

Give this a try.



回答5:

For the image input try adding an id. You have a name, but no id.

Replace

<input name="buyuka" type="image" src="resimler/azalt.gif" />

with

<input id="buyuka" name="buyuka" type="image" src="resimler/azalt.gif" />