-1

ユーザー登録用の基本的な HTML/PHP フォームに取り組んでいます。正常に動作しますが、解決したい問題があります。テスト中に、送信を押してパスワードが一致しない場合、(設計上) エラー ページが表示され、登録にリダイレクトされて、すべてをもう一度入力する必要があることに気付きました。フィールドにユーザーの入力を入力したままにしておく方法はありますか?

4

4 に答える 4

4

最善の方法は、AJAX を使用して、最初からページを離れる必要がないようにすることです。

それができない場合history.back()、ユーザーを送り返すために使用すると、フォーム情報が保持されます。

それができない場合は、フォーム データを$_SESSION変数に保存し、それを使用してフォームを再設定します。

于 2013-08-14T22:57:59.667 に答える
1

セッションで送信されたデータを保存できます。

- によってphpセッションを開始し<?php session_start(); ?>ます。この関数はタグの前に表示する必要があります

-次のように変数をセッションに保存します。$_SESSION['myVar']=$myVar;

-次の方法で(別のページで)取得します。$myVarFromSession = $_SESSION['myVar'];

-最後に、セッションとそのコンテンツを破棄します:<?php session_destroy(); ?>

于 2013-08-14T23:33:42.473 に答える
0

ユーザーのパスワードをセッションに保存したり、クエリ パラメーターで渡したりすることは、セキュリティに問題があります。そのデータをリダイレクトして失うことを避けるために、同じフォーム ページにエラーを表示する必要があります。そうすれば、エラーは引き続き表示され、スクリプトには $_POST からのユーザーの入力データが引き続き含まれます。もちろん、フレームワークを使用するという Dan Schmidt の推奨事項は優れています。このフレームワークの目的は、あなたが現在経験している頭痛からあなたを救うことです。

エラーページにリダイレクトしたい場合は、ユーザー名をセッションに保存できますが、前述のようにパスワードを保存しないことを強くお勧めします.

于 2013-08-16T07:19:27.580 に答える
0

クイック — 汚い

  1. クエリ文字列でユーザー名/パスワードを送り返します (?username=...&password=...)
  2. リダイレクトする前に SESSION 変数を設定する

より良い — ロジックをクラスにカプセル化する

要求、フォーム、検証、エラー メッセージ、およびレンダリング/ルーティング ロジックを処理するクラスに、さまざまな可動部分をカプセル化することを強くお勧めします。これは、手動でエラー メッセージやデータをスクリプト間でやり取りするよりもはるかに簡単です。サイトやアプリが大きい場合、またはベスト プラクティスに従ってより優れた開発者になりたい場合は、クラスが最適です。

さまざまなフレームワークがこの問題をどのように処理するかを見てみましょう。Yii、Laravel、Symfony2 は良い例です。箱から出してすぐに、この問題を迅速かつ簡単に解決できます。

サンプルコード

class LoginForm
{
    public $password;
    public $username;
    public function validate()
    {
        // Perform validation
    }
}

class HttpRequest
{
    public function getIsPostRequest()
    {
        return 'POST' === $_SERVER['REQUEST_METHOD'];
    }
    public function getPost($name, $default=null)
    {
        return isset($_POST[$name]) ? $_POST[$name] : $default;
    }
}

// This code processes the request to your login page.
// View::renderFile() renders a "view", which is a mix
// of HTML/PHP code that gets served back to the browser.
$request = new HttpRequest();
$form = new LoginForm();
if ($request->getIsPostRequest()) {
    $form->username = $request->getPost('username');
    $form->password = $request->getPost('password');
    if ($form->validate()) {
        // Login the user...
    }
}
View::renderFile('login.php', array(
    'form' =>$form,
));
于 2013-08-15T00:14:39.150 に答える