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

Can POST and GET be combined within a single input type?

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

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

苹果 橘子 香蕉

如果你 select Apples,我想 post 值 "Apples" 同时使用 GET 命令删除 "Bananas" 和 "Oranges"。

目前我这样做是为了 post 值:

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

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

但这些都不起作用 - 他们仍会提交新项目,但不会删除该项目。有什么好的方法可以一起做吗?

从技术上讲,是的,但这是一个技巧:

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

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

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

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

您可以使用 $_REQUEST。根据php documentation,引用如下:

An associative array that by default contains the contents of $_GET, $_POST and $_COOKIE

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

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

编辑: 如果 GET 和 POST 请求都单独工作,则您的 PHP 可能是问题所在 - 您没有'发布它,所以我看不出问题出在哪里。您可以将一些 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();
  });
});