0

出力バッファリングを使用してphpページのコンテンツをキャプチャしようとしています:

<?php

function connect() {
  $dbh = mysql_connect ("localhost", "user", "password") or die ('I cannot connect to the database because: ' . mysql_error());
  mysql_select_db("PDS", $dbh); 
  return $dbh;
}

session_start();

if(isset($_SESSION['username'])){
  if(isset($_POST['entryId'])){
    //do something
    $dbh = connect();
    $ide = $_POST['entryId'];
    $usertab = $_POST['usertable'];
    $answertable = $usertab . "Answers";
    $entrytable = $usertab . "Entries";
    $query = mysql_query("SELECT e.date, q.questionNumber, q.question, q.sectionId, a.answer FROM $answertable a, Questions q, $entrytable e WHERE a.entryId = '$ide' AND a.questionId = q.questionId AND e.entryId = '$ide' ORDER BY q.questionNumber ASC;") or die("Error: " . mysql_error());

    if($query){
      //set variables      
      $sectionOne = array();      
      while($row=mysql_fetch_assoc($query)){
    $date = $row['date'];
    $sectionOne[] = $row;   
      }
    }else{
      //error - sql failed
    }
  } 
?>

<?php
  ob_start();
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   <script src = "jQuery.js"></script>
   <script>
   $(document).ready(function(){
       $("#export").click(function(e){
       //post to html2pdfconverter.php
       $("#link").val("<?php echo(ob_get_contents()); ?>"); //THIS DOESN'T WORK
       $("#nm").val("Entry Report.pdf");       
       $("form#sendanswers").submit();
       }); 
   });
  </script>
  <title>Personal Diary System - Entry Report - <?php echo($date); ?></title>
  </head>
  <body>
  <h1>Entry Report - <?php echo($date); ?></h1>    
  <div id = "buttons">
  <form id = "sendanswers" name = "sendanswers" action="html2pdfconverter.php" method="post">
  <input type = "hidden" name = "link" id = "link" value = "">
  <input type = "hidden" name = "nm" id = "nm" value = "">
  <input type = "button" name = "export" id = "export" value = "Export As PDF"/>
  </form>                        
  </div>                         
  <h3>Biological Information</h3>
  <?php
     echo('<p>');                         
      $i = 0;                         
      foreach($sectionOne as &$value){
    if($i == 1 || $i == 3){
      $image = "assets/urine".$i.".png";
      echo("<br/>");
      echo($value['question']." <br/> "."<img src = \"$image\"/>");
      echo("<br/>");
    }else{
      echo($value['question'].' : '.$value['answer']);
    }
    echo("<br/>");
    $i++;
      }
     echo('</p>');      
  ?>
  </body>
</html>
<?php   
}
$contents = ob_get_contents(); //THIS WORKS    
ob_end();
?>

obのコンテンツを$contentsusingに割り当てob_get_contents();ます。これは機能し、$contentsをエコーするとhtmlページが複製されます。

ただし、私のjQueryでは、次を使用してこれを非表示のテキストフィールド(「リンク」)に割り当てようとしています。

$("#link").val("<?php echo($contents); ?>");

しかし、これは機能しません。そして、私は$ contentsにアクセスしすぎているので、それを感じていますが、確信が持てません...何かアイデアはありますか?

4

2 に答える 2

1
   $("#link").val("<?php echo(ob_get_contents()); ?>"); //THIS DOESN'T WORK

ob_get_contents 呼び出しを行った時点で、javascript と html を約 10 行しか出力していません。PHP は時間をさかのぼって、このob_get_contents () を実行するドキュメントの残りの部分を魔法のように埋めることはありません。

基本的に、ページが出現し始めた瞬間にレーザープリンターからページを切り取っていますが、プリンターはまだページの下半分を印刷しています。

ページのコンテンツを入力フィールドに埋め込みたい理由がわかりません。ページのコンテンツを何らかの方法で入力フィールドにキャッシュしたい場合は、JS を使用して .innerHTML を取得できます$('body')

于 2011-08-18T16:44:57.517 に答える
0

さて、あなたには2つの問題があります。

最初はあなたが疑うものです。後になるまで、そのようなものにアクセスすることはできません。気付いていないかもしれない 2 つ目の問題は、JavaScript を並べ替えて機能させる方法を見つけたとしても、JavaScript で引用の問題が発生することです。悪い意味で再帰的です。

代わりに$('#export').clickハンドラーを変更して Ajax 呼び出しを行い、サーバー上のリンクに表示する必要がある HTML を別の PHP スクリプトでレンダリングし (出力バッファリングは必要ありません)、その呼び出しの結果をコードに挿入します。クリック ハンドラーで実行しようとしている方法でページに挿入します。

于 2011-08-18T16:41:44.327 に答える