如何在php中循环一组GET值

时间:2010-11-13 08:58:41

标签: php loops get

我正在创建一个简单的在线商店,如程序。你有什么建议,我可以这样做,我可以循环我在程序中的输入。

我仍在使用get以便我可以看到数据的样子,我会将其更改为稍后发布。 当我提交购买购物车中添加的所有产品时,这就是网址的样子: http://localhost/pos/php/checkout.php?ids=2;&qoh=12;&qbuys=&ids=6;&qoh=2304;&qbuys=304&ids=4;&qoh=699;&qbuys=99

这是我用来只提交一个产品的代码,当我在上面的url中有类似的东西时它不起作用:

<?php

$id=$_GET['ids'];
$qtyhnd=$_GET['qoh'];
$qtytbuy=$_GET['qbuys'];
$left=$qtyhnd-$qtytbuy;



if($qtyhnd>=$qtytbuy){
$update=query_database("UPDATE prod_table SET  QTYHAND='$left' WHERE PID='$id'", "onstor", $link);
}


?>

如果您需要更多详细信息,请发表评论,谢谢

5 个答案:

答案 0 :(得分:2)

将参数转换为数组参数(例如qoh[]),然后并行迭代,或手动解析查询字符串。

答案 1 :(得分:1)

您可以像$_SERVER['QUERY_STRING']一样使用foreach循环:

foreach($_SERVER['QUERY_STRING'] as $key => $value){
  echo "$key - $value <br />";
}

通过这种方式,您可以使用foreach循环以类似的方式获取GET的值并在数据库查询中使用。

答案 2 :(得分:1)

在某些值之后你有分号可能只应传递qohqbuys这个整数。 除此之外,您应该在整数值之前使用mysql_real_escape_string()和(int)来防止SQL注入,例如:

$int = (int)$_GET['price'];
$string = $_GET['val'];
mysql_real_escape_string($string);

此外,如果要传递多个值,则必须为它们使用数组:

HTML

<input type="hidden" name="ids[]" value="1">
<input type="hidden" name="ids[]" value="2">
<input type="hidden" name="ids[]" value="3">

PHP

$ids = $_GET['ids'];
foreach($ids as $id) {
    $sql = 'UPDATE table SET field=? WHERE id='.(int)$id;
    ....
}

答案 3 :(得分:1)

我假设prod_table中的PID是整数类型。 $ id变量不包含“2;”而不是 2 ?无论如何,你得到了什么样的错误?

答案 4 :(得分:1)

让你的网址像 http://localhost/pos/php/checkout.php?ids[]=2&qoh[]=12&qbuys[]=&ids[]=6&qoh[]=2304&qbuys[]=304&ids[]=4&qoh[]=699&qbuys[]=99...使用像infinity这样的HTML结构指出。

然后:

foreach ($_GET['ids'] as $k => $v) {
    $id = (int)$v;
    $qtyhnd = (int)$_GET['qoh'][$k];
    $qtytbuy = (int)$_GET['qbuys'][$k];
    $left = $qtyhnd - $qtytbuy;

    if ($qtyhnd >= $qtytbuy) {
        $update = query_database(
            "UPDATE prod_table SET QTYHAND='$left' WHERE PID='$id'",
            "onstor",
            $link);
    }
}

如果QTYHANDPID的数据库类型为int,请从SQL查询中排除单引号(')。