POST和GET可以组合在一个输入类型中吗?

时间:2015-07-20 15:16:45

标签: javascript php forms post get

我的网站上有一个运行购物车样式应用程序的表单。要添加项目,我使用提交按钮将值POST到表单。要删除项目,我必须使用GET命令。

我想要做的是限制选择的可能性 - 当您选择一个选项时,其他选项将被删除。例如,如果我有三个选项:苹果,橘子,香蕉,你只能选择一个。

苹果 桔子 香蕉

如果您选择苹果,我想发布值"苹果"同时使用GET命令删除" Bananas"和#34;橘子"。

目前我这样做是为了发布值:

<form method="post">
   <fieldset>
       <input type="hidden" name="jcartToken" value="<?php echo $_SESSION['jcartToken'];?>" />
        <input type="hidden" name="id" value="Apples" />
        <input type="hidden" name="name" value="Apples" />
        <input type="hidden" name="color" value="red" />
        <input type="hidden" name="shape" value="round" />
        <div id="apples" >
            <input type="submit" name="my-add-button" class="add" value="&nbsp"/>&nbsp Apples
        </div>
    </fieldset>
</form> 

要删除我执行此操作的项目:

<a href="index.php?jcartRemove[]=Bananas&jcartRemove[]=Oranges">remove Bananas and Oranges</a>  

有没有办法同时做两件事?我尝试过这样的onclick事件:

<div id="Apples" >
    <input type="submit" name="my-add-button" class="add" value="&nbsp" onclick="location.href='index.php?jcartRemove[]=Bananas&jcartRemove[]=Oranges';" />&nbsp Apples
</div>

我也试过在表单的开头使用一个动作      

但这些都不起作用 - 他们仍会提交新项目,但不会删除该项目。想知道两者一起做好的方法吗?

2 个答案:

答案 0 :(得分:1)

技术上,是的,但这是一个黑客攻击:

<form method="post" action="foo.php?x=y">
  <input type="text" name="a" value="b" />
</form>

如果表单设置为POST,则表单中的任何<input><textarea>都将作为POST数据,但您放入action的网址的任何查询字符串都将在服务器上显示为GET数据:

 $_GET['x'] -> 'y'
 $_POST['a'] => 'b'
 $_POST['x'] => undefined index

但请注意,点击<form>内的链接不会提交表单。这就像点击任何其他链接,只会转到新地址。

答案 1 :(得分:0)

您可以使用$_REQUEST。根据{{​​3}},引用如下:

  

一个关联数组,默认包含$ _GET,$ _POST和$ _COOKIE

的内容

如上所述,您可以使用以下hack:

<form method="post" action="foo.php?x=y">
  <input type="text" name="a" value="b" />
</form>

编辑:如果GET和POST请求都是单独的,那么您的PHP可能就是问题所在 - 您还没有发布它,所以我可以&#39;看看问题可能在哪里。您可以将一些javascript放在一起以触发删除请求,然后在单击时触发添加请求:

jQuery("input[name|='my-add-button']").click(function() {
  var addform = jQuery(this);
  event.preventDefault();
  $.get("index.php?jcartRemove[]=Bananas&jcartRemove[]=Oranges", function(data) {
    addform.submit();
  });
});