PHP - $ _SERVER ['QUERY_STRING']不包含所有<form>条目</form>

时间:2014-02-23 22:12:26

标签: php forms get query-string

有点奇怪...... 我正在建一个购物车。当用户键入他想要的数量并点击“添加到购物车”时,<form>操作应该使用PHP $_SERVER['QUERY_STRING']和其他一些信息(即产品ID,在MySQL中获取)重定向它们。 / p>

这是我的表单,所有这些都在PHP回声中......

<?php
echo '<form method="GET" action="cart.php?'.$_SERVER['QUERY_STRING'].'&action=add&item_id='.$data->item_id.'">
<small>Quantity </small><input type="text" size="2" placeholder="1" name="add_quantity">
<input type="submit" name="add_clicked" class="button" value="Add to Cart">
</form>';
?>

提交后,网址会重定向到cart.php,但只包含查询字符串,但会遗漏商品ID和操作=添加。

假设我在数量框中输入“2”,则网址看起来像cart.php?add_quantity=2,之后没有任何内容。

非常感谢帮助! 谢谢!

3 个答案:

答案 0 :(得分:2)

当您通过GET提交表单时,表单数据提交过程将覆盖可能在您放入action属性的地址中设置的任何现有查询字符串。

使用隐藏的表单字段来传输您的其他值。

(正如@Simon在评论中已经说过的那样,请仔细阅读您在输出之前从客户端发送的数据时要采取的措施来防止XSS。)

答案 1 :(得分:1)

提交带有GET的表单会覆盖您放入网址的任何查询字符串(我不确定您要对$_SERVER['QUERY_STRING']做什么,但这会给出查询字符串用于访问表单所在的页面。

您要做的是在表单中使用隐藏的输入字段,用于actionitem_id属性。

<form method="GET" action="cart.php">
<input type="hidden" name="action" value="add"/>
<input type="hidden" name="item_id" value="<?=$data->item_id?>"/>
<small>Quantity </small><input type="text" size="2" placeholder="1" name="add_quantity">
<input type="submit" name="add_clicked" class="button" value="Add to Cart">
</form>

提交后,我们会转到网址cart.php?action=add&item_id=1234&add_quantity=2

或者您可以(并且很可能应该)通过POST提交表单;然后,表单中的任何数据都将作为POST参数发送,并且将保留您的操作中定义的查询字符串参数。

答案 2 :(得分:0)

通过隐藏字段传递查询字符串中的信息。因此,假设您在查询字符串中传递了帐号,它将如下所示:

<input type="hidden" name="account_number" value="$account_number">