Ir para conteúdo

POWERED BY:

Arquivado

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

marcelo2605

[Resolvido] Undefined Variable

Recommended Posts

Tenho uma index.php que carrega por include uma header.php e por query string uma conteudo.php

 

Na conteudo.php tenho uma variável $página. Seu echo aparece na index.php e na header.php

 

Mas está dando problema de undefined variable.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código é bem simples:

 

No index.php tenho o include da função querystring:

 

<?php include('../../php/funcao_querystring.php'); ?>

<!DOCTYPE HTML>
<html>
<head>

 

No corpo, tenho o seguinte:

 

<?php include 'perfil_header.php'; ?>

<div id="content_white">
    	<?php QueryString($_GET['pagina'], 'perfil1', 'arquivos'); ?>
</div>

 

No header.php:

 

<?php echo $paginacao; ?>

 

E finalmente no perfil1.php, carregado no index:

 

<?php
$paginacao = 1;
?>

 

Como faço para uma variável declarada em um arquivo carregado por include aparecer em outro arquivo também carregado por include?

 

arquivo1

$var1 = teste;

 

arquivo2

echo $var1

 

index

include arquivo 1

include arquivo 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro, não entendi.

 

No meu exemplo, o perfil1.php é uma página que carrega determinada variável (em perfil2.php, essa variável é outra e assim por diante). Essas páginas são carregadas em index.php por include.

 

O header, também carregado por include, precisa exibir a variável declarada em na página carregada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Igor, acho que expliquei mal. Olha só:

 

index.php?pagina=perfil1

include header.php

include perfil1.php

 

index.php?pagina=perfil2

include header.php

include perfil2.php

 

Eu criei uma variável $pagina que mostra o número de cada página e precisa ser exibida em header.php. E essa variável está dentro de cada perfil

 

Descobri que o problema é a ordem dos include: o perfil.php, que carrega a variável, é carregado depois do header.php, que mostra a variável.

 

mas não posso alterar a ordem. Existe outra forma?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Descobri que o problema é a ordem dos include: o perfil.php, que carrega a variável, é carregado depois do header.php, que mostra a variável.

 

mas não posso alterar a ordem. Existe outra forma?

Crie a variável antes então.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Serra, mas a variável está dentro das páginas perfil1, perfil2, etc...

 

Essa variável indica um valor específico de cada página perfil

 

e na estrutura do html, o header precisa ficar antes do conteúdo de perfil.

 

É possível carregar um outro arquivo com o mesmo nome dos arquivos perfil 1, perfil 2 (mas em outra pasta) para que eles sejam carregados no início?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Serra, mas a variável está dentro das páginas perfil1, perfil2, etc...

 

Essa variável indica um valor específico de cada página perfil

 

e na estrutura do html, o header precisa ficar antes do conteúdo de perfil.

 

É possível carregar um outro arquivo com o mesmo nome dos arquivos perfil 1, perfil 2 (mas em outra pasta) para que eles sejam carregados no início?

 

Perfeitamente. Para subir diretórios, utilize o atalho ..

 

<?php include '../arquivo_um_diretorio_acima.php';
include '../../arquivo_dois_diretorios_acima.php';

include 'diretorio/arquivo_um_diretorio_abaixo.php';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro, na verdade o que eu gostaria é o seguinte:

 

A função:

 

<?php
        function QueryString(&$get, $inicio, $pasta){
               $get         = (isset($get)) ? strip_tags(trim($get)) : '';
               $regex       = '/(http|www|.php|.asp|.net|.gif|.exe|.jpg|.html|.htm)/i';
               $paginaHome  =  "{$pasta}/{$inicio}.php";
               $paginaAtual = "{$pasta}/{$get}.php";
			if(empty($get) || preg_match($regex, $get) || !file_exists($paginaAtual)){
                    include($paginaHome);
                 }else{
                   include($paginaAtual);
                 }
       }
?>

 

Carrega as páginas no arquivo index.php

 

<body>
       <?php echo $linkPrev; ?>

       <?php include 'perfil_header.php'; ?>

       <?php QueryString($_GET['pagina'], 'perfil1', 'arquivos'); ?>

       <?php echo $linkNext; ?>
</body>

 

Em cada página eu declaro os valores das variáveis $linkPrev, $linkNext e $paginacao

 

Mas porque está dando undefined variable?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dei uma ligeira refatorada:

<?php
        function QueryString(&$get, $inicio, $pasta){
               $get         = strip_tags(trim($get));
               $regex       = '/(http|www|\.(php|asp|net|gif|exe|jpg|html?))/i';
               $path        = "{$pasta}/%s.php";
               $try_path    = sprintf($path, $get);
               if (!preg_match($regex, $get) and file_exists($try_path)) {
                   print_r('incluindo {$get}...');
                   return include $try_path;
               }
               print_r('Falhou! Incluindo home');
               include sprintf($path, $inicio);
        }

 

Execute - não testei - Veja as mensagens de debug e veja se as condições estão sendo atendidas corretamente.

 

Uma vez que $get não possui um valor incial, é um argumento requerido, o que dispensa aquela verificação do isset($get)

A menos que você tenha um arquivo chamado .php, é desnecessário verificar se $get está vazio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro, obrigado pela ajuda.

 

Troquei pelo seu código, mas ainda assim está acusando undefined variable.

 

Então criei um arquivo com o seguinte código inserido no index.php por include:

 


$url = $_SERVER ['REQUEST_URI']; 

if ($url == "/website/port/perfil/index.php?pagina=perfil1"){
$paginacao = "1";
}elseif ($url == "/website/port/perfil/index.php?pagina=perfil2"){
$paginacao = "2";
}...

 

E por aí vai. Não sei se é a melhor maneira, mas funcionou.

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.