提交表单后如何重定向,但我已经调用了会话的标头


How do I redirect after a form is submitted, but I have already called a header for sessions?

我有一个个人资料更新表单,我的用户可以从他们的个人资料页面中提交。配置文件页面使用会话,因此标头已设置为在未登录时重定向。问题是,我希望表单重定向到他们的个人资料页面并在提交表单后显示更新的信息。我尝试过JS重定向,JS和PHP中的函数 - 没有运气。这是我的 php 的一个例子

<?php
if(isset($_SESSION["Username"])){
}else{
    header('Location: login.php');
}
?>

这是 php 的形式

 <?php
    if(isset($_POST['update'])){
        $UpdateFName = $_POST['fname'];
        $UpdateLName = $_POST['lname'];
        $UpdateEmail = $_POST['email'];
        $UpdateAddress = $_POST['address'];
        $UpdateCity = $_POST['city'];
        $UpdateZip = $_POST['zip'];
        $UpdatePrimaryPhone = $_POST['primaryphone'];
        $UpdateSecondaryPhone = $_POST['secondaryphone'];
        $UpdatePlayerFName = $_POST['playerfname'];
        $UpdatePlayerLName = $_POST['playerlname'];
        $UpdateTeam = $_POST['team'];
        $UpdatePlayerDOB = $_POST['playerdob'];
        $sql = $conn->query("UPDATE user_reg SET Fname = '{$UpdateFName}', Lname = '{$UpdateLName}', Email = '{$UpdateEmail}', Address = '{$UpdateAddress}', City = '{$UpdateCity}', Zip = '{$UpdateZip}', PrimaryPhone = '{$UpdatePrimaryPhone}', SecondaryPhone = '{$UpdateSecondaryPhone}', PlayerFName = '{$UpdatePlayerFName}', PlayerLName = '{$UpdatePlayerLName}', Team = '{$UpdateTeam}', PlayerDOB = '{$UpdatePlayerDOB}' WHERE Username= '$user' ");
    }
?>

这是整页

