1

在一个页面的末尾,如果有什么事情发生了,就需要清除它,然后整个页面需要重新解析,然后再提供给客户端。我打算回显一个 javascript 来刷新页面,但这会让他们加载页面然后重新加载它......我想知道是否有一种方法可以告诉 php 引擎回到开头并重新-解析整个页面?

谢谢!

我会尝试更清楚地解释这个问题,但它很复杂,而且我是一个糟糕的沟通者。我在列出产品的页面上为用户提供了选择字段以缩小结果的选项。系统会记住这一点,因此他们不必一直选择它们。如果他们缩小了金属颜色之类的类别,然后转到与金属颜色无关的类别,例如水晶雕像,它将不会显示任何结果,因为没有一个与所选金属颜色相匹配。生成查询以从数据库中提取产品非常复杂,因为不同的类别对找到正确的产品有不同的要求。因此,一旦生成查询,我想针对 mysql_num_rows() 对其进行测试,如果没有结果,请清除用户的选择并重新开始。

4

6 回答 6

9

你有点含糊,但如果你只是在谈论重新解析输出,你可以使用output buffering来做到这一点。

于 2009-03-03T20:03:58.993 回答
3

我不完全清楚问题是什么,但你不能在创建 HTML 之前决定要显示什么,然后第一次发送正确的东西吗?

于 2009-03-03T20:04:31.910 回答
1

输出缓冲(ob_start 和 ob_clean),结合将手头的功能分离到一个单独的文件和 eval()'ing 应该可以解决问题。

哦,最近的 PHP 版本实际上有一个goto声明......虽然我总是否认提及它。:-)

于 2009-03-03T20:07:06.087 回答
1

生成查询以从数据库中提取产品非常复杂,因为不同的类别对找到正确的产品有不同的要求。因此,一旦生成查询,我想对其进行测试mysql_num_rows(),如果没有结果,请清除用户的选择并重新开始。

在这种情况下,只需将查询放在返回结果的函数中,检查行数,如果为零则清除过滤器并再次调用该函数。

于 2009-03-03T20:30:57.433 回答
0

我觉得你有点过头了。

重新解析页面应该做的是将用户再次重定向到页面,使用

header('Location: thepagefile.php');

但是,如果您真的想在不创建新页面的情况下重新解析文件,您也可以再次包含该文件:

包括页面文件.php

但你可能会得到相同的结果。如果您想实际解析页面的输出,您可以执行以下操作:

ob_start(); // this is at the very top of the code/page
// all the code goes here
$output = ob_get_clean();
eval($output); // WTF?

但这实际上没有任何意义,但我希望它有所帮助。

我实际上想知道您要解决的真正问题是什么。

于 2009-03-03T20:12:50.407 回答
0

我认为您正在寻找这样的东西:

<?php
ob_start(); //we start output buffering, this means nothing is send to the browser
//We do some code stuff
$time = microtime();
echo "Hai \n"; //Note taht mixing logic and output in real life
echo $time;  // is terribly practice
echo "\n bai"; //I do it here purely for the example
if(/*some condition */){
 $anErrorHappened = true;
}
if($anEroorHappened === true){
  //Load the output in a var if you need it
  //Otherwise don't
  $output = ob_get_clean();
  //Do other code stuff
  //I.E. send an error page
  include('errorPage.html');
}
else{
 ob_end_flush(); //Send everything the script has echo()'d, print()'ed and send to the browser in any other way (I.E. readfile(), header() etc.)
}
?>
于 2009-03-03T20:31:19.177 回答