Pergunta

No final de uma página, se algo ocorre, ele precisa ser limpo, em seguida, a página inteira precisa ser re-analisado antes de servir para o cliente. Eu estava indo para ecoar um javascript para atualizar a página, mas que vai fazê-los carregar a página e, em seguida, recoloque-o ... Eu queria saber se havia uma maneira de simplesmente dizer o motor php para voltar ao início e re -parse a página inteira?

Obrigado!

Vou tentar explicar o problema de forma mais clara, mas é complicado e eu sou um terrível comunicador. I na página que lista os produtos que eu estou dando aos usuários a opção de selecionar os campos para reduzir os resultados. O sistema lembra isso para que eles não tem que manter os selecionou. Se eles estreitar uma categoria como a cor de metal e, em seguida, ir para uma categoria que a cor do metal é irrelevante como estatuetas de cristal não vai mostrar qualquer resultado porque nenhum vai combinar com a cor do metal escolhido. Para gerar a consulta para puxar os produtos a partir da base de dados é muito complicado porque diferentes categorias têm exigências diferentes para encontrar os produtos corretos. assim uma vez que a consulta é gerada eu quero testá-lo contra mysql_num_rows () e se não houver resultados limpar as escolhas de usuários e começar de novo.

Foi útil?

Solução

Para gerar a consulta para puxar os produtos a partir da base de dados é muito complicado porque diferentes categorias têm exigências diferentes para encontrar os produtos corretos. assim uma vez que a consulta é gerada eu quero testá-lo contra mysql_num_rows() e se não houver nenhum resultado limpar as escolhas de usuários e começar de novo.

Nesse caso, basta colocar a consulta dentro de uma função que retorna o resultado, verifique a contagem de linhas, e se for zero, limpar os filtros e chamar essa função pela segunda vez.

Outras dicas

Você está sendo um pouco vaga, mas se você está apenas falando sobre reparsing a saída, você poderia fazer isso usando buffer de saída .

Eu não estou totalmente claro qual é o problema, mas você não poderia decidir o que deve ser mostrado antes de criar o HTML, e em seguida, enviar a coisa certa pela primeira vez?

buffer de saída (ob_start e ob_clean), combinado com separando a funcionalidade na mão em um arquivo e eval separado () 'ing que deve fazer o truque.

Oh, e versões recentes do PHP realmente ter um Goto declaração ... embora eu sempre vou negar mencionar nada sobre isso. : -)

Eu acho que você está indo sobre ele um pouco fora.

O que você deve fazer para reanalisar a página é para redirecionar o usuário para a página novamente, usando

header('Location: thepagefile.php');

No entanto, se você realmente gostaria de reanalisar o arquivo sem criar uma nova página, você também pode apenas incluir o arquivo novamente:

incluem thepagefile.php

Mas você provavelmente obter o mesmo resultado. Se você quiser realmente parse a saída da página que você faria algo como:

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

mas que na verdade não faz sentido, mas espero que ajude.

Eu realmente gostaria de saber qual é o verdadeiro problema que você está tentando resolver realmente é.

Eu acho que você está procurando algo parecido com isto:

<?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.)
}
?>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top