我在PHP中遇到一个奇怪的问题。基本上,当用户提交联系表单时,处理脚本会在完成时设置会话($_SESSION['action']='sent';
)。然后,用户将被发送回他们发送表单的页面,并使用以下代码显示消息:
$action = $_SESSION['action'];
if ( $action == 'sent' )
{
echo '<p>Thank you for contacting us, we will be in touch with you ASAP.</p>';
unset($_SESSION['action']);
}
会话未设置,因此如果他们刷新页面或离开并返回,则该消息将不再显示。
基本上问题是当会话未设置时,似乎从脚本的最开始就取消设置,以便不显示消息。 <{1}}语句显然正在运行,因为会话未被设置,但消息未显示。
之前我曾多次使用过这个完全相同的脚本,并且在其他网站上完全可以正常工作(在同一台服务器上,设置完全相同)。
任何帮助/建议都将不胜感激!
答案 0 :(得分:0)
您是否已初次化会话?
在浏览器输出内容之前session_start();
?
答案 1 :(得分:0)
尝试做session_destroy();而不是取消设置($ _ SESSION); 你能否给我们开始会议的部分以及你将“行动”设置为“已发送”的位置?
答案 2 :(得分:0)
您好Tom确保启动会话的脚本位于同一目录中 - 例如,访问同一会话的命令 - 可以在一个下面是https,一个在http下 或者如果One在/下,则另一个在/ dir1下,并且/ dir1首先运行。会话创建的cookie是/ dir1和更深,所以其他脚本无法读取它;它看不到任何会话,所以它开始一个新的。
我不喜欢这个会议的东西,但它可能值得一试。 - 爸爸
答案 3 :(得分:0)
您拥有的代码是正确的。由于会话未被设置,我们知道if块中的语句正在执行。可能是输出实际上是由echo显示的,但是浏览器没有显示(如果你的css代码配置了这可能会发生这种情况)。因此,只需检查输出页面的来源并检查源是否包含输出消息。
换句话说,您可以在回显中放置一个javascript警告框,看看它是否显示警告框。
echo "<script type='text/javascript'> alert('Hi'); </script>";
这应该覆盖任何隐藏的CSS代码。
答案 4 :(得分:0)
旧线程,但我想补充一点,在这种情况下我更喜欢isset():
<?php
session_start();
if(isset($_SESSION['sent'])){
echo "Successfully submitted form!";
$_SESSION = array();
session_regenerate_id();
session_unset();
session_destroy();
exit;
}
if(isset($_POST['submit'])){
//validate input & process form
$_SESSION['sent'] = 1;
header("location:form.php"); // name of this file
exit;
}
echo "Enter your email<br />
<form action='' method='post'>
<input type='text' name='email' />
<input type='submit' name='submit' />
</form>";
exit;
?>