0

次の形式の「index.php」というランディング ページがあります。

<form action="auto_mail.php" method="post">
   <input id="signup" class="span8" type="text" placeholder="Your email" name="signup">
   <input type="submit">
   <?php
     if (isset($_SESSION['got_it']))
     {echo "<b>You're all signed up!</b>}
   ?></form>

私が持っているファイルauto_mail.phpで:

// code scrubbing user input...
$user_email = $_POST['signup'];
session_start();
$_SESSION['got_it'] = '1';
// code sending me an email when someone signs up.
echo <<<EOD
  </b>
  <meta http-equiv="refresh" content="0, url=index.php">
  </div>
  </body>
  </html>
EOD;
?>

私は他のいくつかのSOの質問($_SESSION を使用してデータを運ぶ)を見てきましたが、それは私が探しているものではありません。

私が望むのは、ユーザーが有効な電子メールを入力したときに「あなたはすべてサインアップしています」と表示されることだけです。メール確認メールがバックグラウンドで送信されます。このコードはぎこちなく、ぎこちなく感じます。また、auto_mail.phpページが短時間点滅します。

を設定しようとしましたが、直接アクセスできないように<form action="index.php"...設定しているため機能しません。auto_mail.php

と の両方を処理せずに、または少なくともそれらをより適切に使用するauto_mail.phpことなく、有効な電子メールアドレスをチェックして確認メールを送信するのコードをどのように使用できますか?$_POST$_SESSION

4

3 に答える 3

6

ページをまったくリロードしたくない場合は、フォームを使用する代わりに、AJAX を使用してフォームを送信する必要がありますPOST

jQuery または Mootools を使用している場合、どちらにも ajax 呼び出しを処理するラッパーが組み込まれています。ヘルパー ライブラリがなければ、XMLHttpRequestを自分で作成する方法を検討する必要があります。

それ以外は、伝統的に、ユーザーを「送信されたフォーム」ページにリダイレクトするか、フォームを同じページに送信します(この場合、受信した場合にフォームデータを処理する PHP コードがあります) 。 .actionindex.php

于 2013-03-15T23:08:22.523 に答える
0

私はあなたが望むものを完全に手に入れません。

フォームが送信された後、メールアドレスを確認しようとしていると思います。ただし、検証を行う http 経由でファイルにアクセスすることはできません。

auto_mail.php を含めることを考えましたか?

于 2013-03-15T23:15:08.690 に答える
-2

一般的な PHP フレームワークの 1 つを使用することを検討する必要があると思います。上記の例では何も使用していないと思います。MVC 構造も提供する優れたフレームワークにより、このような操作を、想像もできないほど簡単な方法で行うことができます。

MVC 構造に分割するpostと、依存関係とそれによって作成された結果の送信と表示を 1 つのアクションで処理することが非常に簡単になります。最初は良いフレームワークを学ぶのは時間の無駄に思えるかもしれませんが、信じてください - それはすぐに報われます。

Kohana Frameworkまず、野心がある場合は、またはを見ることをお勧めします- Symfony Framework

于 2013-03-15T23:14:34.700 に答える