0

对不起一个菜鸟问题。我的 php 脚本是这样组织的:

switch(true)
{
case (isset($_POST['login'])):
// ...some code to check a login
break;
case (isset($_POST['register'])):
// ... some script to register a new user
etc.

通过使用表单中提交按钮的名称来控制对每个代码部分的访问。我借用了一个菜单系统,它使用带有命令参数的 URL 而不是提交按钮。示例 URL 如下所示:

http://MYIPADDRESS/gradebook/login.php?guid=51913a6e37e1b&command=newclass

因此,为了使用 URL 获得对程序流的相同控制,我尝试在文件开头添加以下内容:

if (isset($_GET['command']))
{
  switch ($_GET['command'])
  {
    case 'newclass': 
      $_POST['basicsettings']='basicsettings';
      $guid=$_GET['guid'];
      break;
    case 'logout':
      $_POST['logout']='logout';
      break;
    case 'continue':
      $guid=$_GET['guid'];
      $_POST['continue']='continue';
      break;
 }
}

这不起作用,因为 $_GET 全局数组仅在下一个操作发出新 URL 时才会重置,并且在大多数情况下,用户将使用表单上的提交按钮而不选择另一个菜单项。您不能在 php 脚本中对 $_GET 使用 unset,因为它只会影响本地副本。我尝试设置一个 $_SESSION 命令变量,并使用 header("Location:login.php") 刷新页面以重置 $_GET 全局数组,但这也不起作用。这是修改后的代码:

session_start();

if (isset($_GET['command']))  // if program flow control came from a URL
{
  switch ($_GET['command'])   // check which script section to use
  {
    case 'newclass': 
      $_POST['basicsettings']='basicsettings';
      $guid=$_GET['guid'];
      $_SESSION['command']='basicsettings';
      $_SESSION['guid']=$guid;
      header("Location:login.php");
      break;
    case 'logout':
      $_POST['logout']='logout';
      $_SESSION['command']='logout';
      header("Location:login.php");
      break;
    case 'continueteacher':
      $guid=$_GET['guid'];
      $_POST['continueteacher']='continueteacher';
      $_SESSION['command']='continueteacher';
      $_SESSION['guid']=$guid;
      header("Location:login.php");
      break;
  }
}

if (isset($_SESSION['command']))
{
  $var=$_SESSION['command'];
  $_POST[$var]=$_SESSION['command'];
  $guid=$_SESSION['guid'];
  $_REQUEST['guid']=$_SESSION['guid'];
  unset($_SESSION['command']);
}

switch(true)
{ .. ...etc.

我意识到解决此问题的一种方法是将菜单系统更改为使用提交按钮而不是 URL,但这也有一些缺点。有什么办法可以使这项工作?假设您可以看到我正在尝试做的事情并且有意义?

4

0 回答 0