我可以混合$ _get和$ _post吗?

时间:2011-01-30 23:04:14

标签: php post get

为了编辑我想要的条目:

    <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>

然后在file.php中

我想$_get['id']$_post['inputs']

但是当我走的时候:

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

它永远不会进入:S。这是正常的还是我错过了一些东西...我想不要有一个隐藏的输入与我要编辑的帖子的ID ..

7 个答案:

答案 0 :(得分:4)

我不是百分百确定,但表单在提交时不会发送name,更不用说id了。

您可以执行以下操作:

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

,您的if现在应该输入。

答案 1 :(得分:2)

看起来您正在检查表单的“id”属性。提交表单时不会发送此选项,只会发送<input><select><textarea><button>中的值。

你应该检查其中一个。

编辑:您的按钮名称是“pregunta”,因此这是您应该检查的POST变量,例如

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

一般来说,只要表格的“动作”和输入中的混合参数,你可以混合它们,只要表格方法是“发布”。你不能在表单的动作中设置GET参数并使用“get”方法

<!-- 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>

答案 2 :(得分:1)

在同一个请求中获取和发布变量应该没有问题,但是你确定你的语法是正确的吗?如果这是正常的PHP,你不应该写

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

[编辑]

问题是(如果我是正确的,这是标准的PHP),你生成一个看起来像这样的表单:

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

这会使id看起来像这样:'$this->id'(包括'-signs)。当你想要的是这样的:

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

然后$_GET['id']将为51

[EDIT2]

另外,我认为你需要改变

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

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

如果我没有弄错,表单的名称不会被发送到服务器,但是,提交按钮的名称确实如此,但我可能错了。

答案 3 :(得分:0)

是的,你可以,我已经好几次了。 您的代码可能还有其他问题。

是否有任何名称=“edit_pregunta”的控件或者它只是表单的ID? ID不会发送到服务器。

答案 4 :(得分:0)

只需将id添加到表单中,就无法创建您验证的$_POST['edit_pregunta']

相反,在表单标记内添加<input name="foo" />;在php脚本中验证$_POST['foo']

答案 5 :(得分:0)

虽然HTTP规范不允许POST方法中的查询参数,但这有点不寻常。你最好在表单中使用隐藏的输入字段将任何非用户值传递给脚本。

也就是说,表单的语法错误。您需要使用“echo”将$ this-&gt; id的值插入到操作中。

答案 6 :(得分:0)

使用input type =“submit”代替按钮标记。 您需要表单提交的名称并激活PHP脚本!

HTML代码:

<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代码:

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