PHP: пересмотреть всю страницу перед обслуживанием? - PullRequest
1 голос
/ 03 марта 2009

В конце страницы, если что-то происходит, его необходимо очистить, а затем всю страницу необходимо повторно проанализировать, прежде чем отправлять клиенту. Я собирался повторить javascript, чтобы обновить страницу, но это заставит их загрузить страницу, а затем перезагрузить ее ... Мне было интересно, есть ли способ просто сказать php-движку вернуться к началу и заново -парсировать всю страницу?

Спасибо!

Я постараюсь объяснить проблему более четко, но она сложна, и я ужасный коммуникатор. Я на странице со списком продуктов, я даю пользователям возможность выбрать поля, чтобы сузить результаты. Система запоминает это, поэтому им не нужно выбирать их. Если они сузят категорию, такую ​​как цвет металла, а затем перейдут к категории, в которой цвет металла не имеет значения, например, хрустальные статуэтки, это не даст никаких результатов, поскольку ни одна из них не будет соответствовать выбранному цвету металла. Генерировать запрос для извлечения товаров из базы данных очень сложно, потому что разные категории предъявляют разные требования к поиску правильных товаров. поэтому, как только запрос сгенерирован, я хочу проверить его на mysql_num_rows (), и если результатов нет, очистите выбор пользователей и начните заново.

Ответы [ 6 ]

9 голосов
/ 03 марта 2009

Вы немного расплывчаты, но если вы просто говорите о повторном анализе выходных данных, вы можете сделать это, используя буферизацию вывода .

3 голосов
/ 03 марта 2009

Мне не совсем понятно, в чем проблема, но не могли бы вы решить, что нужно показать перед созданием HTML, а затем отправить правильную вещь в первый раз?

1 голос
/ 03 марта 2009

Сгенерировать запрос для извлечения товаров из базы данных очень сложно, потому что разные категории предъявляют разные требования к поиску правильных товаров. поэтому, как только запрос сгенерирован, я хочу проверить его по mysql_num_rows(), и если нет результатов, очистите выбор пользователей и начните заново.

В этом случае просто поместите запрос в функцию, которая возвращает результат, проверьте количество строк, а если он равен нулю, очистите фильтры и вызовите эту функцию во второй раз.

1 голос
/ 03 марта 2009

Буферизация вывода (ob_start и ob_clean) в сочетании с разделением функциональности под рукой в ​​отдельный файл и eval (), что должно сработать.

О, и последние версии PHP на самом деле имеют оператор goto ... хотя я всегда буду отрицать, что упомянул что-нибудь об этом. : -)

0 голосов
/ 03 марта 2009

Я думаю, вы ищете что-то вроде этого:

<?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.)
}
?>
0 голосов
/ 03 марта 2009

Я думаю, вы немного об этом покончите.

Что нужно сделать для повторной обработки страницы, это снова перенаправить пользователя на страницу, используя

header('Location: thepagefile.php');

однако, если вы действительно хотите проанализировать файл, не создавая новую страницу, вы также можете просто включить файл снова:

include thepagefile.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?

но на самом деле это не имеет смысла, но я надеюсь, что это поможет.

Я бы на самом деле хотел бы знать, в чем заключается настоящая проблема, которую вы пытаетесь решить.

...