Ir para conteúdo

POWERED BY:

Arquivado

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

Tiago Souza Ribeiro

Usar variáveis criadas em while(), fora dele.

Recommended Posts

Olá, tenho a seguinte função:

 

function page(){
$page = query($_SERVER["QUERY_STRING"]);
$addr = @mysql_query("SELECT addr FROM page WHERE pg='$page' and status='enabled'") or die("A página solicitada não existe ou está desativada para acesso público");
if(empty($page) or $page == "inicio"){
	$showpage = "./content/inicio.php";
}
else{
	while($column = @mysql_fetch_array($addr, MYSQL_ASSOC)){
		$showpage = $column["addr"];
	}
}
return $showpage;
}

 

O que pretendo com isso, é obter o endereço do arquivo .php no banco de dados, da página solicitada. Só estou em dúvida se isso ae funciona (não faz parte dos meus planos ao desenvolver um website sair testando de pouco em pouco). A variável $showpage, definida dentro do while, pode ser usada no return normalmente como fiz, ou ela apenas existe dentro do while? Caso seja a segunda opção, meu código vai estar errado, lógico, ae alguém teria uma solução para isso?

Num determinado local da index.php, haverá um include da seguinte forma (só para facilitar no entendimento):

 

include page();

 

Caso alguém não tenha entendido, me fala ae que tento explicar melhor.

 

Desde já agradeço;

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, tenho a seguinte função:

 

function page(){
$page = query($_SERVER["QUERY_STRING"]);
$addr = @mysql_query("SELECT addr FROM page WHERE pg='$page' and status='enabled'") or die("A página solicitada não existe ou está desativada para acesso público");
if(empty($page) or $page == "inicio"){
	$showpage = "./content/inicio.php";
}
else{
	while($column = @mysql_fetch_array($addr, MYSQL_ASSOC)){
		$showpage = $column["addr"];
	}
}
return $showpage;
}

 

O que pretendo com isso, é obter o endereço do arquivo .php no banco de dados, da página solicitada. Só estou em dúvida se isso ae funciona (não faz parte dos meus planos ao desenvolver um website sair testando de pouco em pouco). A variável $showpage, definida dentro do while, pode ser usada no return normalmente como fiz, ou ela apenas existe dentro do while? Caso seja a segunda opção, meu código vai estar errado, lógico, ae alguém teria uma solução para isso?

Num determinado local da index.php, haverá um include da seguinte forma (só para facilitar no entendimento):

 

include page();

 

Caso alguém não tenha entendido, me fala ae que tento explicar melhor.

 

Desde já agradeço;

No aguardo.

 

Amigo se cada addr estiver associada a apenas um pg no banco de dados acho que não precisa de while, somente o mysql_fetch_assoc(), por que só vai retornar um resultado mesmo. Isso se entendi o que você quer. E não seria melhor pegar um $_GET específico ao invés da query_string toda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

a variavel $showpage existe sim o problema esta na lógica para o while, como ele esta lendo os dados retornados em sua consulta um a um o que vai fazer? ele vai ler tudo e no final das contas $showpage sempre será o ultimo valor.

 

eu não entendi bem o que quer fazer mais em alguns casos eu concateno, exemplo seria:

 

$resultadosDaDB; //supomos que essa variavel retorne os meus dados da db
$resultado = '';
foreach($resultadosDaDB as $resultados){
  $resultado .= $resultados->id; 
}

 

o retorno será 123456789101112...

 

ai caso eu coloque

 

$resultado .= $resultados->id.','; 

ai o retorno será 1,2,3,4,5,6,7,8,9,10,11,12...

 

simplesmente a cada item que ele ler ele adiciona.

lembrando que pra isso é necessário criar a variavel fora do seu foreach ou while

Compartilhar este post


Link para o post
Compartilhar em outros sites

... Só estou em dúvida se isso ae funciona (não faz parte dos meus planos ao desenvolver um website sair testando de pouco em pouco)...

 

Na moral, você pretende criar um site sem testar? Cara você acha mais fácil entrar aqui no forum, digitar a pergunta e aguardar a resposta, do que apertar f5 no seu site?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na moral, você pretende criar um site sem testar? Cara você acha mais fácil entrar aqui no forum, digitar a pergunta e aguardar a resposta, do que apertar f5 no seu site?

 

:clap:

 

Tiago Souza Ribeiro,

Qual o motivo de esconder os erros ? se existem erros, é para que estes sejam arrumados, e não escondidos.

