【问题标题】:PHP Form Posting Values To DatabasePHP 表单将值发布到数据库
【发布时间】:2011-10-12 18:32:46
【问题描述】:

基本上,我有一个工作表单,用户可以在其中输入有关他们的笔记本电脑的详细信息以出售给我的商店。 一旦他们提交了笔记本电脑的规格,我就会给他们报价。 目前我有选项框和复选框,每个都有一个值——例如这些。 ---

<label for="state">State</label><br>

<select name="state">

<option value="10">Excellent</option>

<option value="5">Good</option>

<option value="0">Poor</option>

</select><br>

他们选择的选项的价值在最后被加起来,这给了他们报价 - 在上面的例子中 - “10”意味着一台状况良好的笔记本电脑等额外的 10 英镑。

我使用 $_POST[state] 来获取它的值以添加到报价的其他选项中。

但我的问题在于当我将它们发布到数据库时(这样我们就可以检查它们何时进入)。 当它们被添加到数据库时,显然它只是作为值而不是它的实际名称出现,例如“优秀”或“好”。只是说“10”或“5”。

到底有没有将选项的名称而不是值放入数据库?

【问题讨论】:

    标签: php sql


    【解决方案1】:

    当然……只要确保那是你想要做的。创建这样的非规范化表通常不被认为是一种好的数据库实践,但您可以这样做。当您收集帖子数据时,只需创建另一个变量并根据状态值为其分配一个值,如下所示:

    $stateText = '';
    switch ($state){
        case 10:
        $stateText = 'Excellent';
        break;
    
        case 5:
        $stateText = 'Good';
        break;
    
        case 0:
        $stateText = 'Poor';
        break;
    
        default:
        // bad value
        $stateText = '';
    }
    

    ...然后将其存储到数据库中的新列中。

    这只是众多方法中的一种。

    【讨论】:

      【解决方案2】:

      只有在进行查找时才能执行此操作,无论是数组还是存储键和值的另一个表。

      您应该注意不要将帖子数据直接存储到您的数据库中而不对其进行清理,否则您可能会受到 sql 注入。

      【讨论】:

      • 是的,我只是想在变得复杂之前让它工作起来。这是我的第一个 php 脚本。不过感谢您的建议
      【解决方案3】:

      到底有没有将选项的名称而不是值放入数据库?

      有,但它涉及显式执行(在插入值之前将“10”转换为“Excellent”),而不是基本上按原样将$_POST 扔到数据库中。如果您首先使用数组构建&lt;option&gt;s,则可以通过再次读取数组并用键交换值来使这变得非常简单。

      $values = array(
          10  =>  'Excellent',
          5   =>  'Good',
          0   =>  'Poor',
      );
      
      $post_value = $_POST['state'];
      $db_value = $values[$post_value];
      
      // further validation: make sure the array key exists or use a default value
      // further usage: build your HTML <options> with this array
      

      但是:

      如果您要这样做,最好将值存储为数字并在显示它们时将它们转换为单词(假设数字确实具有某些含义)。这也允许您通过提供翻译进行本地化。

      对 cme​​ts 的回应:

      我会推荐一个评级系统,例如 1 到 5,并在内部计算您的价格修改 - 不是直接从用户输入或从硬编码值(在数据库中)计算。这允许您从应用程序内部调整价格变化,而不是从较早时间创建的数据库值,例如如果您决定“优秀”条件需要增加 11 而不是 10 - 除非您特别想要价格在产品发布时永久“锁定”。

      无论您做什么,请确保验证输入 - 我想不出任何充分的理由使用直接用户输入来计算价格 - 它应该根据产品 ID 和任何其他条件在内部完成。可以即时修改 HTML 源代码以发布您从下拉列表中未预料到的值。

      【讨论】:

      • 我不介意进行转换之类的操作,但您可以想象 - 假设 60GB 硬盘驱动器和 80GB 硬盘驱动器的价格可能相同 - 所以它们之间的区别。跨度>
      • 我在这里没有看到任何关于价格的信息,你在说什么?这和你问的完全不同。你不想让用户$_POST一个产品的价格!
      • 在 OP 中 - “他们选择的选项的值在最后被加起来,这给了他们报价 - 在上面的例子中 - “10”意味着一台状况良好的笔记本电脑额外增加 10 英镑等等”
      • 好的,我明白了。尽管如此,我还是无法理解它。为什么会有多个具有相同值但标签不同的“状态”或“条件”?再次重申,您应该永远
      • 它基于内存、屏幕大小硬盘驱动器等。但无论如何,当我们评估您的笔记本电脑时,我们会向您付款,所以这无关紧要。 - 并且没有不同的标签 - 它是一个下拉框,因此人们可以说出他们的笔记本电脑的状况
      【解决方案4】:

      您无法通过 HTML 表单获取它。但是你仍然可以做一个服务器端,将值映射到适当的条件。

      您可以使用 switch 语句或 if 语句来映射它们。

      if(value == 10){ 
              $condition = 'Excellent';
                   } else {//....}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-02
        • 2012-06-28
        • 1970-01-01
        • 2012-05-17
        • 1970-01-01
        • 2013-02-05
        • 2014-06-05
        • 1970-01-01
        相关资源
        最近更新 更多