【问题标题】:$_SESSION variable used to check if form has been submitted$_SESSION 变量用于检查表单是否已提交
【发布时间】:2013-03-15 23:05:10
【问题描述】:

我有一个名为“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 问题 (Using $_SESSION to carry data),但这不是我想要的。

我只想让用户在输入有效电子邮件时看到“你们都已注册”;在后台发送电子邮件确认电子邮件。这段代码感觉笨拙和尴尬。它还会短暂闪烁auto_mail.php 页面。

我尝试设置&lt;form action="index.php"...,但它不起作用,因为我设置了auto_mail.php,因此您无法直接访问它。

如何在不处理$_POST$_SESSION 的情况下使用auto_mail.php 中的代码来检查有效的电子邮件地址并发送确认电子邮件,或者至少更好地使用它们?

【问题讨论】:

  • 我用那种东西让我的网站登录,它工作得很好。我将 ajax 与 jquery 一起使用,并且传统的重新加载也都有效。
  • 你在 index.php 上使用过 session_start() 吗?

标签: php html post session-variables


【解决方案1】:

如果您不想重新加载任何页面,则必须使用 AJAX 发送表单,而不是使用表单 POST

如果您使用 jQuery 或 Mootools,它们都内置了包装器来处理 ajax 调用。如果没有帮助程序库,您将不得不考虑自己创建一个 XMLHttpRequest

除此之外,传统上,您会将用户重定向到“提交的表单”页面,或者或者将表单 action 发送到同一页面(在您的情况下,@ 987654324@,并有 PHP 代码来处理收到的表单数据)。

【讨论】:

    【解决方案2】:

    我没有完全得到你想要的。

    我认为您尝试验证邮件地址(之后?)该表格已发送。但您无法通过 http 进行验证访问该文件。

    您是否考虑过包含 auto_mail.php?

    【讨论】:

    • 我尝试使用 include,但最终我只发布了来自 auto_mail.php 的 HTML 以及来自 index.php 的 HTML。
    【解决方案3】:

    我认为您应该考虑使用一种流行的 PHP 框架。我猜你在上面的例子中没有使用任何东西。还提供 MVC 结构的良好框架允许以您甚至无法想象的简单方式进行这样的操作。

    将其分解为 MVC 结构甚至可以使处理post 发送和显示依赖关系以及它在一个操作中产生的结果变得非常简单。 一开始学习好的框架可能看起来是浪费时间,但相信我——它会很快得到回报。

    首先,我建议您查看Kohana Framework,或者,如果您有野心,请查看Symfony Framework

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多