E outra coisa, seu while, é totalmente desnecessário, podia fazer um fetch apenas, jogando o resultado do banco pra variável e retornando esta, como já foi citado acima pelo membro Everaldo Grunge

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo se cada addr estiver associada a apenas um pg no banco de dados acho que não precisa de while, somente o mysql_fetch_assoc(), por que só vai retornar um resultado mesmo. Isso se entendi o que você quer. E não seria melhor pegar um $_GET específico ao invés da query_string toda?

 

É que estou desenvolvendo esse website para um cliente, e ele pediu que os endereços fossem da seguinte forma: http://www.url.com.br/?nomedapagina, e se ele pediu assim, tenho que fazer assim né, e o único jeito que conheço é com $_SERVER['QUERY_STRING']

Ex. para página de downloads: http://www.url.com.br/?downloads. Aí, nessa função que tentei criar, ela obtinha o valor da coluna addr, onde pg fosse downloads, esse valor obtido de addr, seria o endereço da página para ser incluído na index.php com o conteúdo.

 

a variavel $showpage existe sim o problema esta na lógica para o while, como ele esta lendo os dados retornados em sua consulta um a um o que vai fazer? ele vai ler tudo e no final das contas $showpage sempre será o ultimo valor.

eu não entendi bem o que quer fazer mais em alguns casos eu concateno, exemplo seria:

 

$resultadosDaDB; //supomos que essa variavel retorne os meus dados da db
$resultado = '';
foreach($resultadosDaDB as $resultados){
  $resultado .= $resultados->id; 
}

 

o retorno será 123456789101112...

 

ai caso eu coloque

 

$resultado .= $resultados->id.','; 

ai o retorno será 1,2,3,4,5,6,7,8,9,10,11,12...

 

simplesmente a cada item que ele ler ele adiciona.

lembrando que pra isso é necessário criar a variavel fora do seu foreach ou while

 

Não entendi direito os seus exemplos, mas sobre $showpage ser sempre o último valor, minha intensão aí foi obter apenas da linha onde pg fosse a query_string, e como só haveria uma linha com a tal query_string...

 

Ola, na

$page = query($_SERVER["QUERY_STRING"]);

Essa query() é uma função que vocÊ criou?

 

E...

 

Será que tem como explicar Melhor..?..

 

Essa função query() é a famosa proteção anti sql injection :), só não tive criatividade para o nome dela, kk.

 

:clap:

 

Tiago Souza Ribeiro,

Qual o motivo de esconder os erros ? se existem erros, é para que estes sejam arrumados, e não escondidos.

E outra coisa, seu while, é totalmente desnecessário, podia fazer um fetch apenas, jogando o resultado do banco pra variável e retornando esta, como já foi citado acima pelo membro Everaldo Grunge

 

;)

 

Respodendo a você e outros, eu não sabia da possibilidade de usar o fetch sem while, pois em todo lugar que eu vi, tem o while junto, mas sendo assim, vou tentar sem.

 

Agradeço pelas respostas, vou remover o while, se alguém tiver algo a acrescentar, agradeço :D

 

Ah, só informando aqui, não sou um graaaande expert em PHP não, sei apenas o básico e um pouco mais, tento fugir das emboleiras que os "experts" fazem para obter um simples resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que estou desenvolvendo esse website para um cliente, e ele pediu que os endereços fossem da seguinte forma: http://www.url.com.br/?nomedapagina, e se ele pediu assim, tenho que fazer assim né, e o único jeito que conheço é com $_SERVER['QUERY_STRING']

Ex. para página de downloads: http://www.url.com.br/?downloads. Aí, nessa função que tentei criar, ela obtinha o valor da coluna addr, onde pg fosse downloads, esse valor obtido de addr, seria o endereço da página para ser incluído na index.php com o conteúdo.

Porque não usa htaccess ?

 

Essa função query() é a famosa proteção anti sql injection :), só não tive criatividade para o nome dela, kk.

Proteção Anti SQL Injection é usar MySQLi ou PDO. Dois fatores que são importantíssimos analisar antes de escolher MySQLi ou PDO:

1 - Seu banco vai se conectar a um outro tipo de SGDB ? Sim / Não, então se for só MySQL, já sabe a resposta ... use MySQLi, que é quase a mesma coisa.

2 - Saber a diferença entre eles, porque há ...

 

O PDO é uma camada de abstração, permitido acesso a vários bancos relacionais existentes, de fato, não é só porque você não vai trocar de banco de dados ( sair do MySQL, e ir pra PgSQL ), que você não deve usar PDO, o PDO provê uma camada de abstração do banco, além de ser mais rápido em relação a execução de querys, etc ..

Também permitindo o uso de Prepared Statements, da qual faz o risco de SQL Injection ir quase a zero.

MySQLi é quase um PDO, só que ... há diferenças, como a usabilidade dos métodos, mas nada que impeça seu uso.

 

 

