2012-03-21 6 views
-3

questionmarksの多くの日の後、私は解決策を見つける別の方法を質問しなければならない。スイッチの使い方は?

私には、最初のケースまでしか動かないswitch節があります。 2番目のケースは実行されず、なぜ動作しないのかわかりません。ここ

はコードです:

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

+2

あなたの問題は何ですか? $ Statusが実際に 'S2'であるが、switch文の2番目のケースが実行されない、または$ Statusが決して 'S2'にならないという問題であることをテストしましたか? ? –

+1

$ステータスはどこで設定しますか?それは今までに値S2を取得していますか? –

答えて

0

いくつかの中括弧が欠けていますか?サンプルコードがどのように配置されているのか混乱しています。