为什么我的php重定向不起作用';?!尽管标题重定向,但仍保持在同一页上

为什么我的php重定向不起作用';?!尽管标题重定向,但仍保持在同一页上,php,html,mysql,forms,validation,Php,Html,Mysql,Forms,Validation,我有一个数据库连接、表单验证和邮件发送的表单 一切都很完美。无论我怎么尝试,只有通过标题重定向到我的“endcard.php”都不起作用 这里是form.php的一个片段。输入被发送到validation.php。 (我意识到自己的不安全感) php将初始化SQL查询,发送邮件,并应重定向到我的“endcard.php” //declare header header('Location: https://www.mywebsite/endcard.php');

我有一个数据库连接、表单验证和邮件发送的表单

一切都很完美。无论我怎么尝试,只有通过标题重定向到我的“endcard.php”都不起作用

这里是form.php的一个片段。输入被发送到validation.php。
(我意识到自己的不安全感)

php将初始化SQL查询,发送邮件,并应重定向到我的“endcard.php”

   //declare header
    header('Location: https://www.mywebsite/endcard.php');
     
   //declare variables and connect them to html form fields
   ... (works fine)

   //initialize sql queri
   ... (works fine)
  // sends mail
   ..(works fine)

这个现在不行了。提交表单时,上面的所有内容都可以正常工作,但我仍然停留在表单页面上,但应该被重定向到
endcard.php

    
// Send mail with custom headers
    if(mail($recipient, $subject, $message, $headers)) {
      require(' https://www.mywebsite.com/endcard.php');
      // I tried inlcude, didnt work either..
      // also tried to put the header in here. Also didnt work..
    }
我猜
操作=“
不允许任何重定向

但我不知道如何通过


有什么想法吗?

在调用
header()
之后,您应该
退出()
,这样HTTP响应就不包含正文:

// Send mail with custom headers
if(mail($recipient, $subject, $message, $headers)) {
    header('Location: https://www.mywebsite.com/endcard.php');
    exit();
}


另外,请确保在调用
header()
之前没有输出任何HTML,否则将不会发送头:

在调用
header()
之后,您应该
exit()
,以便HTTP响应不包含正文:

// Send mail with custom headers
if(mail($recipient, $subject, $message, $headers)) {
    header('Location: https://www.mywebsite.com/endcard.php');
    exit();
}


还要确保在调用
header()
之前没有输出任何HTML,否则将无法发送头:

我用新的逻辑解决了它!标题不是问题

  • 我没有使用通常会重新加载表单页面的
    action=“action=“
    ,而是使用
    action=“validation.php”
    仅当错误变量不为空时才加载form.php!如果它们为空,则加载signup.php。我像以前一样使用了标题,而且效果很好。
    也许最重要的修复是正确使用includes/includes_中的路径一次。
    在我刚刚使用
    includes('path in my ftp server')之前,在某些情况下有效
    但我发现,不能以这种方式包含相对于webroot的php文件,因为如果使用斜杠作为第一个字符,引用将比文档根更深入。因此,我没有使用basepath,而是这样做了:

它工作得很完美,也是更好的代码

我用新的逻辑解决了它!标题不是问题

  • 我没有使用通常会重新加载表单页面的
    action=“action=“
    ,而是使用
    action=“validation.php”
    仅当错误变量不为空时才加载form.php!如果它们为空,则加载signup.php。我像以前一样使用了标题,而且效果很好。
    也许最重要的修复是正确使用includes/includes_中的路径一次。
    在我刚刚使用
    includes('path in my ftp server')之前,在某些情况下有效
    但我发现,不能以这种方式包含相对于webroot的php文件,因为如果使用斜杠作为第一个字符,引用将比文档根更深入。因此,我没有使用basepath,而是这样做了:

它工作得很完美,也是更好的代码

我还在我的表格页上。最奇怪的是,它没有显示表单本身,只显示网站描述。所以它没有重定向到我的终端卡。。?!它变得更奇怪了!在本地主机中打开窗体时。它重定向到我的名片…我仍然在我的表格页上。最奇怪的是,它没有显示表单本身,只显示网站描述。所以它没有重定向到我的终端卡。。?!它变得更奇怪了!在本地主机中打开窗体时。它重定向到我的名片。。。
// Send mail with custom headers
if(mail($recipient, $subject, $message, $headers)) {
    header('Location: https://www.mywebsite.com/endcard.php');
    exit();
}
     $path = $_SERVER['DOCUMENT_ROOT'];  
     $path .= "/path in my ftp server.php";  
     include_once($path);