2011-12-14 3 views
0
$result=mysql_query($sql_info) or die("Error 1: ".mysql_error()); 
    $no= mysql_fetch_array($result); 

    $groups_no = $no['number']; 
    mysql_num_rows($result) or die("Error 2: ".mysql_error());  

// echo "what's going on?"; if I uncomment this line then the echo below executes 
    if(($this->user_group=="I am Talent") &&($groups_no==0)) {    
     header("Location: ".MAIN_URL.$this->groups_page); 
        echo "what's going on?"; //THIS DOESN'T EXECUTE BY ITSELF...WHY NOT?? 
    } 
    if(mysql_result(mysql_query(sprintf("SELECT last_update FROM `users_profile` WHERE users_id=%d LIMIT 1",$this->id)),0)==0) { 

     header("Location: ".MAIN_URL.$this->groups_page); 
    } 
     echo "what's going on?"; //won't execute unless the line above 

エコーステートメントがない限り、上記のコードが機能しない理由は誰にも分かりますか?私は最初のif文が実行されるべきであることを手動のデータベースチェックによって確認しました。特定の場所にエコーがない限り、PHPコードは実行されません。どうしてこれなの?

これは、変数MAIN_URLに格納されたリンクへのページのリダイレクトを引き起こすはずです。$ this-> groups_page(このリダイレクトの欠如が元の問題でした)。ただし、if文またはif文のいずれかにエコーがなければ、header( "Location:...")部分は実行されません。なぜこれが地球上にあるのでしょうか?私はヘッダー( "場所:" .MAIN_URL。$ this-> groups_page)の後にエコーステートメントを置く。最初のif文の行に記述され、実行されませんでした。ヘッダー(...)行の前にecho文がある場合にのみ実行されます。

+0

これはほとんど読めません。もっと簡潔にできますか? –

+0

私はそれを煮詰めようとします。 –

+0

[ヘッダが既に送信されました](http://stackoverflow.com/search?q=headers%20already%20sent)とoutput_bufferingのいくつかの変形が有効かどうか。 – mario

答えて

1

HTTPヘッダーを設定する前に何も出力できないためです。通常、Headers already sent by...のようなPHPエラーが発生します。 HTTPヘッダー(あなたのケースでは:Location: ...)が本文の前にブラウザーに送信されます。 PHP: headerによれば

:任意の実際の出力は、通常のHTMLタグ、ファイル内の空行で、またはPHPのいずれかから、送信される前に

(そのヘッダを覚え)が呼び出されなければなりません。 include()、require()、関数、または他のファイルアクセス関数を使ってコードを読み取り、header()が呼び出される前に空白または空行が出力されることは非常によくあるエラーです。単一のPHP/HTMLファイルを使用する場合も同じ問題があります。

2

エコーは実際には他のエコーに影響を与えません。私が思っているのは、ロケーションリダイレクトが最初にブラウザに送られ、最後のエコーが一度も表示されないため、通常は実行されない2番目のエコーです。

ただし、最初のエコーを有効にしてから、ブラウザに位置ヘッダーの1つが送信されると、PHPは出力が既に開始されていることを示すエラーを最初のエコーで発行する必要があります。その場合、2番目のエコーが通過している可能性があります.b/cでは、その時点でヘッダーを送信できません。

@ diiqual ditto;あなたの答えが届いたときに投稿していたのですが);

+0

はい最初のエコーが有効になっていると、出力エラーが発生します。しかし、それは本当に問題ではありません。問題は、エコーなしでヘッダーステートメントが実行されないことです。最初のecho文があると、ヘッダ文は実行されますが、それ以外の場合は何もせずに現在のページにリダイレクトされます。 –

+0

また、私はしっかりと空白がないこと、またはインクルードに問題があることを知っています。 –

+0

@ LJWiest-Bergerはあなたがエコーを無効にしたときにif条件がまだ成功していることを確認していますか?あなたが試みることができるいくつかのことがあります。ヘッダーコールが行われる直前に何かを記録する、ヘッダーを続けて、if条件でヘッダーコールをラップしないダイを呼び出すなどです。また、トラフィックをtcpmon火かき棒。私の推測は、条件付きのものです。エコーとコールヘッダーがない場合は、それが動作するはずです。 – quickshiftin

関連する問題