繁体   English   中英

PHP表单将值发布到数据库

[英]PHP Form Posting Values To Database

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

<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]来获取它的值,并将其添加到报价的其他选项上。

但是我的问题出在我将它们发布到数据库中时(以便我们可以检查它们何时进入)。 当它们添加到数据库时,显然它只是作为值而不是像“ excellent”或“ good”之类的实际名称出现。 只需说“ 10”或“ 5”。

无论如何,有没有将选项名称而不是值放入数据库中?

无论如何,有没有将选项名称而不是值放入数据库中?

有,但是它涉及显式地执行此操作(在插入值之前将“ 10”转换为“ Excellent”),而不仅仅是将$_POST基本上按原样扔到数据库中。 如果首先使用数组构建<option>则可以使其非常简单,方法是再次读取数组并用键交换值。

$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

然而:

如果要这样做,最好将值存储为数字,并在显示它们时将它们转换为单词(假设数字确实有一定含义)。 这也使您可以通过提供翻译来本地化。

对评论的回应:

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

无论您做什么,都要确保对输入进行验证-我想不出有任何充分的理由使用直接用户输入来计算价格-应该根据产品ID和任何其他条件在内部完成。 您可以即时修改HTML源代码,以发布您在下拉菜单中未曾期望的值。

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

$stateText = '';
switch ($state){
    case 10:
    $stateText = 'Excellent';
    break;

    case 5:
    $stateText = 'Good';
    break;

    case 0:
    $stateText = 'Poor';
    break;

    default:
    // bad value
    $stateText = '';
}

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

这只是许多方法之一。

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

您应该小心,不要在不进行清理的情况下将帖子数据直接存储到数据库中,否则可能会受到sql注入的影响。

您无法通过HTML表单获取它。 但是您仍然可以在服务器端执行将这些值映射到适当条件的操作。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM