0

私は小さなサイト (大学院クラスのプロジェクト) に取り組んでおり、データを収集して MySQL データベースに渡す html フォームがたくさんあります。現在、各フォーム (ほとんどは別のページに存在します) は、フォーム アクションとして異なる php ファイルを呼び出します。サイトが成長するにつれて、これは少し混乱しています。すべてのフォームが送信時のアクションとして呼び出す単一のphpファイルを用意し、そのphpファイルでswitchステートメントを使用して実行するコードブロックを決定することは一般的ですか、または許容/推奨されるアプローチですか?

もしそうなら、フォームで非表示の入力タイプを使用して、どのスイッチケースを実行するかを示す必要がありますか?たとえば、フォームで:

<input type="hidden" name="my_case" value="add_user">

...

私のphpファイルで:

switch($_POST['my_case']) {

case 'add_user':
   // do soemthing
   break;
case 'del_user':
   // do something
   break;
}

ありがとう!

4

5 に答える 5

1

2 セント硬貨を手にしっかりと握って、この議論に足を踏み入れるつもりです。

単一のフォーム ハンドラーを使用するかどうかは、フォームがどの程度似ているか、または収集されたデータがどの程度かによって異なります。

多かれ少なかれ同じ (同じフィールド、同じロジック、フォームの各インスタンスのコンテンツを誰が電子メールで受け取るかなどのわずかな違い) であるフォームが多数ある場合、それらすべてを処理できる単一のハンドラーを用意します。フォームが最善の方法です。

フォームであるという事実以外に共通点がない (またはほとんどない) 多数のフォームがある場合、単一のハンドラーを持つことは最良の選択肢ではない可能性があります。そうは言っても、類似性に基づいてフォームを「ファミリー」にグループ化し、それらのファミリーごとにハンドラーを作成することができます。(つまり、「電子メールの送信」ファミリ、「ファイルのアップロード」ファミリなど)

ファイルが少ないということは、何かを探す必要がある場所が少なくなるため、メンテナンスに関しては確かにプラスになりますが、すべてを 1 つのファイルに詰め込むために、責任/機能の論理的な分離を犠牲にするべきではありません。

于 2012-12-07T03:32:56.953 に答える
1

これが行われる標準的な方法はないと思います..それはすべて好みの問題です..コードを書くことの素晴らしいところは、あなたがソリューションを作成できることです。後で再加工する必要があると判断した場合は、再加工できます。

コードのサイズが扱いにくくなっている場合は、いつでも個別のファイルに分割してから、必要なスクリプトを実行するために case ステートメントで include("file_name.php") を呼び出すことができます..

switch($_POST['my_case']) {
  case 'add_user':
    include("add_user.php");
    break;
  case 'del_user':
    include("del_user.php");
  break;
}

物事が非常に複雑になる場合は、クラスを検討してください。この場合、add メソッドと delete メソッドを持つユーザー クラスを作成し、そのユーザー クラスを含めて、次のように使用します。

$user = new User();

$user->add();
$user->delete();

私が言ったように、それはすべてあなたの特定のニーズに依存します. あなたに合ったものを見つけて、それを使ってください。

非表示の入力について回答するには、POST メソッドを使用する必要がある場合、これが必要になります。GET を使用して、フォーム URL のクエリ部分にある種のインジケーターを追加することもできます。?action=add のように

于 2012-12-07T03:18:09.470 に答える
0

最近では、RESTful API と呼ばれるものを実装します。POST に加えて、HTTP は DELETE、GET、および PUT メソッドをサポートします。送信のタイプを使用して、コードが実行するアクションを決定します。

于 2012-12-07T03:48:14.247 に答える
0

このようにすると、他のプログラマーがプログラム ロジックに従うために使用できる単一のエントリ ポイントが作成されます。50 個の PHP ファイルがあり、それぞれが異なるフォームまたは AJAX 要求の対象になっている場合、名前がどれほど適切であっても、コード ベースを見ている別のプログラマーはそれらが何のためにあるのかわかりません。このような単一のエントリ ポイントにより、あなたと他のプログラマーの両方にとって、読みやすさと保守性が容易になります。

編集:すべてのコードをその1つのファイルに入れることはお勧めしません。50 個の PHP ファイルを持つことができます。ただし、case ステートメントを含むこのファイルには、次のものを含めることができます。

switch($_POST['my_case']) {

    case 'add_user':
    include_once 'add_user_handler.php';
    // call function in add_user_handler.php to initiate execution
    break;

   case 'del_user':
   include_once 'del_user_handler.php';
   // call function in del_user_handler.php to initiate execution
   break;

   // And of course, good programming practice, use default
   default:
   exit("Unable to handle request");
   break;
}
于 2012-12-07T03:09:29.000 に答える
-2

OK、これについて読んだことはありませんが、私の場合、通常はフォームを使用しません。つまり、従来のボタン「送信」は使用しません。代わりに、ajax を使用してすべてを送信し、イベントを介して、ユーザーが画像のクリック (ボタンなど) など。ポイントは、これのおかげで、コントローラーのみを使用して、セクションから異なる部分 (フォームが異なる場合など) を送信できることです (これはあなたの問題です)。CONTROLLER--VIEW--FORMS_OF_THIS_VIEW を結び付けているため、この方法ですべてを非常に適切に処理できます。通常、質問 (車、設定、オファー、ログインなど) と一致するビューとコントローラーがあるため、すべての情報を管理するのに適した方法です。このようにして、すべてを非常に簡単に見つけることができます (コントローラー、ビュー、すべてのフォーム、プロセス)

于 2012-12-07T03:09:42.337 に答える