如何使用开关?

时间:2012-03-21 17:53:11

标签: php if-statement switch-statement

经过一天的大量问号后,我不得不以另一种方式提出解决方案。

我有一个仅适用于第一种情况的switch子句。第二种情况不会被执行,我不知道为什么这不起作用。

这是代码:

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-status并且表单被最小化为用户可以更改的几个字段时,才会发送更改,并且也不会显示错误消息。

1 个答案:

答案 0 :(得分:0)

你是否错过了一些闭合花括号?这样会使您的示例代码布局混乱。