Toni Michel Caubet
Toni Michel Caubet

Reputation: 20163

Can i Mix $_get and $_post?

in order to edit my entries i want to:

    <form id="pregunta" name="pregunta" class="form_pregunta" method="post" action="pregunta.php?id=26">
<h2>Titulo de la pregunta</h2><input name="q" id="q" class="q" value="este es mi títiulo " type="text">
<h2>Describe tu pregunta</h2>
<textarea name="texto" id="texto" style="width: 98%;">&lt;p&gt;esta es mi descripcion&lt;/p&gt;</textarea>
<h2>Etiquetas</h2>
<input name="tags" id="tags" onmouseover="mostrar_tooltip('nube_e','','0','70','')" onmouseout="ocultar_tooltip('nube_e')" value="dos,tres,una,">
<input name="responde_a" style="display: none;" id="responde_a" value="0">
<button name="pregunta" id="pregunta" type="submit">form_edit_question_button</button>
</form>

And then in file.php

i'd like to $_get['id'] and $_post['inputs']

but when i go:

if(isset($_POST['edit_pregunta'])){
     echo 'lalalalalalalalalalalalalalala';
     post_edit_pregunta();
 }

it won't ever enter :S. is that normal or i'm missing something... i wanted not to have a hidden input with the id of the post i want to edit..

Upvotes: 0

Views: 1630

Answers (7)

Dharmendra Jadon
Dharmendra Jadon

Reputation: 141

Use input type="submit" in place of button tag. You need name for form submission and activate php script!

HTML Code:

<form action="change.php" method="POST">
    <input type="password" name="p1" class="change_text" placeholder="New Password"/></br>
    <input type="password" name="p2" class="change_text" placeholder="Re-Password"/></br>
    <input type="submit" name="change" value="Change Password" id="change" />
</form>

PHP Code:

<?php
    if (isset($_POST['change']) {
        $p1=$_POST['p1'];
    }
?>

Upvotes: 0

Phil
Phil

Reputation: 164742

It looks like you're checking for your form's "id" attribute. This is not sent when the form is submitted, only values in <input>, <select>, <textarea> and <button> are sent.

You should check for one of those.

Edit: Your button name is "pregunta", so that is the POST variable you should be checking for, eg

if(isset($_POST['pregunta'])){

Just to comment in general on mixing params in the form's "action" and inputs, you can mix them as long as the form method is "post". You cannot set GET params in the form's action and use the "get" method

<!-- Good -->
<form action="proc.php?id=123" method="post">
<input name="foo" value="foo">
<input type="submit">
</form>

<!-- Bad -->
<form action="proc.php?id=123" method="get">
<input name="foo" value="foo">
<input type="submit">
</form>

Upvotes: 2

Alxandr
Alxandr

Reputation: 12423

There should be no problem at all with having get and post variables in the same request, but are you sure your syntax is correct? If this is normal php, shouldn't you write

<form id="edit_pregunta" method="post" action="file.php?id=<?php echo $this->id; ?>">
        ... //inputs here
</form>

[Edit]

The problem is (if I'm correct and this is standard php) that you generate a form that looks something like this:

<form id="edit_pregunta" method="post" action="file.php?id='$this->id'">
        ... //inputs here
</form>

This will make id look like this: '$this->id' (including the '-signs). When what you want is something like this:

<form id="edit_pregunta" method="post" action="file.php?id=51">
        ... //inputs here
</form>

Then $_GET['id'] would be 51.

[Edit2]

Also, I think you need to change

if(isset($_POST['edit_pregunta'])){

with

if(isset($_POST['pregunta'])){

If I'm not mistaken the name of a form doesn't get sent to the server, however, the name of the submit-button does, but I might be wrong about that part.

Upvotes: 1

Eric Giguere
Eric Giguere

Reputation: 3505

While the HTTP spec doesn't disallow query parameters in POST methods, it is somewhat unusual. You'd be better off using a hidden input field in the form to pass any non-user values up to the script.

That said, the syntax for your form is wrong. You need to use "echo" to insert the value of $this->id into the action.

Upvotes: 0

Ian
Ian

Reputation: 4185

I'm not 100% sure, but forms don't send their name when submitted, much less their id.

You could do the following instead:

<form id="edit_pregunta" method="post" action="file.php?id='$this->id'">
    <input type="hidden" name="edit_pregunta" value="anything">
    ... //inputs here
</form>

and your if should now enter.

Upvotes: 4

Flavius Stef
Flavius Stef

Reputation: 13798

Simply adding the id to the form will not create the $_POST['edit_pregunta'] you verify.

Instead, inside the form tag, add an <input name="foo" />; in the php script verify $_POST['foo']

Upvotes: 0

Lea Verou
Lea Verou

Reputation: 23887

Yes you can, I've done it several times. Probably something else is wrong with your code.

Is there any control with name="edit_pregunta" or is it just the id of the form? IDs are not sent to the server.

Upvotes: 0

Related Questions