PHP开关语句

时间:2016-04-15 05:33:01

标签: php

我目前有一个名为" user.php"的页面,其中我有一个HTML表单,允许用户从营养相关信息列表中选择,以及一些处理输入并最终处理输入的PHP代码将它们存储到MySQL数据库中:

 <form action="user.php" method="post">
   ......
 <select class="sel-dropdown" name="nutri-info">
        <option value="empty"></option>     
        <option value="<200">&lt;200 cal</option>
        <option value="200 - 399">200 - 399 cal</option>
        <option value="400 - 599">400 - 599 cal</option>
        <option value="600 - 799">600 - 799 cal</option>
        <option value="800 - 999">800 - 999 cal</option>
        <option value=">1000">&gt; 1000 cal</option>
</select> 
......
</form>

页面顶部的PHP如下所示。我尝试做的是将每个卡路里转换为一个数字,并将该数字存储到数据库中。

...
$nutrition = $_POST['nutri-info'];
switch($nutrition){
        case "<200 cal":
           $calories = 1;
           break;
        case "200 - 399 cal":
           $calories = 2;
           break;
        case "400 - 599 cal":
           $calories = 3;
           break;
        case "600 - 799 cal":
           $calories = 4;
           break;
        case "800 - 999 cal":
           $calories = 5;
           break;
        case ">1000 cal":
           $calories = 6;
           break;         
        default:
            $calories = 10;   
    }

但问题是,无论我在HTML表单中选择哪个项目,$ calories的结果总是10,默认情况下的值。什么可能出错?

4 个答案:

答案 0 :(得分:1)

$_POST['nutri-info']中的值返回与200 - 399类似,您正在使用200 - 399 cal检查切换案例。

尝试从切换案例中删除cal或在选项值

中添加cal

答案 1 :(得分:0)

开关应该包含您在HTML选择中设置的值。

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

只需删除 cal 部分

即可

答案 2 :(得分:0)

将您的选项值更改为此

switch($nutrition){
        case "<200":
           $calories = 1;
           break;
        case "200 - 399":
           $calories = 2;
           break;
        case "400 - 599":
           $calories = 3;
           break;
        case "600 - 799":
           $calories = 4;
           break;
        case "800 - 999":
           $calories = 5;
           break;
        case ">1000":
           $calories = 6;
           break;         
        default:
            $calories = 10;   
}

提交表单元素值的表单

答案 3 :(得分:0)

很高兴您学会了如何使用switch语句纠正错误..!

您可能会发现学习更多内容很有用:您的选项的value属性适合您,而不适合您的用户。我的意思是,他们没有看到它,所以你可以在那里放任何你想要的东西。

所以,不要给自己传递选择的字符串描述(,要求你使用开关<'>来'找出'整数值),只需简单地将整数传递给自己价值开始!

所以而不是:

<select class="sel-dropdown" name="nutri-info">
     <option value="empty"></option>     
     <option value="<200">&lt;200 cal</option>
     <option value="200 - 399">200 - 399 cal</option>
     <option value="400 - 599">400 - 599 cal</option>
     <option value="600 - 799">600 - 799 cal</option>
     <option value="800 - 999">800 - 999 cal</option>
     <option value=">1000">&gt; 1000 cal</option>
</select>

这样做:

<select class="sel-dropdown" name="nutri-info">
     <option value=""></option>     
     <option value="1">&lt;200 cal</option>
     <option value="2">200 - 399 cal</option>
     <option value="3">400 - 599 cal</option>
     <option value="4">600 - 799 cal</option>
     <option value="5">800 - 999 cal</option>
     <option value="6">&gt; 1000 cal</option>
</select>

然后你可以得到你想要的值,而根本不需要开关:

$calories = $_POST['nutri-info'];

// The switch is no longer needed..!
//
// $nutrition = $_POST['nutri-info'];
// switch($nutrition){
//         case "<200 cal":
//            $calories = 1;
//            break;
//         case "200 - 399 cal":
//            $calories = 2;
//            break;
//         case "400 - 599 cal":
//            $calories = 3;
//            break;
//         case "600 - 799 cal":
//            $calories = 4;
//            break;
//         case "800 - 999 cal":
//            $calories = 5;
//            break;
//         case ">1000 cal":
//            $calories = 6;
//            break;         
//         default:
//             $calories = 10;   
//     }

故事的寓意是:设置value属性,使它们对你有意义。用户只能看到有角度的括号之间的内容:

<option value="2"> 200 - 399 cal </option>

所以,这一切对他们来说都是有意义的。