<?php require 'Connections/mysqlilive.php'; ?>
    <?php
    session_start();
    if(isset($_SESSION["Username"])){
    }else{
        header('Location: login.php');
    }
    $user = $_SESSION["Username"];
    $result = $conn->query("select * from user_reg where Username='$user'");
    $row = $result->fetch_array(MYSQLI_BOTH);
    $_SESSION["Fname"] = $row['Fname'];
    $_SESSION["Lname"] = $row['Lname'];
    $_SESSION["Email"] = $row['Email'];
    $_SESSION["Address"] = $row['Address'];
    $_SESSION["City"] = $row['City'];
    $_SESSION["Zip"] = $row['Zip'];
    $_SESSION["PrimaryPhone"] = $row['PrimaryPhone'];
    $_SESSION["SecondaryPhone"] = $row['SecondaryPhone'];
    $_SESSION["PlayerFName"] = $row['PlayerFName'];
    $_SESSION["PlayerLName"] = $row['PlayerLName'];
    $_SESSION["Team"] = $row['Team'];
    $_SESSION["PlayerDOB"] = $row['PlayerDOB'];
    $_SESSION["Waiver"] = $row['Waiver'];
    $_SESSION["BirthCert"] = $row['BirthCert'];
    if(isset($_POST['update'])){
        $UpdateFName = $_POST['fname'];
        $UpdateLName = $_POST['lname'];
        $UpdateEmail = $_POST['email'];
        $UpdateAddress = $_POST['address'];
        $UpdateCity = $_POST['city'];
        $UpdateZip = $_POST['zip'];
        $UpdatePrimaryPhone = $_POST['primaryphone'];
        $UpdateSecondaryPhone = $_POST['secondaryphone'];
        $UpdatePlayerFName = $_POST['playerfname'];
        $UpdatePlayerLName = $_POST['playerlname'];
        $UpdateTeam = $_POST['team'];
        $UpdatePlayerDOB = $_POST['playerdob'];
        $sql = $conn->query("UPDATE user_reg SET Fname = '{$UpdateFName}', Lname          = '{$UpdateLName}', Email = '{$UpdateEmail}', Address = '{$UpdateAddress}', City  = '{$UpdateCity}', Zip = '{$UpdateZip}', PrimaryPhone = '{$UpdatePrimaryPhone}',  SecondaryPhone = '{$UpdateSecondaryPhone}', PlayerFName =  '{$UpdatePlayerFName}', PlayerLName = '{$UpdatePlayerLName}', Team =  '{$UpdateTeam}', PlayerDOB = '{$UpdatePlayerDOB}' WHERE Username= '$user' ");
        header("refresh:3; myvbaaccount.php");
        echo("Please wait while we update your account.");
    }
   ?>
   <!doctype html>
   <html>
   <head>
   <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
   <link href="main.css" rel="stylesheet" type="text/css">
   <link rel="stylesheet" href="font-awesome-4.5.0/css/font-awesome.min.css"/>
   <link rel="stylesheet" type="text/css"       href="dreamcodes/social_icons/tsc_social_icons.css" />
   <script src="//use.edgefonts.net/black-ops-one.js"></script>
   <meta charset="utf-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <link rel="stylesheet" href="styles.css">
   <script src="http://code.jquery.com/jquery-latest.min.js"   type="text/javascript"></script>
   <script src="script.js"></script>
   <title>Update My Account</title>
   </head>
   <body>
   <div id="mainwrap">
   <div id="headerwrap">
    <div id="headertext"><h1 class="header1">valley baseball academy</h1>
        <h3 class="header3">Better.Faster.Stronger.</h3></div>
    <div id="headerpicture"><img src="Assets/VBA black150px.png" alt="vbablack">     <p class="phone">209.380.7721</p></div>
   </div>
   <div id="cssmenu">
   <ul>
   <li><a href="home.html"><span>Home</span></a></li>
   <li><a href="myvbaaccount.php"><span>My VBA Home</span></a></li>
   <li><a href="logout.php"><span>Logout</span></a></li>
   <li><a href="contactus.html"><span>Contact Us</span></a></li>
   <li><a href="http://www.facebook.com/valleybaseballinoakdale"><i class="fa    fa-facebook-square fa-2x"></i></a></li>
   <li><a href="http://www.twitter.com/valleybaseball3"><i class="fa fa-twitter-  square fa-2x"></i></a></li>
   <li><a href="http://www.instagram.com/valleybaseballoakdale"><i class="fa fa- instagram fa-2x"></i></a></li>
   </ul>
   </div>
   <div id="topcontent">
    <div id="tccol1">
        <img class="logo" src="Assets/myvbalogo.png" alt="myvbalogo">
    </div>
    <div id="tccol2"><h3 class="subheader">Welcome <?php echo  $_SESSION['Username']; ?>!</h3></br><h3 class="subheader">Update Your  Account</h3>
    <form action="" method="post" id="updateaccount">
    <div class="formelement2"><input name="fname" type="text" required  class="tfield3" id="fname" value="<?php echo $_SESSION["Fname"]; ?>"></div>
    <div class="formelement2"><input name="lname" type="text" required class="tfield3" id="lname" value="<?php echo $_SESSION["Lname"]; ?>"></div>
    <div class="formelement2"><input name="email" type="text" required class="tfield3" id="email" value="<?php echo $_SESSION["Email"]; ?>"></div>
    <div class="formelement2"><input name="primaryphone" type="text" required class="tfield3" id="primaryphone" value="<?php echo $_SESSION["PrimaryPhone"]; ? >"></div>
    <div class="formelement2"><input name="secondaryphone" type="text" required  class="tfield3" id="secondaryphone" value="<?php echo  $_SESSION["SecondaryPhone"]; ?>"></div>
    <div class="formelement2"><input name="address" type="text" required class="tfield3" id="address" value="<?php echo $_SESSION["Address"]; ?>"></div>
    <div class="formelement2"><input name="city" type="text" required class="tfield3" id="city" value="<?php echo $_SESSION["City"]; ?>"></div>
    <div class="formelement2"><input name="zip" type="text" required class="tfield3" id="zip" value="<?php echo $_SESSION["Zip"]; ?>"></div>
    <h3 class="subheader">Player Information</h3>
    <div class="formelement2"><input name="playerfname" type="text" required class="tfield3" id="playerfname" value="<?php echo $_SESSION["PlayerFName"]; ?>"></div>
    <div class="formelement2"><input name="playerlname" type="text" required class="tfield3" id="playerlname" value="<?php echo $_SESSION["PlayerLName"]; ?>"></div>
    <div class="formelement2"><input name="team" type="text" required class="tfield3" id="team" value="<?php echo $_SESSION["Team"]; ?>"></div>
    <label>Date of Birth</label><div class="formelement2"><input name="playerdob" type="text" required class="tfield3" id="playerdob" value="<?php echo $_SESSION["PlayerDOB"]; ?>"></div>
    <input name="update" type="submit" class="button" id="update" value="Update  Profile">
    </form>
    </div>
    <div id="tccol3">
    </div>
   </div>
   <h3 class="subheader">Upload Files</h3>
   <div id="bottomcontent">
    <div id="bccol1">
    <div class="formholder">
    <h4 class="subheader">Birth Certificate</h4>
    <P class="ptext">File size limited to 5MB</P>
        <form action="FileUpload.php" method="post" enctype="multipart/form-data" name="FileUploadForm" id="FileUploadForm">
    <label for="UploadFileField"></label>
    <input type="file" name="UploadBCField" id="UploadBCField" />
    <input type="submit" name="UploadButton" id="UploadButton" value="Upload" />
    </form>
    </div>
    </div>
    <div id="bccol2">
    <div class="formholder">
    <h4 class="subheader">Sports Physical</h4>
    <P class="ptext">File size limited to 5MB</P>
        <form action="FileUpload.php" method="post" enctype="multipart/form-data" name="FileUploadForm" id="FileUploadForm">
    <label for="UploadFileField"></label>
    <input type="file" name="UploadSPField" id="UploadSPField" />
    <input type="submit" name="UploadButton" id="UploadButton" value="Upload" />
    </form>
    </div>
    </div>
    <div id="bccol3"></div>
   </div>
   <div id="footer" class="subheader">©2016 Chris Carver Baseball LLC</div>
   </div>
   </body>
   </html>

