我正在进行重定向,这要归功于PHP,但它根本没有重定向(但是重新定向的是其他重定向)。
这是我实施的代码:
<?php
session_start(); // pour pouvoir récupérer /creer desvariables de session
try
{
$bdd = new PDO('mysql:host=localhost;dbname=youf', 'root', 'root');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
$redirection="command.php";
if (!isset($_SESSION['Login'])){ header('Location: connect.php'); } // Si pas de sessionactives, redirect
if (!isset($_SESSION['CommandId'])){
$long = strlen($_SESSION['Login']);
$table = $_SESSION['Login'][$long-2].$_SESSION['Login'][$long-1];
$zone = $_SESSION['Login'][$long-4].$_SESSION['Login'][$long-3];
$createCommand="INSERT INTO `youfood`.`command` (`Number`, `Date`, `isPaid`, `Table`, `Zone`, `Server`, `State`) VALUES (NULL, current_date, '0', '".$table."', '".$zone."', '".$_SESSION['NumberEmployee']."', '5');";
$bdd->query($createCommand);
$sqlCommandNumber=$bdd->query("SELECT * FROM `command` WHERE `Table` =".$table." AND `Zone` =".$zone." AND `State` =0 LIMIT 0 , 1");
$commandNumber="";
while ($data=$sqlCommandNumber->fetch()){
$commandNumber = $data['Number'];
}
$_SESSION['CommandId'] = $commandNumber ;
header('Location: actionValidateCommand.php');
$redirection="actionValidatedCommand.php";
} else {
foreach ( $_SESSION['cart'] as $key => $value ) {
if($value != 0){
$sql = "INSERT INTO `youfood`.`commanddishe` (`Number` ,`command` ,`Dishe` ,`Quantity`)VALUES (NULL, '".$_SESSION['CommandId']."', '".$key."', '".$value."')";
$bdd->query($sql);
$messagee = $messagee."<br />".$sql."<br />";
$_SESSION['cart'][$key] = 0 ;
}
}
header('Location: command.php');
$redirection="command.php";
}
?>
<!DOCTYPE html>
<html>
当我检查不重定向的页面的html结果时,我在标记之前看到一个空格。我不知道空间在哪里,我知道这是错误的!
感谢帮助我: - )
答案 0 :(得分:2)
您正在启动标题之前输出内容。
即:$messagee = $messagee."<br />".$sql."<br />";
为了使重定向正常工作,您应该避免在标题行之前输出ANYTHING。
另请尝试:error_reporting(E_ALL);
在文件的开头。看它是否返回错误或警告。
答案 1 :(得分:0)
您看到的空白可能是UTF 字节顺序标记(BOM)。 使用一些程序,如Notepad ++甚至十六进制编辑器来删除它。 以下是参考:http://www.sunfinedata.com/tips/remove-bom-from-utf-8-files/
如果有BOM,PHP会告诉Apache发送响应头,之后不能设置额外的头。
如果在php.ini中启用display_errors,您将看到如下内容:
警告:无法修改标头信息 - 已经在 /blah/blah.php 上发送的输出(/blah/blah.php:1上的输出)的 1 强>
session_start()
也会产生错误。
参考:http://en.wikipedia.org/wiki/Byte_order_mark
P.S。我不知道为什么有些人会对可能正确的答案进行投票。
答案 2 :(得分:0)
在发送标题之前始终删除输出:
// at the beginning of your script
ob_start();
// clean output before sending headers
ob_clean();
header( /* … */ );
标头未被执行的原因可能在于第一个if
- 构造。你有没有检查过,条件是/可以在任何时候都是真的?
答案 3 :(得分:0)
有时我会在开头的<?php
标记之前找到一个空格,无论是在有问题的php文件中还是在包含的文件中,这似乎不是这里的情况。或者在结束?>