Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cristiano A. Franco

Alguem pode me dar uma luz com esse array...

Recommended Posts

Pessoal a idéia é tornar o script à prova de adulteração na querystring... se alguem alterar na mão ele vai pra uma página de erro.

 

Alguem pode me dizer pq não está funcionando corretamente?

Ele não tá colocando na variável $arquivo o array do diretório.

Eis o código:

 

PHP [/tr][tr]<?

##################################################################

//---------- AQUI CPMEÇA A PARTE Q VAI GERAR CONTEÚDO ----------//

 

$total = count($_GET);

 

if ($total == 0) {

 

$_Conteudo = "principal.php";

 

}

 

else {

 

if (!isset($_GET['anopub']) or !isset($_GET['mespub']) or !isset($_GET['materia']) or $total > 3) {

 

$_Conteudo = "./Conteudo/errodir.php";

 

}

 

else {

 

$ano = $_GET['anopub'];

$mes = $_GET['mespub'];

$cont = $_GET['materia'];

 

if (!$Diretorio = opendir("./Conteudo/$ano/$mes")) {

 

$varERRO = 1;

 

$_Conteudo = "./Conteudo/errodir.php";

 

}

 

else {

 

$varERRO = 0;

 

/* a parte problemática está aqui

* pela lógica era pra variável $arquivo

* virar um array com o conteúdo

* da pasta que foi aberta. */

$arquivo = readdir($Diretorio);

 

if (in_array("$cont.php", $arquivo)) {

 

while (false !== ($arquivo)) {

if ($arquivo != "." && $arquivo != "..") {

 

if ($arquivo == "$cont.php") {

 

$_Conteudo = "./Conteudo/$ano/$mes/$arquivo";

}

 

}

 

 

 

}

}

 

else {

 

$_Conteudo = "./Conteudo/errodir.php";

 

}

 

}

}

 

 

if ($varERRO == 0) {

 

closedir($Diretorio);

 

}

 

}

//---------- FIM DA PARTE QUE GERA O CONTEÚDO ----------//

##########################################################

?>

[/tr]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque o readdir dentro do while, desse jeito aí, ele só vai pegar o primeiro nome de arquivo:

PHP [/tr][tr]while (false !== ($arquivo = readdir($Diretorio))) {[/tr]

E sempre use variaveis fora de aspas (embora algumas vezes funcione do mesmo jeito):

PHP [/tr][tr]if (in_array($cont.".php", $arquivo)) {[/tr]

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jóia pela dica Prescot.

Eu consegui resolver o problema, passei a madrugada inteira, li o help do PHP de cima embaixo e acabei fazendo um script mais enxuto e mais rápido. :)

 

Veja o código abaixo:

PHP [/tr][tr]##################################################################

//---------- AQUI CPMEÇA A PARTE Q VAI GERAR CONTEÚDO ----------//

 

/* Variável que conta quantos elementos tem na querystring $_GET. */

$total = count($_GET);

 

/* Se $total for igual a 0, significa que o usuário não acessou conteúdo e vai para a página principal. */

if ($total == 0) {

 

$_Conteudo = "principal.php";

 

}

 

else {

 

/* Caso alguma das variáveis do script não esteja iniciada ou se existir mais do que 3 valores na querystring, vai para a página de erro. */

if (!isset($_GET['anopub']) or !isset($_GET['mespub']) or !isset($_GET['materia']) or $total > 3) {

 

$_Conteudo = "Conteudo/errodir.php";

 

}

 

/* Se tiver tudo certo, recupera o valor das variáveis na querystring. */

else {

 

$ano = $_GET['anopub'];

$mes = $_GET['mespub'];

$cont = $_GET['materia'];

 

/* Agora testa pra ver se os 2 primeiros valores existem, ou seja, os nomes dos diretórios, redirecionando o usuário a uma página de erro caso ele tente inserir na querystring diretórios que não existem. A função file_exists() verifica se diretórios ou arquivos existem. */

if (!file_exists("Conteudo/$ano") or !file_exists("Conteudo/$ano/$mes")) {

 

$_Conteudo = "Conteudo/errodir.php";

 

}

 

/* Se os diretórios existem... */

else {

 

/* Coloca na variável $Diretorio todo o conteúdo do diretório onde se enontra a página a ser exibida com a função scandir(). */

$Diretorio = scandir("Conteudo/$ano/$mes");

 

/* Verifica se o arquivo a ser exibido é um dos ítens do diretório com a função in_array(), se for constrói a string da variável $_Conteúdo, com diretório, sub-diretório e arquivo, que será usada mais tarde com include no corpo da página. */

if (in_array("$cont.php", $Diretorio)) {

 

$_Conteudo = "Conteudo/$ano/$mes/$cont.php";

 

}

 

/* Se não existir, vai para a página de erro. E estamos conversados! :) */

else {

 

$_Conteudo = "Conteudo/errodir.php";

 

}

 

}

 

}

}

//---------- FIM DA PARTE QUE GERA O CONTEÚDO ----------//

##########################################################

[/tr]

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.