Php header()标记在提交表单后未重定向
我即将完成我的第一个PHP/HTML站点,在提交了一个带有“connect.PHP”的HTML表单后,我就陷入了这个重定向 我猜这个'header()'标记出了问题,因为sql post工作正常 首先,形式: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
<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();
?>