Javascript 如何在登录后在php中实现欢迎消息的过渡效果?
我有以下代码在网站上设置cookie:Javascript 如何在登录后在php中实现欢迎消息的过渡效果?,javascript,php,html,cookies,Javascript,Php,Html,Cookies,我有以下代码在网站上设置cookie: if (isset($_COOKIE[$_first_name.$_last_name])){ echo '<html><head></head><body></br></br></br><h1><center>Hello, '.$_COOKIE[$_first_name.$_last_name].'! Welcome back!</
if (isset($_COOKIE[$_first_name.$_last_name])){
echo '<html><head></head><body></br></br></br><h1><center>Hello, '.$_COOKIE[$_first_name.$_last_name].'! Welcome back!</center></h1></body></html>';
sleep(2);
header('Location: ../index.php');
}
else if (setcookie( $_first_name.$_last_name, $_first_name.' '.$_last_name, time() + 60*60*24*5))
;
if(isset($\u COOKIE[$\u first\u name.$\u last\u name])){
回音“你好,$\u COOKIE[$\u first\u name.$\u last\u name]”欢迎回来;
睡眠(2);
标题('Location:../index.php');
}
else if(setcookie($\u first\u name.$\u last\u name,$\u first\u name.''.$\u last\u name,time()+60*60*24*5))
;
第一次它会注册名字,第二次,它不会给我欢迎的信息,会立即引导我到主页。我希望它等待2秒钟,让用户看到欢迎消息,然后自动将用户引导到主页
更多信息
<?php
//error_reporting(E_ERROR);
session_start();
include('loginScript.php'); // Includes Login Script
if(isset($_SESSION['login_user'])){
}
?>
<html>
...
...
</html>
...
...
在上面的代码中,我调用了loginScript.php,其中包含检查cookie的代码
loginScript.php文件中的节
if($rows==1){
$result=mysqli\u fetch\u数组($query);
$\u会话['login\u user']=$username;//初始化会话
//$\会话['items'][]=$username;
$\会话['firstname']=$result['firstname'];
$\u first\u name=$\u会话['firstname'];
$\会话['lastname']=$result['lastname'];
$\u last\u name=$\u会话['lastname'];
如果(isset($\u COOKIE[$\u first\u name.$\u last\u name])){
回声“你好,
“.$\u COOKIE[$\u first\u name.$\u last\u name]。”!欢迎回来!
';
ob_flush();
冲洗();
//睡眠(2);
echo“设置超时(()=>
{document.location.href='index.php'},2000);“;
}
else if(setcookie($\u first\u name.$\u last\u name,$\u first\u name.)
“.$”姓氏,时间()+60*60*24*5)){
//整个登录页面其余部分的代码
}
}
否则{
$error=“用户名或密码无效”;
}
mysqli_close($connection);//闭合连接
首先,如果不在php中刷新,就不能对输出进行睡眠。你得打电话
ob_flush();
flush();
为了迫使php在睡觉和执行其余代码之前输出内容
其次,在更改标题之前不能输出任何内容-在您的情况下,设置位置标题。一个简单的解决方法是使用javascript重定向页面。所以你会有这样的东西:
if (isset($_COOKIE[$_first_name.$_last_name])){
echo '<html><head></head><body></br></br></br><h1><center>Hello, '.$_COOKIE[$_first_name.$_last_name].'! Welcome back!</center></h1></body></html>';
ob_flush();
flush();
sleep(2);
echo "<script>document.location.href='index.php'</script>";
die(); //added to prevent the rest of the output
}
else if (setcookie( $_first_name.$_last_name, $_first_name.' '.$_last_name, time() + 60*60*24*5))
;
最后但并非最不重要的是,正如李察在评论中提到的,从客户端处理这一切实际上是一个更好的实践,那么你也将对过渡等的更多控制权,这将超出这个问题的范围,但是你可以考虑重新设计程序流程,正如他所建议的那样。否则,上述解决方法应该可以满足您的需要。
通过css3实现过渡效果,通过Ajax(JS)将表单发送到服务器,并在成功完全“登录”后使用JS创建重定向到新页面。我有两个问题,第一个问题,如果我使用第二个代码,在显示欢迎信息后,它将引导我首先返回登录页面,然后返回主页。但是我不想要登录页面。第二个问题是,如果我使用第一个代码,它会工作,它不会向我显示登录页面,并且会直接显示主页,但是,它不会等待2秒,我也将其更改为4秒,但它会非常快地指示我。它看起来并不是在睡觉,它只是在几秒钟内显示欢迎信息。是的<代码>刷新也依赖于服务器,请查看此处的文档。这就是为什么第一种方法是不可取的。至于第二种方法,为什么不让它显示登录页面?是否因为页面下方还有其他输出?如果您将登录页面输出包装在else If(setcookie..)
中,那么您将看不到登录页面的其余部分,因此欢迎说明在哪个页面上没有区别。我已经编辑了答案以显示你可以在哪里添加代码。我刚刚编辑了这篇文章。你能查一下上面的“更多信息”部分吗?因为我是从另一个php文件调用SetCookie,而且SetCookie嵌入到另一个if语句中,所以我也展示了它。添加一个die()
退出脚本的其余部分而不输出它们。这不是最好的做法,但它经常被使用,只要确保您完成了所有任务并关闭了所有需要关闭的任务。
if (isset($_COOKIE[$_first_name.$_last_name])){
echo '<html><head></head><body></br></br></br><h1><center>Hello, '.$_COOKIE[$_first_name.$_last_name].'! Welcome back!</center></h1></body></html>';
ob_flush();
flush();
sleep(2);
echo "<script>document.location.href='index.php'</script>";
die(); //added to prevent the rest of the output
}
else if (setcookie( $_first_name.$_last_name, $_first_name.' '.$_last_name, time() + 60*60*24*5))
;
if (isset($_COOKIE[$_first_name.$_last_name])){
echo '<html><head></head><body></br></br></br><h1><center>Hello, '.$_COOKIE[$_first_name.$_last_name].'! Welcome back!</center></h1></body></html>';
ob_flush();
flush();
//sleep(2);
echo "<script>setTimeout(()=>{document.location.href='index.php'},2000);</script>";
}
else if (setcookie( $_first_name.$_last_name, $_first_name.' '.$_last_name, time() + 60*60*24*5)){
// Code of rest of the entire login page
}