PHP switch语句

PHP switch语句

问题描述:

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

<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表单中选定的项目的$卡路里的结果总是10,默认情况下的值。任何想法可能会出错?

+1

它会更有意义的使用数字在第一个地方而不是开关/外壳它是这样吗? – Gordon

+0

为什么你要检查“''中的值或从案例中删除它 –

+0

@fittaoee请选择正确的答案,所以在将来如果有人提到这个线程可以知道什么是正确的解决方案。 – JiteshNK

$_POST['nutri-info']中的数值返回就像200 - 399并且您正在使用200 - 399 cal检查开关盒。

尝试从开关盒中取出cal或期权价值

+0

谢谢。你能解释为什么$ _POST ['nutri-info']中的值只包含“”200 - 399“,但不包含”cal“? – fittaoee

+0

$ _POST ['nutri-info']返回选项的值,如果值属性如果我在

+0

您在选项标签中有价值,那么它将返回作为提交值,否则它将返回选项标签内的文本 - > fittaoee

开关应包括正是你已经在HTML中选择设置的值加cal

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; 
} 

只需卸下CAL部分

+0

谢谢,问题已解决。 – fittaoee

改变你的选择值这个

<option value="200 - 399 cal">200 - 399 cal</option> 
<option value="400 - 599 cal">400 - 599 cal</option> 
<option value="600 - 799 cal">600 - 799 cal</option> 

...do like this 

怎么一回事,因为形式submiting表单元素值

+0

谢谢您的输入。 – fittaoee

这是伟大的,你学会了如何纠正错误与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>

所以,这一切必须是有意义的他们。

+0

啊耶!非常聪明!没有想过这样做,非常感谢。 – fittaoee