我即将完成我的第一个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>
现在,"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();
?>
http://php.net/manual/en/function.header.php
请记住,必须在调用任何实际输出之前调用header()通过普通HTML标记、文件中的空行或PHP发送。读取包含或需要的代码是非常常见的错误,函数或其他文件访问函数,并且具有空格或为空在调用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();
?>
另外:
if($value1 != '')
是错误的
正确的方法是:if($value1 !== '')
或if(empty($value1))
但是我建议使用数组
最后,我在去PHP元素之前检查了输出(数据到前端),并删除了最后一个header()的if.下面的项目
谢谢大家!。这是最后的代码,正在工作:
<?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>