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.

これを修正する 1 つの方法は、URL の代わりに送信ボタンを使用するようにメニュー システムを変更することですが、これにはいくつかの欠点もあります。これを機能させる方法はありますか?私がやろうとしていることを見て、それが理にかなっていると仮定しますか?

4

0 に答える 0