我有一个名为`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
页面。
我尝试设置<form action="index.php"...
,但它不起作用,因为我设置了auto_mail.php
,因此您无法直接访问它。
如何使用auto_mail.php
中的代码检查有效的电子邮件地址并发送确认电子邮件,而无需同时处理$_POST
和$_SESSION
,或者至少更好地使用它们?
答案 0 :(得分:6)
如果您不希望任何页面重新加载,则必须使用AJAX发送表单,而不是使用POST
形式。
如果您使用的是jQuery或Mootools,它们都内置了包装来处理ajax调用。如果没有帮助程序库,您将不得不考虑自己制作一个XMLHttpRequest。
除此之外,传统上,您会将用户重定向到“表单已提交”页面,或者或,将表单action
发送到同一页面(在您的情况下) ,index.php
,并且如果收到表单数据,则使用PHP代码处理表单数据。
答案 1 :(得分:0)
我完全没有得到你想要的东西。
我认为您尝试验证已发送表单的邮件地址(之后?)。但是您无法通过进行验证的http访问该文件。
您是否考虑过包含auto_mail.php?
答案 2 :(得分:-2)
我认为你应该考虑使用一种流行的PHP框架。我猜你在上面的例子中没有使用任何一个。同样提供MVC结构的良好框架允许以一种你甚至无法想象的简单方式进行这样的操作。
将其分解为MVC结构甚至可以非常简单地处理post
在一个动作中发送和显示它所产生的依赖关系和结果。
一开始学习好框架可能看起来浪费时间,但相信我 - 它会很快得到回报。
首先,我建议您查看Kohana Framework
,或者,如果您有野心 - Symfony Framework
。