1

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結果を調べると、タグの前にスペースが表示されます。どこにスペースができているのかわからないし、間違いだと思います!

私を助けてくれてありがとう:-)

4

4 に答える 4

2

ヘッダーが開始される前に出力しています。

すなわち:$messagee = $messagee."<br />".$sql."<br />";

リダイレクトが適切に機能するためには、ヘッダー行の前に何も出力しないようにする必要があります。

これも試してください:error_reporting(E_ALL);ファイルの先頭に。エラーまたは警告が返されるかどうかを確認します。

于 2012-06-19T15:24:39.590 に答える
0

表示される空白は、おそらく UTFバイト オーダー マーク(BOM) です。Notepad++ や 16 進エディタなどのプログラムを使用して削除してください。ここに参照があります:http://www.sunfinedata.com/tips/remove-bom-from-utf-8-files/

BOM がある場合、PHP は Apache に応答ヘッダーを送信するように指示し、その後は追加のヘッダーを設定できません。

php.ini で display_errors を有効にすると、次のように表示されます。

警告:ヘッダー情報を変更できません - 1行目の/blah/blah.phpの (/blah/blah.php:1 で開始された出力) によって既に送信されたヘッダー

session_start()もエラーを生成します。

参照: http://en.wikipedia.org/wiki/Byte_order_mark

PS 一部の人々がおそらく正しい答えに反対票を投じる理由がわかりません。

于 2012-06-19T15:23:50.473 に答える
0

ヘッダーを送信する前に、常に出力をドロップします。

// at the beginning of your script
ob_start();

// clean output before sending headers
ob_clean();
header( /* … */ );

ヘッダーが実行されない理由は、最初のif-construct にある可能性があります。条件がいつでも真である/真になる可能性があることを確認しましたか?

于 2012-06-19T15:37:10.280 に答える
0

問題のphpファイルまたはインクルードファイルのいずれかで、開始タグの前にスペースが見つかることがあり<?phpますが、ここではそうではないようです。もしくは閉店後?>

于 2012-06-19T15:37:23.630 に答える