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

时间:2015-02-11 16:07:51

标签: php html mysql

我差不多完成了我的第一个PHP / HTML网站,在提交带有'connect.php'的HTML表单后,我已经堆叠在此重定向中。

我猜这个'header()'标签出了问题,因为sql帖子工作正常。

首先,形式:

<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>

现在,'connect.php'文件:

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 !=''){
    header("Location: index.html");
}


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

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

mysql_close();

?>

4 个答案:

答案 0 :(得分:0)

http://php.net/manual/en/function.header.php

  

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

输出开始后无法重定向。尝试将connect.php中的检查移动到输出表单之前。此外,最好在header()调用后立即退出()以防止在调用后输出。

答案 1 :(得分:0)

您的脚本可能有一些您无法看到的输出,即空格。通过在脚本顶部使用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();

?>

答案 2 :(得分:0)

此外:

if($value1 != '')错了

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

但我推荐使用数组

答案 3 :(得分:0)

最后,我检查了de PHP元素之前的输出(前端数据),以及最后一个标题()下面的删除项目。

谢谢你们所有人!这是最终的代码,工作:

&#13;
&#13;
<?php

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')";

mysql_close();

if($value1 !=''&& $value2 !=''&& $value3 !=''&& $value4 !=''&& $value5 !=''){
    header("Location: index.html");
	exit();
}


?>
<h2>Gracias!, hemos recibido su firma. Ahora, será redirigido.</h2>
&#13;
&#13;
&#13;