0

私は提案されたタイトルを閲覧し、いくつかの答えを見つけましたが、実際には何もうまくいきませんでした、それで私はあなたに目を向けます...

ob_start()コンテンツをスケルトンとして使用するファイルを呼び出すために使用する関数があります。コンテンツが取得されたら、を使用しますob_end_clean()

関数を最初に呼び出したときから出力を取得しているように見えますが、その後は何も出力されません。何か間違ったことをしている場合に備えて、コードダンプを含めました。

また、データベース呼び出しから返されるもののサンプルも含めました($dl->select ...)また、データが期待しているデータベースから実際に返されることを確認しました。

Array
(
[0] => Array
    (
        [rev_id] => 7
        [rev_temp_tree_id] => 2
        [rev_tree_id] => 
        [rev_status] => 
        [rev_last_updated_by] => 0
        [rev_authorized_by] => 
        [rev_date_updated] => 1334600174
        [rev_date_reviewed] => 
        [rev_update_type] => 1
        [temp_tree_id] => 2
        [temp_tree_bag_size] => 250
        [temp_tree_botanical_id] => 
        [temp_tree_stem_size] => 0
        [temp_tree_crown] => 0
        [temp_tree_price] => 0
        [temp_tree_height] => 0
        [temp_tree_plant_date] => 0
        [temp_tree_review_id] => 
        [temp_tree_comments] =>  
        [temp_tree_marked_move] => 0
        [temp_tree_initial_location] => 
        [temp_tree_coord] => 
        [temp_tree_name] => TEST
        [temp_tree_sale_status] => 0
        [temp_tree_open_ground] => 
        [temp_tree_block] => 0
        [temp_tree_row] => 0
    )

)

とコード...

<?php

function print_trees($trees){
 $return = '';

 ob_start();
 include_once('skeletons/tree.html');
 $tree_skeleton= ob_get_contents();
 ob_end_clean();

 $search=array("[tree_id]", "[tree_name]", "[Classes]", "[rev_id]");    
 foreach($trees as $t){     
    $replace=array($t['temp_tree_id'], $t['temp_tree_name'].' ['.$t['temp_tree_id'].']', 'temp_tree', $t['rev_id']);
    $return.=str_replace($search,$replace,$tree_skeleton);
 }
 return $return;
}

switch ($_GET['mode']){
case 'trees' : 
    $db_status = '';

    $new_trees = $dl->select('tree_review AS tr LEFT JOIN temp_tree_trees AS tt ON tr.rev_temp_tree_id=tt.temp_tree_id', 'tr.rev_update_type="1"');
    echo '<h2>New Trees</h2>';
    if($dl->totalrows>0){
        echo print_trees($new_trees);
    }
    else{
        echo 'no new trees for review';
    }
    echo '<br /><br />';

    $new_trees = $dl->select('tree_review AS tr LEFT JOIN temp_tree_trees AS tt ON tr.rev_tree_id=tt.temp_tree_id', 'tr.rev_update_type="2"');
    echo '<h2>Updated Trees</h2>';
    if($dl->totalrows>0){
        echo print_trees($new_trees);
    }
    else{
        echo 'no update trees for review';
    }
    echo '<br /><br />';

    $new_trees = $dl->select('tree_review AS tr LEFT JOIN temp_tree_trees AS tt ON tr.rev_tree_id=tt.temp_tree_id', 'tr.rev_update_type="3"');
    echo '<h2>Moved Trees</h2>';
    if($dl->totalrows>0){
        echo print_trees($new_trees);
    }
    else{
        echo 'no moved trees for review';
    }
    echo '<br /><br />';

    $new_trees = $dl->select('tree_review AS tr LEFT JOIN temp_tree_trees AS tt ON tr.rev_tree_id=tt.temp_tree_id', 'tr.rev_update_type="4"');
    echo '<h2>Duplicated Trees</h2>';
    if($dl->totalrows>0){
        echo print_trees($new_trees);
    }
    else{
        echo 'no duplicated trees for review';
    }

break;
}
?>

どんな助けでもいただければ幸いです。

前もって感謝します。

4

2 に答える 2

2

私はそれが次の2つのいずれかであると信じています:

HTML ファイルで多次元配列を文字列として表現し、それを文字列置換で操作しようとすると、問題が発生する可能性があります。ファイルをデータ構造 (XML、JSON) として表現し、そのように解析する方がよい場合があります。これにより、出力バッファリングを完全にスキップできます。

または、 $new_trees がオブジェクトの配列なのか、それとも何か他のものなのかわかりません。オブジェクトの配列の場合、foreach() ループは正しく機能しません。つまり、$t->temp_tree_id と $t['temp_tree_id'] のようにする必要があります。

于 2012-04-16T19:21:58.733 に答える
1

コメントしてくれてありがとう。

私は問題が何であるかを発見しました、それは実際にはかなりばかげていました. スケルトンとしてインポートしているファイルは、include_once を使用してインクルードされているため、もう一度呼び出そうとするとできません。

@minitech あなたが提案したようにコードを更新しました、ありがとう。

@gadhra スケルトン ファイルのコンテンツはプレーンな html であり、キーワードを使用してデータベースのコンテンツを html に置き換えます。コードと一緒にhtmlを添付する必要がありました。

再度、感謝します :)

于 2012-04-17T18:47:30.623 に答える