Php header()标记在提交表单后未重定向

Php header()标记在提交表单后未重定向,php,html,mysql,Php,Html,Mysql,我即将完成我的第一个PHP/HTML站点,在提交了一个带有“connect.PHP”的HTML表单后,我就陷入了这个重定向 我猜这个'header()'标记出了问题,因为sql post工作正常 首先,形式: <div id="formulario"> <form action="connect.php" method="post" enctype="multipart/form-data" onSubmit="alert('Thank you for your fee

我即将完成我的第一个PHP/HTML站点,在提交了一个带有“connect.PHP”的HTML表单后,我就陷入了这个重定向

我猜这个'header()'标记出了问题,因为sql post工作正常

首先,形式:

<div id="formulario">
    <form action="connect.php" method="post" enctype="multipart/form-data" onSubmit="alert('Thank you for your feedback.')">
        <p id="form_title">COMPLETA TUS DATOS Y ENVIA ESTA SOLICITUD <br> A LAS AUTORIDADES</p>

        <label></label>
        <input class="field" name="user_name" type="text" required="required" placeholder="NOMBRE">


        <label></label>
        <input class="field" name="user_last" type="text" required="required" placeholder="APELLIDO">


        <label></label>
        <input class="field" name="pais" type="text" required="required" placeholder="PAIS">

        <label></label> 
        <input class="field" name="user_email" type="email" required="required" placeholder="EMAIL">

        <label></label>
        <input class="field" name="tel" type="number" required="required" placeholder="TELEFONO">


        <input id="submit" name="submit" type="submit" value="SUBMIT">

        <div id="masinfo">
            <a href="" target="_blank"><img src="" alt="" />CLICK AQUI PARA MAS INFO</a>
        </div>

    </form>

记住,必须在调用任何实际输出之前调用header() 通过普通HTML标记、文件中的空行或PHP发送。 使用include或require读取代码是非常常见的错误, 函数或其他文件访问函数,并具有空格或空 在调用header()之前输出的行。同样的问题 使用单个PHP/HTML文件时存在


输出启动后,无法重定向。尝试将connect.php中的检查移动到表单输出之前。另外,在header()调用之后立即退出()也是一种很好的做法,以防止在调用之后输出。

您的脚本可能有一些您看不到的输出,即空白。通过在脚本顶部使用
ob_start()
启动缓冲区,并在重定向之前使用ob_end_clean()丢弃缓冲区,可以解决此问题

<?php 
ob_start(); // Begin a buffer

define('DB_NAME', 'm9000207_ficlog');
define('DB_USER', 'm9000207_ficlog');
define('DB_PASSWORD','25dutotePE');
define('DB_HOST','localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!$link) {
    die('Could not connect: ' .mysql_error());
}

$db_selected = mysql_select_db(DB_NAME, $link);

$value1 = $_POST ['user_name'];
$value2 = $_POST ['user_last'];
$value3 = $_POST ['pais'];
$value4 = $_POST ['tel'];
$value5 = $_POST ['user_email'];

$sql = "INSERT INTO registros VALUES ('', '$value1', '$value2', '$value3', '$value4', '$value5')";

if($value1 !=''&& $value2 !=''&& $value3 !=''&& $value4 !=''&& $value5 !=''){
    ob_end_clean(); // Discard any output
    header("Location: index.html");
    exit; // Good practice
}


if (!mysql_query($sql)) {
    die('Error: ' . mysql_error());
}

if (!$db_selected) {
    die ('Cant use' . DB_NAME . ': ' . mysql_error ());
}



mysql_close();

?>
此外:

如果($value1!='')是错误的

正确的方法是:
if($value1!='')
if(empty($value1))


但是我建议使用数组

最后,我在反PHP元素之前检查了输出(数据到前端),并删除了最后一个header()的if下面的项

谢谢大家!。以下是最终代码,工作:


您遇到了哪些错误?此外,请记住。永远不要在生产中使用该代码。仍然需要说:你确定你正在使用if语句吗?
<?php 
ob_start(); // Begin a buffer

define('DB_NAME', 'm9000207_ficlog');
define('DB_USER', 'm9000207_ficlog');
define('DB_PASSWORD','25dutotePE');
define('DB_HOST','localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!$link) {
    die('Could not connect: ' .mysql_error());
}

$db_selected = mysql_select_db(DB_NAME, $link);

$value1 = $_POST ['user_name'];
$value2 = $_POST ['user_last'];
$value3 = $_POST ['pais'];
$value4 = $_POST ['tel'];
$value5 = $_POST ['user_email'];

$sql = "INSERT INTO registros VALUES ('', '$value1', '$value2', '$value3', '$value4', '$value5')";

if($value1 !=''&& $value2 !=''&& $value3 !=''&& $value4 !=''&& $value5 !=''){
    ob_end_clean(); // Discard any output
    header("Location: index.html");
    exit; // Good practice
}


if (!mysql_query($sql)) {
    die('Error: ' . mysql_error());
}

if (!$db_selected) {
    die ('Cant use' . DB_NAME . ': ' . mysql_error ());
}



mysql_close();

?>