2012-03-21 20 views
-3

经过一天的很多questionmarks我必须问我的问题另一种方式来找到解决方案。如何使用开关?

我有一个切换条款,只适用于第一种情况。第二种情况不会被执行,我不知道为什么这不起作用。

这里是代码:

if($query->num_rows === 1){ 

    $row = $query->fetch_object(); 
    $Status = $row->Status; 

if(isset($_POST['submit'])){ 

     $x1 = $_POST['x1']; 
     $x2 = $_POST['x2']; 
     ... 
     $x11 = $_POST['x11']; 

     $x10Check = $db->query("SELECT * FROM tableB WHERE x10='".$x10."'"); 
     $x11Check = $db->query("SELECT * FROM tableB WHERE x10='".$x10."' AND x11='".$x11."'"); 

     if(empty($x1)||...||empty($x10)||empty($x11)){ 

      if(empty($x1) && $Status == "S0"){ 
       $errors[]="text"; 
      } 
      if(empty($x4) && ($Status == "S0" || $Status == "S2")){ 
       $errors[]="text"; 
      } 
      ... 

      if(empty($x11) && ($Status == "S0" || $Status == "S2")){ 
       $errors[]="text"; 
      } 

      }elseif(strlen($x10)< 5){ 
       $errors[]="no x10"; 
      }elseif(strlen($x10)> 5){ 
       $errors[]="no x10"; 
      }elseif(ctype_digit($x10) === false){ 
       $errors[]="no x10"; 
      }elseif($x10Check->num_rows === 0){ 
      $errors[]="no x10";  
      }elseif($x11Check->num_rows === 0){ 
      $errors[]="wrong"; 
      }elseif($Status == "S1"){ 
      $errors[]="no changings possible at the moment"; 

     }else{ 
      $x2 = strip_tags($x2); 
      $x2 = stripslashes($x2); 
      $x2 = trim($x2); 
      $x2 = $db->real_escape_string($x2); 
      ... 
      $x11 = strip_tags($x11); 
      $x11 = stripslashes($x11); 
      $x11 = trim($x11); 
      $x11 = $db->real_escape_string($x11); 

      if($query->num_rows===1){ 
       switch($Status){ 
        case 'S0': 
         $update = $db->query("UPDATE table SET x1='".$x1."', ..., x11='".$x11."' WHERE id='".$id."'"); 
         $msg ="text"; 
         $updateStatus = $db->query("UPDATE table SET Status='S1' WHERE id='$id'"); 
         break; 
        case 'S2': 
         $update2 = $db->query("UPDATE table SET x4='".$x4."', ..., x11='".$x11."' WHERE id='".$id."'"); 
         $msg ="text"; 
         $updateStatus2 = $db->query("UPDATE table SET Status='S1' WHERE id='$id'"); 
         break; 
        default: 
         $errors[]="text error."; 
         break; 
        } 
      } 

有没有人会是谁是友好,可以帮助。我真的很感激。谢谢。

问题是我有一个表单,用户可以编辑他的个人资料。注册后,用户将自动获得未经检查注册的状态s0。当用户拥有s0状态时,他没有完全访问所有功能。用户可以通过首先必须检查的表单发送更多信息。在他提交信息后,状态自动从s0变为s1,这意味着只要他的信息没有被检查,他就不能做任何改变。在检查进度之后,用户获得状态s2。具有该状态,他具有完全访问权限,并且可以通过最小化的形式再次编辑他的一些数据。在提交新数据后,他会自动回到s1,因为必须检查所有更改。这是主要的问题。 switch子句只在case1之前正常工作。所有更改和错误消息都可以正常工作。只有当用户具有s2状态并且表单被最小化为用户可以改变的几个字段时,这些改变将不会被发送,并且也不会显示错误消息。

+2

什么是错误? – Cfreak 2012-03-21 17:55:55

+2

你的问题到底是什么?您是否测试了$ Status其实是='S2',但是您的switch语句中的第二个case没有运行,或者您的问题是$ Status永远不会='S2',所以这种情况不会出现? – 2012-03-21 17:56:53

+1

你在哪里设置你的$状态?并且它是否获得了S2值? – 2012-03-21 17:56:55

回答

0

你是否错过了一些闭合的花括号?这有点混淆你的示例代码的布局方式。