在PHP中回应复杂的表单数组

时间:2012-08-23 21:07:04

标签: php html arrays forms

我需要结合一些php和html技巧来使表单的典型选择段包含每个表单的多个值。产品的ID,标记的ID和标记的“名称”。这允许管理用户根据利润率选择产品价格。提交表单会为select中的三个值生成空白值。

<?php

    $factor_grab = "
    SELECT * FROM product_latest_price_factor AS t1
    WHERE product_id = '".$product_id."'";
    //echo $factor_grab.'<br>';
    $factor_result = mysql_query($factor_grab) or die (mysql_error());
    while($frow=mysql_fetch_array($factor_result))
    {
        $level = $frow['level'];
        $percentage = $frow['percentage'];
        $value = $frow['value'];
        $price_level_id = $frow['price_level_id'];

//This piece does not work
        echo '<option value="{level:\''.$level.'\', price_level_id:\''.$price_level_id.'\', percentage:\''.$percentage.'\'}">'.$level.' - %'.number_format($percentage,2).' - $'.$value.'</option>';

    }
      ?>

我认为这次我已经钉了它,因为我可以看到表单中的值,并通过Google Chrome检查选项,但我认为这是因为我的报价已经失控。您可以看到每个选项值应该存储三个变量。 Level,Price_level和Price_level_id。 (价值仅供用户明确查看产生的价格。)如何回应可以适用于所有三种选项的选项?这对我来说是一个非常强大的解决方案。

2 个答案:

答案 0 :(得分:1)

正确逃避事情,避免问题:

echo '<option value="', 
    htmlspecialchars(
        json_encode(
            array(
                'level'=>$level,
                'price_level_id'=>$price_level_id,
                'percentage'=>$percentage
            )
        )
    ),
    '">',
    htmlspecialchars($level . ' - %' . number_format($percentage,2)),
    htmlspecialchars(' - $' . $value),
    '</option>';

这很麻烦......只是想在这里向你展示这个想法。你应该稍微清理一下这些东西。最好只保留一个ID在该选项值中,并将这些其他内容从JavaScript数组或对象中提取出来,或者稍后将它们保存在哪里。

另外,请确保您在查询中转义数据。就目前而言,您可能会受到SQL注入的影响。学习将PDO用于准备好的查询以避免此问题。

答案 1 :(得分:0)

您如何检索这些值?你在使用json_decode吗?因为如果你那么你需要确保你的JSON首先是有效的。试试这个:

echo '<option value="'.htmlspecialchars(json_encode(compact("level","price_level_id","percentage"))).'">'.$level.' - %'.number_format($percentage,2).' - $'.$value.'</option>';

然后使用json_decode将值输入数组。