Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde Galera ,
Fiquei pensando em como poderia fazer isso , junto com o banco de dados , nos teste esta quase tudo se saindo bem , mas não esta exibindo meu conteudo.
Segue como eu fiz :
Criei uma tabela (tblPaginas) , nela coloqueui os campos : id ,name , controller , arg e ennable.
id name controller arg ennable
1 index 0 0
2 pagina1 pag 1 1
3 pagina2 pag 2 1
4 pagina3 pag 3 1etcNo meu header , coloquei o seguinte :
<?php
echo '
<li>
<a href="javascript:;">
<i class="icon-basket"></i>
<span class="title">PAGINAS</span>
<span class="arrow "></span>
</a>';
echo ' <ul class="sub-menu">';
$sql= ("SELECT * FROM tblPaginas where ennable = 1 and arg > '0' order by id ");
$query = mysql_query($sql);
while($row = mysql_fetch_array($query))
{
echo'
<li>
<a href="index.php?'.$row['controller'].'='.$row['arg'].'">
<text style="TEXT-TRANSFORM: uppercase;">'.$row['name'].' </text></a>
</li>' ;}
echo '</ul>';
echo '</li>';
?><?php
$uri = $_GET['arg'];
$var = $uri;
switch ($var)
{
case 1:
include 'pag/geral.php';
break;
case 2:
include 'pag/pagina2.php';
break;
case 3:
echo "DEU CERTO O 3";
break;
}
?>Mas, ele não esta exibindo as paginas , não esta funcionando este codigo que fiz da pagina content.Pensei em fazer assim , pois posso mais tarde tentar fazer um painel de controle , e editar as paginas pelo banco.
Podem me ajudar a fazer este codigo funcionar.
Desde já , grato
>
O que acontece exatamente? Explique melhor.
Veja qual é o valor de $uri. Se for algum valor não tratado no switch, não exibirá nada, mesmo. Para evitar isso, inclua o "default" no switch, exibindo uma mensagem de erro
Um dos dificultadores do seu código é o uso do valor do campo "controller". Seria melhor sempre usar "pag", assim $_GET['pag'] sempre terá valor conhecido.
Se mantiver assim, se $_GET['pag'] não existir, será exibi o notice "Undefined Index". Nesse caso, use isset para verificar isso. Veja mais aqui: [http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/#undef_index](http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/#undef_index)
Boa tarde Beraldo ,
então , não acontece nada quando eu clico no link hehe , tipo , continua aparecendo o menu ,footer , minha sidebar , mas no lugar que era para aparecer o conteudo , fica em branco.
Eu defini manual mesmo o GET , mas eu queria que ele fosse definido de acordo com o valor que esta no banco.
Teria como fazer isso ?
Procure manter as exibições de erro sempre ativas, como mostrado neste tópico.
Você verificou o valor de $uri? Use var_dump.
É possível fazer o que você falou. Mas, se você mantiver variável o valor de "controller", seu código terá de testar todas elas, usando isset, como eu sugeri. Eu acho que seria melhor fixar o nome dessas variáveis, assim você só precisar usar $_GET['pag'] por exemplo
>
Procure manter as exibições de erro sempre ativas, como mostrado neste tópico.
Você verificou o valor de $uri? Use var_dump.
É possível fazer o que você falou. Mas, se você mantiver variável o valor de "controller", seu código terá de testar todas elas, usando isset, como eu sugeri. Eu acho que seria melhor fixar o nome dessas variáveis, assim você só precisar usar $_GET['pag'] por exemplo
Então , eu deixo sim hehe , mas ele não retorna erro , é como se simplesmente não encontrasse o valor do GET na url (ao algo do tipo , não sie explicar )
Eu coloquei o GET manual mesmo , assim :
<?php
if (empty($_GET))
{
include 'pag/home.php';
}
$uri = $_GET['produto'];
$var = $uri;
switch ($var)
{
case 1:
include 'pag/produto/geral.php';
break;
etc...
Então , quando eu clico em um link onde ficara na url index.php?produto=1 , na pagina , ele incluira normal a pagina produto/geral.php. Quando tentei colocar para pegar o 'controller' pela url , ele mostra todo o header e o footer , mas ''não inclui'' a pagina.
Eu tenho o controller ferramentas , configurações , etc . E não queria setar um GET fixo ou fazer eles 2 ou 3 vezes ,tipo :
<?
$uri = $_GET['produto'];
$var = $uri;include 'pag/produto/geral.php';
break;
etc...
}
?>
<?
$uri = $_GET['ferramentas'];
$var = $uri;echo "DEU CERTO";
break;>
E não queria setar um GET fixo ou fazer eles 2 ou 3 vezes ,tipo :
Porque se eu adiconar um campo novo la no banco , teria que mexer no codigo
Eu estou sugerindo algo justamente pra evitar ter que alterar código ao cadastrar algo no banco.
Veja: você gera links assim:
index.php?controller=arg
"controller" e "arg" ambos vêm do banco, ou seja, são valores variáveis. Só no seu exemplo, há dois valores para "controller": vazio e "pag". (aliás, isso é até um "problema", por gerar a seguinte URL: index.php?=0)
Quando tiver mais valores em "controller", terá outros nomes de variáveis para usar no $_GET. Ou seja, seu switch deverá ficar dentro de um loop que testa por $_GET[$controller], onde $controller são todos os valores do campo "controller" no banco
Minha sugestão é fixar o nome da variável na URL, ficando assim: index.php?cont=<controller>&arg=<arg>, ou seja, toda URL terá as variáveis "cont" e "arg". Assim fica mais simples seu switch
Quer uma sugestão? Já que quer criar um sistema robusto de "rotas", por que não usa rotas de verdade? Use um simples framework para isso. Recomendo o Slim. É muito simples criar rotas com ele. E já ficam no formato de URLs Amigáveis :thumbsup:
Quer outra sugestão? Largue as funções mysql_*. Elas estão obsoletas desde o PHP 5.5. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql
>
Eu estou sugerindo algo justamente pra evitar ter que alterar código ao cadastrar algo no banco.
Veja: você gera links assim:
index.php?controller=arg
"controller" e "arg" ambos vêm do banco, ou seja, são valores variáveis. Só no seu exemplo, há dois valores para "controller": vazio e "pag". (aliás, isso é até um "problema", por gerar a seguinte URL: index.php?=0)
Quando tiver mais valores em "controller", terá outros nomes de variáveis para usar no $_GET. Ou seja, seu switch deverá ficar dentro de um loop que testa por $_GET[$controller], onde $controller são todos os valores do campo "controller" no banco
Minha sugestão é fixar o nome da variável na URL, ficando assim: index.php?cont=<controller>&arg=<arg>, ou seja, toda URL terá as variáveis "cont" e "arg". Assim fica mais simples seu switch
Quer uma sugestão? Já que quer criar um sistema robusto de "rotas", por que não usa rotas de verdade? Use um simples framework para isso. Recomendo o Slim. É muito simples criar rotas com ele. E já ficam no formato de URLs Amigáveis :thumbsup:
Quer outra sugestão? Largue as funções mysql_*. Elas estão obsoletas desde o PHP 5.5. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql
Vou dar uma estudada mais afundo no Slim Framework .Em relação ao uso de PDO , estou começando agora com MYSQL , PHP , etc . Acredito que seja melhor aprender ele primeiro e depois ir partindo para O PDO e MySQLi .
Em relação ao meu caso , evou testar a dica que deu , e enquanto não arrumo 100% do jeito que quero , montei 2 ou 3 switch com os possiveis GET do controller que eu possa a ter , só para poder ir testando as outras paginas.
Grato pela atenção e pela ajuda
O que acontece exatamente? Explique melhor.
Veja qual é o valor de $uri. Se for algum valor não tratado no switch, não exibirá nada, mesmo. Para evitar isso, inclua o "default" no switch, exibindo uma mensagem de erro