我正在尝试使用输出缓冲来捕获我的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();
这样可行,并且回显$内容会复制html页面。
但是,在我的jQuery中,我试图使用以下命令将其分配给隐藏文本字段('link'):
$("#link").val("<?php echo($contents); ?>");
然而,这不起作用。我有一种感觉,因为我访问内容太过时尚但不太确定......任何想法?
答案 0 :(得分:1)
$("#link").val("<?php echo(ob_get_contents()); ?>"); //THIS DOESN'T WORK
当你执行ob_get_contents调用时,你只输出大约10行的javascript和html。 PHP将 NOT 及时回到过去并且神奇地填写你执行此ob_get_contents()的文档的其余部分。
当页面开始出现时,您基本上是从激光打印机中翻页,而打印机仍在打印页面的下半部分。
我无法理解为什么要将页面内容嵌入到输入字段中。如果你想以某种方式在输入字段中缓存页面的内容,你可以使用JS来获取$('body')
的.innerHTML。
答案 1 :(得分:0)
嗯,你有两个问题。
首先是你怀疑的。直到以后你才能访问这些东西。您可能没有意识到的第二个问题是,即使您设法找到重新排序并使其工作的方法,您也会在JavaScript中引用问题。这是递归的,但是很糟糕。
您应该做的是改变您的$('#export').click
处理程序以执行Ajax调用,在单独的PHP脚本中呈现您需要出现在服务器上的链接中的HTML(无需输出缓冲)然后具有你的代码将你调用的结果注入页面,就像你现在在点击处理程序中尝试的那样。