Ir para conteúdo

POWERED BY:

Arquivado

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

Nightmare SEP

Retornar resultado do while em uma function

Recommended Posts

Bom dia. Estou precisando fazer uma função mas não sei se é possível fazer desta maneira.

 

Eu tenho um SQL simples, mas preciso fazer vários alterando apenas um campo na consulta, mas não queria ficar repetindo todas eles, então pensei em fazer uma função que retornasse o resultado de um while, mas não consegui achar nenhum exemplo.

 

O código que tenho é esse:

 

<?php
$consulta = mysql_query ("SELECT cod_cliente, nome_cliente, rota FROM pesquisa_clientes WHERE id_pesquisa='$id_pesquisa' AND status='R' AND p_tra1='1' ORDER BY rota") or die (mysql_error());
	
	while ($dados = mysql_fetch_array ($consulta)) {
		$res_cod 	= $dados['cod_cliente'];
		$res_nome 	= $dados['nome_cliente'];
		$res_rota 	= $dados['rota'];
		
		echo "(".$res_rota.") ".$res_cod." - ".$res_nome;
	}
?>

 

O SELECT da consulta que vai mudar todas as vezes, tem como eu fazer algo parecido com isso? E como retornar o resultado?

 

<?php
$sql = "SELECT cod_cliente, nome_cliente, rota FROM pesquisa_clientes WHERE id_pesquisa='$id_pesquisa' AND status='R' AND p_tra1='1' ORDER BY rota";

function resultado_pesquisa ($sql) {
	
	$consulta = mysql_query ($sql) or die (mysql_error());
	
		while ($dados = mysql_fetch_array ($consulta)) {
			$res_cod 	= $dados['cod_cliente'];
			$res_nome 	= $dados['nome_cliente'];
			$res_rota 	= $dados['rota'];
			
			echo "(".$res_rota.") ".$res_cod." - ".$res_nome;
		}
	
}
?>

 

Obrigado pela ajuda. Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente assim:

<?php

echo resultado_pesquisa($id_pesquisa);

function resultado_pesquisa ($id) {

require("bd_connect.php"); // assumindo que neste arquivo estão os parametros de conexão ao bd retornando a conexao em $sqlConnect
  
$sql      = "SELECT cod_cliente, nome_cliente, rota FROM pesquisa_clientes WHERE id_pesquisa='".$id."' AND status='R' AND p_tra1='1' ORDER BY rota";
$consulta = mysqli_query ($sqlConnect, $data) or die (mysql_error()); //Utilize mysqlI. A função mysql esta descontinuada
	
		while ($dados = mysqli_fetch_array ($consulta)) {
			$res_cod 	= $dados['cod_cliente'];
			$res_nome 	= $dados['nome_cliente'];
			$res_rota 	= $dados['rota'];
			
			$result = "(".$res_rota.") ".$res_cod." - ".$res_nome;
			return $result;
		}	
}
?>

Tente dessa forma,

 

ALguma considerações

 

Mysql > Utilize mysqli pois a anterior está descontinuada nas versões mais atuais do PHP

Echo verus Return > Em funções eu prefiro sempre trabalhar com RETURN ao inves de ECHO no resultado dela. Desta forma o resultado da função será impresso somente se eu chamar a função. Com o ECHO o resultado da função sempre será impresso mesmo sem chama-la.

 

Loops > Se você quer imprimir todos os resultados de um LOOP, indique onde você quer e o que quer imprimir dentro do laço do LOOP, neste caso o return dentro do laço.

 

Note que em funções, o ideal - ao menos para mim - é passar os dados filtrados o máximo possivel para não causar qualquer LAG de processamento, ou seja, porque passar toda a query nos dados da função se você quer apenas o $id_pesquisa?

 

Dentro da propria função, como fiz, coloque a sua query e passe apenas o $id_pesquisa nos parametros da função.

Na minha opinião você tera ganho de desempenho e o codigo fica mais limpo.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah legal Guilherme, obrigado. Deixa eu ver se consigo explicar o que preciso.

 

A parte de conexão eu não coloquei no meu exemplo porque já fiz a conexão em outro ponto, mas tudo bem.

O que eu vou precisar mudar em cada vez que eu executar essa função é o nome do campo:

 

$sql      = "SELECT cod_cliente, nome_cliente, rota FROM pesquisa_clientes WHERE id_pesquisa='".$id."' AND status='R' AND p_tra1='1' ORDER BY rota";

 

Neste exemplo está o p_tra1='1'. É isso que vai alterar, pois tenho:

p_tra1='1', p_tra1='2', p_tra1='3', p_tra1='4'

p_tra2='1', p_tra2='2', p_tra2='3', p_tra2='4'

...

 

O que eu preciso é colocar essas informações em algum lugar na hora de chamar a função, mas que imprima o conteúdo do while.

 

echo "(".$res_rota.") ".$res_cod." - ".$res_nome."<br>";

 

Ah legal as outras considerações que você passou, valeu mesmo. Obrigado!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem problema... você pode passar quantos dados quiser na função...

$dado = "dado um";
$dado2 = "dado dois";
$dado3 = "dado tres";

echo minhaFuncao($dado,$dado2,$dado3);

function minhaFuncao($um, $dois, $tres){
$dados = $um.$dois.$tres;
return $dados;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, quanto a isso eu sei. 

 

Mas a dúvida é a respeito do while, pra retornar o resultado dele.

 

Eu não consegui testar hoje, mas amanhã vou fazer um teste e aviso caso não consiga.

 

Obrigadão Guilherme.

Compartilhar este post


Link para o post
Compartilhar em outros sites
$retorno_do_while = ''; // string vazia

while( condicao ) {
    $retorno_do_while = $retorno_do_while . 'texto texto texto'; // ou $retorno_do_while .= 'texto';
}

// após acabar o while, retorne, não retorne durante o while
return $retorno_do_while;

É isso?

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.