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$contents使用ob_get_contents();This works,并且回显 $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 调用时,您只输出了大约 10 行 javascript 和 html。PHP不会及时返回并神奇地填写您执行此 ob_get_contents() 的文档的其余部分。

您基本上是在页面开始出现的那一刻从激光打印机中撕下页面,而打印机仍在打印页面的下半部分。

我不明白您为什么要将页面内容嵌入到输入字段中。如果您想以某种方式将页面的内容缓存在输入字段中,您可以使用 JS 来获取 .innerHTML 的$('body').

于 2011-08-18T16:44:57.517 回答
0

嗯,你有两个问题。

第一个是你怀疑的。直到以后你才能访问那些东西。您可能没有意识到的第二个问题是,即使您设法找到一种重新排序并使其工作的方法,您也会在 JavaScript 中遇到引用问题。它是递归的,以一种糟糕的方式。

您应该做的是更改您的$('#export').click处理程序以执行 Ajax 调用,在单独的 PHP 脚本中呈现您需要出现在服务器上的链接中的 HTML(不需要输出缓冲),然后让您的代码注入该调用的结果以您现在尝试在单击处理程序中执行的方式进入页面。

于 2011-08-18T16:41:44.327 回答