任何帮助将不胜感激。这是我关于堆栈溢出的第一个问题,大约 4 周前我刚刚开始学习 HTML、PHP 等......要温柔!

第二行有空格:

    <?php require 'Connections/mysqlilive.php'; ?>
        <?php

?><?php之间向浏览器输出一个空格,这使得header函数无法访问,因为您已经抛出了header

根据手册:

请记住,在发送任何实际输出之前,必须调用 header(),无论是通过普通的 HTML 标记、文件中的空行还是从 PHP 发送。

另请注意:

HTTP 状态标头行将始终是第一个发送到客户端的行,无论实际的 header() 调用是否是第一个。除非已经发送了HTTP标头,否则可以随时通过使用新的状态行调用header()来覆盖状态。

所以试试:

<?php require 'Connections/mysqlilive.php';
    session_start();
    if(!isset($_SESSION["Username"])){
         header('Location: login.php');
         exit();
    }
    $user = $_SESSION["Username"];
    $result = $conn->query("select * from user_reg where Username='$user'");
    $row = $result->fetch_array(MYSQLI_BOTH);
    $_SESSION["Fname"] = $row['Fname'];
    $_SESSION["Lname"] = $row['Lname'];
    $_SESSION["Email"] = $row['Email'];
    $_SESSION["Address"] = $row['Address'];
    $_SESSION["City"] = $row['City'];
    $_SESSION["Zip"] = $row['Zip'];
    $_SESSION["PrimaryPhone"] = $row['PrimaryPhone'];
    $_SESSION["SecondaryPhone"] = $row['SecondaryPhone'];
    $_SESSION["PlayerFName"] = $row['PlayerFName'];
    $_SESSION["PlayerLName"] = $row['PlayerLName'];
    $_SESSION["Team"] = $row['Team'];
    $_SESSION["PlayerDOB"] = $row['PlayerDOB'];
    $_SESSION["Waiver"] = $row['Waiver'];
    $_SESSION["BirthCert"] = $row['BirthCert'];
    if(isset($_POST['update'])){
        $UpdateFName = $_POST['fname'];
        $UpdateLName = $_POST['lname'];
        $UpdateEmail = $_POST['email'];
        $UpdateAddress = $_POST['address'];
        $UpdateCity = $_POST['city'];
        $UpdateZip = $_POST['zip'];
        $UpdatePrimaryPhone = $_POST['primaryphone'];
        $UpdateSecondaryPhone = $_POST['secondaryphone'];
        $UpdatePlayerFName = $_POST['playerfname'];
        $UpdatePlayerLName = $_POST['playerlname'];
        $UpdateTeam = $_POST['team'];
        $UpdatePlayerDOB = $_POST['playerdob'];
        $sql = $conn->query("UPDATE user_reg SET Fname = '{$UpdateFName}', Lname          = '{$UpdateLName}', Email = '{$UpdateEmail}', Address = '{$UpdateAddress}', City  = '{$UpdateCity}', Zip = '{$UpdateZip}', PrimaryPhone = '{$UpdatePrimaryPhone}',  SecondaryPhone = '{$UpdateSecondaryPhone}', PlayerFName =  '{$UpdatePlayerFName}', PlayerLName = '{$UpdatePlayerLName}', Team =  '{$UpdateTeam}', PlayerDOB = '{$UpdatePlayerDOB}' WHERE Username= '$user' ");
        header("refresh:3; myvbaaccount.php");
            echo("Please wait while we update your account.");
    }
   ?>
   <!doctype html>
   <html>
   <head>
   <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
   <link href="main.css" rel="stylesheet" type="text/css">
   <link rel="stylesheet" href="font-awesome-4.5.0/css/font-awesome.min.css"/>
   <link rel="stylesheet" type="text/css"       href="dreamcodes/social_icons/tsc_social_icons.css" />
   <script src="//use.edgefonts.net/black-ops-one.js"></script>
   <meta charset="utf-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <link rel="stylesheet" href="styles.css">
   <script src="http://code.jquery.com/jquery-latest.min.js"   type="text/javascript"></script>
   <script src="script.js"></script>
   <title>Update My Account</title>
   </head>
   <body>
   <div id="mainwrap">
   <div id="headerwrap">
    <div id="headertext"><h1 class="header1">valley baseball academy</h1>
        <h3 class="header3">Better.Faster.Stronger.</h3></div>
    <div id="headerpicture"><img src="Assets/VBA black150px.png" alt="vbablack">     <p class="phone">209.380.7721</p></div>
   </div>
   <div id="cssmenu">
   <ul>
   <li><a href="home.html"><span>Home</span></a></li>
   <li><a href="myvbaaccount.php"><span>My VBA Home</span></a></li>
   <li><a href="logout.php"><span>Logout</span></a></li>
   <li><a href="contactus.html"><span>Contact Us</span></a></li>
   <li><a href="http://www.facebook.com/valleybaseballinoakdale"><i class="fa    fa-facebook-square fa-2x"></i></a></li>
   <li><a href="http://www.twitter.com/valleybaseball3"><i class="fa fa-twitter-  square fa-2x"></i></a></li>
   <li><a href="http://www.instagram.com/valleybaseballoakdale"><i class="fa fa- instagram fa-2x"></i></a></li>
   </ul>
   </div>
   <div id="topcontent">
    <div id="tccol1">
        <img class="logo" src="Assets/myvbalogo.png" alt="myvbalogo">
    </div>
    <div id="tccol2"><h3 class="subheader">Welcome <?php echo  $_SESSION['Username']; ?>!</h3></br><h3 class="subheader">Update Your  Account</h3>
    <form action="" method="post" id="updateaccount">
    <div class="formelement2"><input name="fname" type="text" required  class="tfield3" id="fname" value="<?php echo $_SESSION["Fname"]; ?>"></div>
    <div class="formelement2"><input name="lname" type="text" required class="tfield3" id="lname" value="<?php echo $_SESSION["Lname"]; ?>"></div>
    <div class="formelement2"><input name="email" type="text" required class="tfield3" id="email" value="<?php echo $_SESSION["Email"]; ?>"></div>
    <div class="formelement2"><input name="primaryphone" type="text" required class="tfield3" id="primaryphone" value="<?php echo $_SESSION["PrimaryPhone"]; ? >"></div>
    <div class="formelement2"><input name="secondaryphone" type="text" required  class="tfield3" id="secondaryphone" value="<?php echo  $_SESSION["SecondaryPhone"]; ?>"></div>
    <div class="formelement2"><input name="address" type="text" required class="tfield3" id="address" value="<?php echo $_SESSION["Address"]; ?>"></div>
    <div class="formelement2"><input name="city" type="text" required class="tfield3" id="city" value="<?php echo $_SESSION["City"]; ?>"></div>
    <div class="formelement2"><input name="zip" type="text" required class="tfield3" id="zip" value="<?php echo $_SESSION["Zip"]; ?>"></div>
    <h3 class="subheader">Player Information</h3>
    <div class="formelement2"><input name="playerfname" type="text" required class="tfield3" id="playerfname" value="<?php echo $_SESSION["PlayerFName"]; ?>"></div>
    <div class="formelement2"><input name="playerlname" type="text" required class="tfield3" id="playerlname" value="<?php echo $_SESSION["PlayerLName"]; ?>"></div>
    <div class="formelement2"><input name="team" type="text" required class="tfield3" id="team" value="<?php echo $_SESSION["Team"]; ?>"></div>
    <label>Date of Birth</label><div class="formelement2"><input name="playerdob" type="text" required class="tfield3" id="playerdob" value="<?php echo $_SESSION["PlayerDOB"]; ?>"></div>
    <input name="update" type="submit" class="button" id="update" value="Update  Profile">
    </form>
    </div>
    <div id="tccol3">
    </div>
   </div>
   <h3 class="subheader">Upload Files</h3>
   <div id="bottomcontent">
    <div id="bccol1">
    <div class="formholder">
    <h4 class="subheader">Birth Certificate</h4>
    <P class="ptext">File size limited to 5MB</P>
        <form action="FileUpload.php" method="post" enctype="multipart/form-data" name="FileUploadForm" id="FileUploadForm">
    <label for="UploadFileField"></label>
    <input type="file" name="UploadBCField" id="UploadBCField" />
    <input type="submit" name="UploadButton" id="UploadButton" value="Upload" />
    </form>
    </div>
    </div>
    <div id="bccol2">
    <div class="formholder">
    <h4 class="subheader">Sports Physical</h4>
    <P class="ptext">File size limited to 5MB</P>
        <form action="FileUpload.php" method="post" enctype="multipart/form-data" name="FileUploadForm" id="FileUploadForm">
    <label for="UploadFileField"></label>
    <input type="file" name="UploadSPField" id="UploadSPField" />
    <input type="submit" name="UploadButton" id="UploadButton" value="Upload" />
    </form>
    </div>
    </div>
    <div id="bccol3"></div>
   </div>
   <div id="footer" class="subheader">©2016 Chris Carver Baseball LLC</div>
   </div>
   </body>
   </html>

您还应该对位置使用绝对路径,并应考虑将预准备语句与参数化查询一起使用。

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

这段代码对于SQL注入是可行的,你应该考虑使用PDO或mysqli准备的语句。此外,在执行header()时使用die()exit(),因为脚本在用户浏览另一个页面时继续执行。此外,浏览器不必遵守标头请求。

但是,要回答您的问题,您可以通过一个简单的GET请求来完成。

$sql = $conn->query("UPDATE ....
header("Location: profile.php?success=true");
die();

现在在"个人资料.php"

if($_GET['success'] == true){
  // print out the data instead of the form.
} else {
  // print out other forms, etc..
}

您应该在第一个header()后退出脚本,以便在用户未登录时不会尝试执行数据库更新。

if(!isset($_SESSION["Username"])){
    header('Location: login.php');
    exit();
}