As funções mysql_ serão depreciadas no PHP6, então você pode se precaver de erros futuros em relação a isto.

 

Agradeço pelas respostas, vou remover o while, se alguém tiver algo a acrescentar, agradeço :D

Remover as arrobas da frente das funções, erros devem ser corrigidos, e não escondidos.

 

Ah, só informando aqui, não sou um graaaande expert em PHP não, sei apenas o básico e um pouco mais, tento fugir das emboleiras que os "experts" fazem para obter um simples resultado.

 

Engraçado você dizer isso, porque um código embolado é diferente de um código complicado, então você tem que especificar o que é emboleira pra você, porque se estiver falando de código complicado para resolver um simples problema, pode ser que esteja cometendo um erro, claro ... que não vamos levar ao pé da letra sem conhecer o contexto, mas, fica a dica aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque não usa htaccess ?

 

 

Proteção Anti SQL Injection é usar MySQLi ou PDO. Dois fatores que são importantíssimos analisar antes de escolher MySQLi ou PDO:

1 - Seu banco vai se conectar a um outro tipo de SGDB ? Sim / Não, então se for só MySQL, já sabe a resposta ... use MySQLi, que é quase a mesma coisa.

2 - Saber a diferença entre eles, porque há ...

 

O PDO é uma camada de abstração, permitido acesso a vários bancos relacionais existentes, de fato, não é só porque você não vai trocar de banco de dados ( sair do MySQL, e ir pra PgSQL ), que você não deve usar PDO, o PDO provê uma camada de abstração do banco, além de ser mais rápido em relação a execução de querys, etc ..

Também permitindo o uso de Prepared Statements, da qual faz o risco de SQL Injection ir quase a zero.

MySQLi é quase um PDO, só que ... há diferenças, como a usabilidade dos métodos, mas nada que impeça seu uso.

 

 

As funções mysql_ serão depreciadas no PHP6, então você pode se precaver de erros futuros em relação a isto.

 

 

Remover as arrobas da frente das funções, erros devem ser corrigidos, e não escondidos.

 

 

 

Engraçado você dizer isso, porque um código embolado é diferente de um código complicado, então você tem que especificar o que é emboleira pra você, porque se estiver falando de código complicado para resolver um simples problema, pode ser que esteja cometendo um erro, claro ... que não vamos levar ao pé da letra sem conhecer o contexto, mas, fica a dica aí.

 

Não gosto do .htaccess, não entendo aquela linguagem sinistra dele, ae tenho que ficar pesquisando zilhões de horas até achar algo, sei mal o básico dele, como páginas de erro, redirecionamento, bloqueio de ip, etc...

Eh, eu pretendo usar o MySQLi, mas eu sempre me esqueço na hora de escrever o código, rsrs.

Sobre o código embolado, eh que tem gente que usa centenas de funções, para fazer uma coisa que poderia fazer com uma ou duas.

Sobre as arrobas, é outra coisa que sempre me esqueço, eu coloco elas pra caso, algum erro surja para o usuário, não sejam mostrados detalhes do servidor ou do sistema por trás do website, só que esqueço que pra mim eles devem aparecer, e que o projeto ainda não está acessível ao público, kk.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não gosto do .htaccess, não entendo aquela linguagem sinistra dele, ae tenho que ficar pesquisando zilhões de horas até achar algo, sei mal o básico dele, como páginas de erro, redirecionamento, bloqueio de ip, etc...

.htaccess não é linguagem.

Para as regras de Rewrite, são expressões regulares.

 

Sobre o código embolado, eh que tem gente que usa centenas de funções, para fazer uma coisa que poderia fazer com uma ou duas.

Isso não responde o que eu te perguntei, e normalmente, códigos bons, são códigos bem refatorados, portanto se você agrega muita responsabilidade a uma única função, dar manutenção fica um saco.

 

Além do mais, se você tenta deixar seu código menor possível, acredite ... você terá redundâncias, tais como:

<?php

      class A {

             public function doSomething ( ) {
                    // ...
                    file_put_contents ( [, ... ] )
                    $this->notify ( ) ;       
             }

             public function doAnotherThing ( ) {
                    file_put_contents ( [, ... ] )
                    $this->notify ( ) ;
             }

             public function doAnotherThing ( ) {
                    // ...
                    $this->notify ( ) ;
             }

      }

 

Veja, eu executo o mesmo método, e suponha que eu esteja salvando no mesmo arquivo, isso em várias classes, e em vários métodos ... daí pensa, porque não ter mais um método que vai receber parâmetros caso haja mudanças, e deixar essa responsabilidade de salvar em um arquivo e fazer uma notificação pra um único método que passa a ser executado por todos os outros que precisam ?

 

