【问题标题】:Troubleshooting session states in switch statement对 switch 语句中的会话状态进行故障排除
【发布时间】:2018-02-19 16:25:19
【问题描述】:

我正在使用会话来保存状态。正如我检查过的那样,状态正在被保存。但是,只有当会话设置为状态 4(排序电子邮件)时,其他功能才会在完成时通过电子邮件对数据库进行排序。如果我选择任何其他排序(状态 1-3),则一旦调用任何其他功能(删除/更新等),会话将被保存,数据将恢复为按 ID 排序。为什么这仅在数据按电子邮件排序(状态 4)时有效,而不是在其他 3 个状态排序时有效?我似乎找不到这个错误。

<?php

// include database configuration
include "dbheader.php";

// model with database and business logic code
include "crud.model.php";

// make my TPL array at the top, because it might be populated during 
// the switch actions
$TPL = array(); 

$TPL[‘displayTable’] = true;
$TPL[‘updateTable’] = false;
$TPL["fetchedrecord"] = [];

session_start();

switch ($_REQUEST["act"]) { 

  case "updatestart":
          $recordid = $_REQUEST["id"];
          $TPL["fetchedrecord"] = fetchRecord($conn, $recordid);
          $TPL[‘displayTable’] = false;
          $TPL[‘updateTable’] = true;

      if($_SESSION["sess"] == 1){
        $TPL["phonebook"] = sortDataLName($conn); 
      }
      if($_SESSION["sess"] == 2){
        $TPL["phonebook"] = sortDataPosition($conn); 
      }
      if($_SESSION["sess"] == 3){
        $TPL["phonebook"] = sortDataDepartment($conn);
      }
      if($_SESSION["sess"] == 4){
        $TPL["phonebook"] = sortDataEmail($conn);
      }
      else{
        $TPL["phonebook"] = getAllData($conn);
      }
  break;

  // updating a record from the database 
  case "update":

      updateRecord($conn,
              $_REQUEST["id"],
              $_REQUEST["fnameUP"],
              $_REQUEST["lnameUP"],
              $_REQUEST["phoneUP"],
              $_REQUEST["emailUP"],
              $_REQUEST["locationUP"],
              $_REQUEST["mcUP"],
              $_REQUEST["posUP"],
              $_REQUEST["deptUP"]);
            $TPL[‘displayTable’] = true;
            $TPL[‘updateTable’] = false;

      if($_SESSION["sess"] == 1){
        $TPL["phonebook"] = sortDataLName($conn); 
      }
      if($_SESSION["sess"] == 2){
        $TPL["phonebook"] = sortDataPosition($conn); 
      }
      if($_SESSION["sess"] == 3){
        $TPL["phonebook"] = sortDataDepartment($conn);
      }
      if($_SESSION["sess"] == 4){
        $TPL["phonebook"] = sortDataEmail($conn);
      }
      else{
        $TPL["phonebook"] = getAllData($conn);
      }

    break;

  // deleting a record from the database 
  case "delete":

    $recordid = $_REQUEST["id"];
      deleteRecord($conn, $recordid);
      if($_SESSION["sess"] == 1){
        $TPL["phonebook"] = sortDataLName($conn); 
      }
      if($_SESSION["sess"] == 2){
        $TPL["phonebook"] = sortDataPosition($conn); 
      }
      if($_SESSION["sess"] == 3){
        $TPL["phonebook"] = sortDataDepartment($conn);
      }
      if($_SESSION["sess"] == 4){
        $TPL["phonebook"] = sortDataEmail($conn);
      }
      else{
        $TPL["phonebook"] = getAllData($conn);
      }

    break;


  // sorting records by last nae 
  case "sortname":
        $TPL["phonebook"] = sortDataLName($conn); 
        $_SESSION["sess"] = 1;
    break;

  case "sortemail":
        $TPL["phonebook"] = sortDataEmail($conn); 
        $_SESSION["sess"] = 4;
    break;

  case "sortposition":
        $TPL["phonebook"] = sortDataPosition($conn);  
        $_SESSION["sess"] = 2;
    break;

  case "sortdepartment":
        $TPL["phonebook"] = sortDataDepartment($conn);
        $_SESSION["sess"] = 3;
    break;

  // insert a new record into the database  
  case "insert":

      insertRecord($conn,
              $_REQUEST["fname"],
              $_REQUEST["lname"],
                  $_REQUEST["phone"],
                  $_REQUEST["email"],
              $_REQUEST["location"],
              $_REQUEST["mc"],
              $_REQUEST["pos"],
              $_REQUEST["dept"]);
      if($_SESSION["sess"] == 1){
        $TPL["phonebook"] = sortDataLName($conn); 
      }
      if($_SESSION["sess"] == 2){
        $TPL["phonebook"] = sortDataPosition($conn); 
      }
      if($_SESSION["sess"] == 3){
        $TPL["phonebook"] = sortDataDepartment($conn);
      }
      if($_SESSION["sess"] == 4){
        $TPL["phonebook"] = sortDataEmail($conn);
      }
      else{
        $TPL["phonebook"] = getAllData($conn);
      }
    break;

  default:  
     $TPL["phonebook"] = getAllData($conn);
}

// put code here for things that need to happen every time the page loads



// view with our user interface
include "crud.view.php";

?>

【问题讨论】:

    标签: php session switch-statement


    【解决方案1】:

    您有一系列彼此不相关的if 语句,但您仍在尝试最后使用else。这些块中的每个if 都需要是elseif

    if ($_SESSION["sess"] == 1) {
        $TPL["phonebook"] = sortDataLName($conn); 
    } elseif($_SESSION["sess"] == 2) {
        $TPL["phonebook"] = sortDataPosition($conn); 
    } elseif($_SESSION["sess"] == 3) {
        $TPL["phonebook"] = sortDataDepartment($conn);
    } elseif($_SESSION["sess"] == 4) {
        $TPL["phonebook"] = sortDataEmail($conn);
    } else{
        $TPL["phonebook"] = getAllData($conn);
    }
    

    您当前的结构方式,如果它匹配除最后一个条件之外的任何内容,它也会匹配 else,这似乎不是您的意图。

    另一个选项是 switch 语句:

    switch ($tpl['phonebook']) {
        case 1:  sortDataLName($conn);      break;
        case 2:  sortDataPosition($conn);   break;
        case 3:  sortDataDepartment($conn); break;
        case 4:  sortDataEmail($conn);      break;
        default: getAllData($conn);         break;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-12
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多