0

鉴于此代码:

<input type="checkbox" id="Coke" name="Price" value="70" />
<input type="checkbox" id="Fanta" name="Price" value="70" />
<input type="checkbox" id="Sprite" name="Price" value="70" />

我想知道,如果我的用户选择 Fanta 复选框,我想要我的 php 变量$type="Fanta",但我需要表单复选框 VALUES 来保持 NUMERIC 以进行总价计算。

4

4 回答 4

3

目前尚不清楚您到底在问什么,但我相信您基本上需要 2 个字段,一个定义价格,一个定义所选类型。

在这种情况下,您最好的选择是将价格存储在服务器端(这样人们也无法修改它们,这很好!)。如果这样做,您的复选框将如下所示:

<input type="checkbox" id="Coke" name="type[]" value="Coke" />
<input type="checkbox" id="Fanta" name="type[]" value="Fanta" />
<input type="checkbox" id="Sprite" name="type[]" value="Sprite" />

您的后端代码如下所示:

 $prices = array(
     'Coke' => 70,
     'Fanta' => 70,
     'Sprite' => 70
 );

 $types = $_POST['type'];
 $total = 0;

 foreach($types as $key => $type) {
     if (!isset($prices[$type]))
         continue;

     $total += $prices[$type];
 }

 // Use $total as your total price for whatever calculation
 echo $total;

根据您的评论,如果您仍然希望这些价格在客户端进行计算,您可以使用json_encode将其输出到脚本标签并直接使用价格。它基本上是将服务器端价格数组转换为客户端价格数组。

<script type="text/javascript">
    var prices = <?= json_encode($prices) ?>;

    // Now you can use prices['Coke'] etc, based off the value of the selected checkbox.
</script>
于 2013-03-16T12:57:41.410 回答
1

我想知道,如果我的用户选择 Fanta 复选框,

然后命名你的字段fanta

<input type="checkbox" id="Fanta" name="fanta" value="70" />

完成后,您可以使用 the$_POST$_GETsuperglobal获取值(取决于您的表单方法):

if (isset($_POST['fanta'])) {
    echo $_POST['fanta'];
}

但是,您永远不应该依赖来自客户端的价格!

但我需要表单复选框 VALUES 保持 NUMERIC 以计算总价。

这不会发生,因为在 HTTP 中值是作为字符串发送的。幸运的是 PHP 会自动为您处理类型,因此您仍然可以使用字符串值进行计算。

http://codepad.viper-7.com/GOhHdz

在某些情况下,您希望明确地将其设为整数值。在这种情况下,您可以使用类型转换

var_dump((int) '18'); 

http://codepad.viper-7.com/kJlGoS

于 2013-03-16T12:53:11.233 回答
0

当您发布表格时,无论如何您将获得 70 作为价值。

echo $_POST['Price']; 

给 70

于 2013-03-16T12:54:19.340 回答
0
<input type="checkbox" value="Coke" name="Price" rel=70 />
<input type="checkbox" value="Fanta" name="Price" rel="70" />
<input type="checkbox" value="Sprite" name="Price" rel="70" />

使用 javascript 获取总价的选定复选框的 rel 属性值

于 2013-03-16T13:08:23.533 回答