Levando ao pé da letra, e se você precisar mudar a forma que o arquivo é salvo ? e se a função for depreciada, e começar a gerar erros e você tiver que mudar ? só pensar cara, é mais fácil dar manutenção em 1 do que em 100.

 

Sobre as arrobas, é outra coisa que sempre me esqueço, eu coloco elas pra caso, algum erro surja para o usuário, não sejam mostrados detalhes do servidor, só que esqueço que pra mim eles devem aparecer, e que o projeto ainda não está acessível ao público, kk.

 

:seta:

 

<?php
      if ( defined( 'PRODUCTION' ) ){
             error_reporting( E_ALL & ~E_DEPRECATED );
             ini_set( 'display_errors' , 'Off' );
      } else {
             error_reporting( E_ALL | E_STRICT );
             ini_set( 'display_errors' , 'On' );
      }

 

Isso resolve seu problema, defina modo de produção, e então sua aplicação não irá mostrar erros quando for publicada para uso global.

Compartilhar este post


Link para o post
Compartilhar em outros sites

.htaccess não é linguagem.

Para as regras de Rewrite, são expressões regulares.

 

 

Isso não responde o que eu te perguntei, e normalmente, códigos bons, são códigos bem refatorados, portanto se você agrega muita responsabilidade a uma única função, dar manutenção fica um saco, se você falou isso, com certeza não deve conhecer os conceitos de OO.

 

 

 

:seta:

 

<?php
  	if ( defined( 'PRODUCTION' ) ){
             error_reporting( E_ALL & ~E_DEPRECATED );
             ini_set( 'display_errors' , 'Off' );
  	} else {
             error_reporting( E_ALL | E_STRICT );
             ini_set( 'display_errors' , 'On' );
  	}

 

Isso resolve seu problema, defina modo de produção, e então sua aplicação não irá mostrar erros quando for publicada para uso global.

 

Sobre expressões regulares, é uma linguagem do mesmo jeito, segundo a definição de "linguagem", mas tanto faz, não entendo nem pretendo entender isso :)

Sobre as funções e blá blá, não foi isso ae, não sei como explicar o que eu quis dizer (normal isso acontecer comigo, kk), não sei se explica, mas é que tem gente que parece querer se exibir, e faz um monte de coisa desnecessária ou usa métodos mais complicados sendo que existem outros mais simples.

Sobre o modo de produção, provavelmente quando o website for colocado a público, ele vai estar inicialmente em uma hospedagem compartilhada, seria estranho encontrar a função ini_set habilitada, ou permitida, sei lá, isso poderia dar uma bagunça danda no servidor de hospedagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre expressões regulares, é uma linguagem do mesmo jeito, segundo a definição de "linguagem".

Eu me referi ao .htaccess

 

Sobre o modo de produção, provavelmente quando o website for colocado a público, ele vai estar inicialmente em uma hospedagem compartilhada, seria estranho encontrar a função ini_set habilitada, ou permitida, sei lá, isso poderia dar uma bagunça danda no servidor de hospedagem.

 

O.o ?

Qual hospedagem você usa ? cara, todas que já peguei, TODAS, tem.

Até onde eu saiba também, a ini_set, faz a modificação na configuração no runtime, ou seja não é fixa, mas posso estar errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu me referi ao .htaccess

 

 

 

O.o ?

Qual hospedagem você usa ? cara, todas que já peguei, TODAS, tem.

Até onde eu saiba também, a ini_set, faz a modificação na configuração no runtime, ou seja não é fixa, mas posso estar errado.

 

Atá, só achei estranho poder alterar configurações em um servidor compartilhado, mas já que você disse que é no runtime, então tá certo :).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se pudesse, oh ... eu faria tantas coisas hoje em dia sabe ...

Mas com certeza deve ser no runtime cara, porque não faz sentido ficar reescrevendo a configuração a cada ini_set, entende ? é desvantajoso até pra própria linguagem e pra aplicação que usa a ini_set.

 

Mas, entretanto, foi resolvido o problema ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se pudesse, oh ... eu faria tantas coisas hoje em dia sabe ...

Mas com certeza deve ser no runtime cara, porque não faz sentido ficar reescrevendo a configuração a cada ini_set, entende ? é desvantajoso até pra própria linguagem e pra aplicação que usa a ini_set.

 

Mas, entretanto, foi resolvido o problema ?

 

Acho que sim, vou alterar aqui o código, mas só vou poder testar lá mais pra frente, do jeito que está aqui, não funciona, pq n criei banco de dados, nem nada...

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.