初学者在这里。 我不明白为什么在使用标头语句时没有弹出警报,但是在删除标头位置行时警报弹出就很好了。真的很困惑:(
<?php
include "connect.php";
session_start();
// if(isset($_SESSION['user_id'])
if(isset($_POST['register'])){
echo '<script language="javascript">';
echo 'alert("message successfully sent")';
echo '</script>';
$name=$_POST["name"];
$roll=$_POST["roll"];
$year=$_POST["year"];
$pass=$_POST["register_password"];
$sql="INSERT INTO students (roll_id,name,year,password) VALUES
('$roll','$name','$year','$pass')";
$query=mysqli_query($conn,$sql);
if(!$query)
{
echo "Not Inserted" . mysqli_error($conn);
}
header("location:index.php?registered=true");
}
?>
答案 0 :(得分:1)
问题是header()
需要在任何输出之前发送,以便将页面重定向到另一个URL。那时,您已经在回声了,因此通过标头进行重定向将无效。
在这种情况下,(要弹出消息然后重定向的位置),您应该使用javascript重定向:
echo '<script language="javascript">';
echo 'window.location.replace("/index.php?registered=true");';
echo '</script>';
这将输出您的弹出消息。用户单击确定后,将运行javascript重定向代码,并将页面重定向到/index.php?registered=true
。
此外,您也可以将警报框添加到您要重定向的页面上。请参见以下示例index.php
文件:
<?php
if (isset($_GET['registered'])) {
echo '<script>alert("You have registered!");</script>';
}
//Continue with rest of page.
如果您走这条路线,请不要在寄存器页面上包含ANY输出(无回声),因此header()
是唯一的输出。理想情况下,这将是更好的用户体验,因为他们在单击显示alert("message successfully sent")
的框时没有弹出白色页面。
答案 1 :(得分:1)
这是因为在显示JavaScript警报之前,位置标头会重定向到其他页面。
将警报添加到目标页面,它将在此处显示。
答案 2 :(得分:0)
像这样回声:
echo "<script>alert('message sent'); window.location.href='url';</script>";