首页 > 解决方案 > 标头未发送,但以前它正在工作

问题描述

在发送提交按钮后使用 PHP Header 方法重定向到另一个页面有问题,尽管之前它工作正常。放置额外的表单字段后问题开始了。

尝试寻找任何空格,将代码删除到以前的工作状态证明是徒劳的。

<?php
    session_start();

    $hostname_mysql = "localhost";
    $database_mysql = "smartsaf_angkasa";
    $username = "root";
    $password = "";

    $mysql = mysql_connect($hostname_mysql, $username, $password);

    $errors = array();
    //mysql_select_db( $database_mysql, $mysql);

    if(!$mysql)
        echo "".mysql_error();
    else{
        //echo "<h2>Connected to database successfully ".mysql_error()."</h2>";
        mysql_select_db($database_mysql);
    }

    if ($_SERVER['REQUEST_METHOD'] != 'POST')
    {
?>  

<div>

  <form class="main-container" action="admin-pakej.php" method="post" enctype="multipart/form-data" >
        <div class="input-form"><label for="desc" name="lbldesc">Description</label></div><div class="input-form-right"><input type="text" name="description" size="60" required ></div>
        <div class="clr"></div>
        <div class="input-form"><label for="Market Price" name="lblmarketprice">Market Price</label></div><div class="input-form-right"><input type="text" name="marketprice" id="marketprice" size="20" required ></div>
        <div class="clr"></div>
        <div class="input-form"><label for="Membership No" name="lblmemberno">Membership Number</label></div><div class="input-form-right"><input type="text" name="membershipno" id="membershipno" size="20" onblur="change()" ><div id="disabled-text-box"><input type="text" name="membersname" size="35" disabled></div></div>
        <div class="clr"></div>
        <div class="input-form"><label for="Member Price" name="lblmemberprice">Members Price</label></div><div class="input-form-right"><input type="text" name="membersprice" id="membersprice" size="20" required ></div>
        <div class="clr"></div>
        <div class="input-form"><label for="Point PV" name="lblpointpv">PV Points</label></div><div class="input-form-right"><input type="text" name="pointpv" id="pointpv" size="20" required ></div>
        <div class="clr"></div>
        <div class="input-form"><label for="Package Type" name="lblpackagetype">Package Type</label></div><div class="input-form-right"><select name="package" id="package"><option value="gold">Gold</option><option value="silver">Silver</option><option value="bronze">Bronze</option></select></div>
        <div class="clr"></div>
        <div class="input-form"><label for="Product Page" name="lblproductpage">Product Page HTML File Name</label></div><div class="input-form-right"><input type="text" id="productpage" name="productpage" size="30"></div>
        <div class="clr"></div>
        <div class="input-form"><label for="Product Pics" name="lblproductpics">Product Pics</label></div><div class="clr"></div>
        <div class="input-form-right"></div><div class="input-form-right"><input type="file" id="upload" name="upload" onchange="readURL(this)"></input><img id="blah" class="container" src="#" alt="preview image" /></div>
        <div class="clr"></div>
        <div class="input-form"></div><div class="button"><button type="submit" id="submit" name="submit">Submit</button></div>
  </form>
  </div>
  <div class="clr"></div>
  <div><p>
    <!--<ul>-->
<?php
    }
    else
    {
        $desc_product = $_POST['description'];
        $membershipno = $_POST['membershipno'];
        $product_pics = $_FILES['upload']['name'];
        $market_price = $_POST['marketprice'];
        $membersprice = $_POST['membersprice'];
        $package_type = $_POST['package'];
        $pv_points = $_POST['pointpv'];
        $productpage = $_POST['productpage'];


    if (empty($desc_product) || empty($product_pics) || empty($membershipno) || empty($membersprice) || empty($pv_points) || empty($productpage))
    {
        array_push($errors, "Fields are empty");
    }
    else
    {           
        $query = "INSERT INTO product_final (desc, ext_member_id, productpics, marketprice, memberprice, packagetype, pv_points, productpage, category) VALUES
                                ('$desc_product', '$membershipno', '$product_pics', '$market_price', '$membersprice', '$package_type', '$pv_points', '$productpage', '')'";

        $result = mysql_query($query, $mysql);

        if ($result)
        {
            if (!headers_sent())
            {
                header("location:record_page.php");
                exit;
            }
            else
            {
                echo "Headers already sent";
                exit;
            }
        }
        //else
            //echo "".mysql_error($mysql);
    }

}
?>
    <!--</ul>--></p>
    </div>
 </body>

<script type="text/javascript">
    function readURL(input)
    {
        if (input.files && input.files[0])
        {
            var reader = new FileReader();
            reader.onload  = function(e)
            {
                $("#blah")
                .attr("src", e.target.result)
                .width(300)
                .height(250);
            };
            reader.readAsDataURL(input.files[0]);
        }
    }

    function getpicPath()
    {
        document.getElementById("imgs").innerHTML;

    }


</script>
</html>

预计至少会收到一条错误消息,以找出实际阻止将提交的表单提交发送到另一个页面的过程,以确认表单已被处理。

标签: phphtmlheader

解决方案


您遇到这个问题基本上是因为在您尝试发送标头之前包含了一些 HTML 代码(仅在之前发送标头)。您的表单代码最初仅发送标头,因此以后无法发送 http 标头。使用输出缓冲,即在脚本的最开始放置ob_start(),最后放置ob_flush()。这使 PHP 能够首先等待所有输出被收集,确定以什么顺序呈现它,然后输出它。

输出缓冲区使用指南


推荐阅读