初心者の質問で申し訳ありません。私の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 の代わりに送信ボタンを使用するようにメニュー システムを変更することですが、これにはいくつかの欠点もあります。これを機能させる方法はありますか?私がやろうとしていることを見て、それが理にかなっていると仮定しますか?