2012-03-09 9 views
-1

title、isbn、imageのような属性を持つブックオブジェクトの配列を取得しています。 forループを使ってラベルだけを表示したいときは、すべてのエントリを表示しています。しかし、私が画像を表示しようとすると、画像が表示されます。またタイトルと画像の両方を表示しようとすると、それはできると言います画像をラベルとともにPHPで表示

Warning: Cannot modify header information - headers already sent by (output started at /Applications/XAMPP/xamppfiles/htdocs/BookStore/BooksResult.php:14) in /Applications/XAMPP/xamppfiles/htdocs/BookStore/BooksResult.php on line 15

以下はコードです。

foreach($booksArr as &$book) 
{ 
    $content = $book->Image; 
    $title=$book->s_Title;     
    echo $title; 
    header('Content-type: image/jpg'); 
    { 
     echo $content; 
    } 
} 
+0

(これは単に一般的なアドバイスではなく、あなたの質問に正確な答えである):)

後にはるかに明確に表示されます。 –

+0

あなたはこれが間違っていると思います。出力例と希望する出力を表示してください/ –

+1

出力と画像のために別々のリクエストを試してください:generated alt RumpRanger

答えて

0

"ヘッダー情報を変更することはできません..." 問題はここにある:

header('Content-type: image/jpg'); 

あなたのPHPスクリプトはHTMLを出力しています。ミッドストリーム出力のコンテンツタイプを変更することはできません。代わりに、画像の場所を指す<img>タグを出力する必要があります。 COMMENTデータに基づいて

UPDATE:

データベースからBLOBとしてあなたのイメージを提供する必要がある場合は、画像を取得するために別のスクリプトを作成する必要があります。

<img src="/path/to/your/new/script.php?id=<?php echo $row_id; ?>" /> 

代替$row_idを一意に識別するフィールドデータと:まず、あなたのイメージフェッチスクリプトへのパスと画像IDが含まれているsrc属性で<img>タグを作成することにより、新しいスクリプトを参照するには、この1を変更あなたのデータベースの本。

次に、新しいイメージ取得スクリプトを作成します。 GETリクエストからidを取得するために

  1. ライン:それは3つの要素が含まれます ます$ id = $ _GET [ 'ID'];

  2. IDに基づいて画像のBLOBを取得するSQL文です。 (あなたの入力をサニタイズすることを忘れないでください!)あなたがあなたの元のスクリプトにブロブ、そしてあなたの画像が表示されますheader()行だけを出力した後

を使用したもののような

  • header()声明。

  • +0

    echo ''をコードに追加しました。実行すると空白のボックスが表示される単純にURLをハードコードされたIDで実行しようとしたとき、画像を取得できます。 ? – user1247412

    +0

    あなたのPHP文をネストしようとしているようですが、これを試してみてください: 'echo '

    +0

    Georgeさんありがとうございました – user1247412

    0

    てみファイル

    EDITのbegginingで

    ob_start() 
    

    を追加:また、のみ一度だけファイルのbegginingでヘッダ関数を呼び出し、一度ヘッダ情報を変更、 after ob_start()

    +0

    ですが、コンテンツタイプをデータ全体のイメージとして作成しませんか? – user1247412

    +0

    はい、私はあなたがイメージを表す別のPHPファイルを作るイメージを表示したいと思っていると仮定しましたので、 gosukiwi

    0

    ヘッダーは、出力が送信される前に送信する必要があります。あなたはタイトルをエコーし​​、ヘッダーを設定しようとしています。

    +0

    のようにすることができます。どのようにそれを行うことができますか? – user1247412

    +0

    あなたは正確に何をしようとしていますか? –

    +0

    私は利用可能な書籍をその画像とともに表示しようとしています。画像はmysqlにブロブとして保存されます – user1247412

    0

    すべての写真を1回のリクエストで送信しようとしています。 HTMLはそのようには機能しません。

    foreach($booksArr as &$book) { 
        $title=$book->s_Title;     
        echo $title; 
        echo '<img src="book_image.php?id=' . $book->id . '" alt="' . $title . '"/>'; 
    } 
    

    、その後、あなたは適切なヘッダとコンテンツを印刷しますbook_image.php上の別々のリクエストに本を扱う、このような何か:あなたはこのような何かをする必要が

    $id = $_GET['id']; 
    // get the book by id from db 
    header('Content-type: image/jpg'); 
    echo $book->Image; 
    
    +0

    あなたはHTMLについては正しくありません。画像を別の要求に分割する必要なく、同じページ上に画像を表示できます。言い換えれば、イメージを返すために別々のファイルは必要ありません。 – Tadeck

    +0

    Data URLを使って1回のリクエストですべてを行うことができますが、これは高度な技術ですが、帯域幅を約33%増加させ、OPが行っていることではありません。これは私が知っている唯一の方法で、HTMLと画像データを同じリクエストで持つことができます。あなたが他の人を知っているなら、詳しく教えてください。 – Amadan

    +0

    OPがしていることは明らかに間違っていますが、OPが達成したいことはまだ分かりません。データURLにはいくつかの欠点がありますが、さまざまな点で優れています。この場合、あなたのソリューションは 'n * 100%'(ここで、 'nは画像の数、パーセントは明瞭にするために追加されます)で要求の数を増やす可能性があります。データベース呼び出しでも同じです。より重要なこと(dbコールの数と要求の数、またはイメージの表現に使用される転送量)によって、解決策は異なります。しかし、あなたの "_HTMLはそのようには動作しません"は間違ったままです。 – Tadeck

    0

    場合あなたは本当にこの警告を理解したいと思っています。将来PHPでさらに働きたい場合は、HTTP protocolの仕組みを学び始めてください。その楽しさ、そして、あなたはあなたがページにあなた `echo`コンテンツの後のヘッダを送信することはできません

    関連する問題