Ir para conteúdo
Fórum Script Brasil
  • 0

não mostrar dados repetidos na consulta ao mysql


jlmsbage

Pergunta

boa tarde!

preciso de um auxilio dos amigos.

imagine a seguinte situação: você entra num site onde são apresentadas as ofertas de diversos anunciantes.

baseado nos melhores preços, você vai montando sua lista de compras conforme abaixo:

produto x do anunciante A;

produto y do anunciante A

produto W do anunciante B

produto K do anunciante C;

produto Q do annunciante C

produto Z do anuciante A;

produto XY do anunciante B;

produto YZ do anunciante A; e por aí vai.

meu problema é o seguinte, eu gostaria de imprimir os dados do anunciante, como endereço,telefone de contato,etc... UMA ÚNICA VEZ ao final da lista independente de qtas vzs ele aparece na lista.

segue o código abaixo:

<?php
session_start();
//session_destroy();
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sem t&iacute;tulo</title>
<style rel="stylesheet" type="text/css" media="print">
#botao {
	display: none
}
</style>
<style>
.total{font:Arial, Helvetica, sans-serif;
		font-size:18px;
		font-weight:bold;}
.total2{font:Arial, Helvetica, sans-serif;
		font-weight:bold;
		font-style:italic;
		}
.lista{
	padding:4px;
	
}
</style>
</head>
 
<body>
<?php
//instanciar a p�gina do carrinho
$pagina = 'carrinho.php';
 
//inicio da class
		
function conexao(){
	//conex�o com banco de dados
 	mysql_connect($this->hostname, $this->login, $this->senha) or die("N�o foi poss�vel validar os dados".mysql_error());
	mysql_select_db($this->banco) or die("N�o foi poss�vel conectar ao banco".mysql_error());
	
	mysql_query("SET NAME 'utf-8'");
	mysql_query("SET character_set_connection='utf-8'");
	mysql_query("SET character_set_clien='utf-8'");
	mysql_query("SET character_set_results='utf-8'");	
 
}
 
 
//mostrar carrinho de compra
function carrinho (){
	$soma=0;
	//verificar session
	if($_SESSION){
		foreach($_SESSION as $nome=>$quantidade){
			if ($quantidade>0){
			if(substr($nome,0,9) == 'produtos_'){
				// pegar id da session
				$id = substr($nome,9,(strlen($nome) -9));
				$PD = mysql_query("SELECT id,id_anun, produto, valor FROM integrantes WHERE id=".mysql_real_escape_string((int)$id));				
				while($list = mysql_fetch_assoc($PD)){
					$AN = mysql_query("SELECT `anunciantes`.`id_anun`, `anunciantes`.`nome_anun` FROM `anunciantes` WHERE id_anun=".mysql_real_escape_string($list['id_anun']));
				$anun = mysql_fetch_assoc($AN);	
					$subtotal = $quantidade * $list['valor'];
					$_SESSION['anun']=$list['id_anun'];
					
				echo '
					
  <tr>
   <td class="lista total2">'.$anun['nome_anun'].'</td>
    <td class="lista total2">'.$list['produto'].'</td>
	<td class="lista total2">'.$quantidade.' X</td>
    <td class="lista total2">R$ '.number_format($list['valor'],2,',','.').'</td>
	<td class="lista total2"><a href="processa.php?add='.((int)$id).'"><img src="images/add.png" ="Aumentar Quantidade" width="20" height="20"></a></td>
	<td class="lista"><a href="processa.php?menos='.((int)$id).'"><img src="images/menos.png" ="Diminuir Quantidade" width="20" height="20"></a></td>
	<td class="lista"><a href="processa.php?del='.((int)$id).'"><img src="images/remove.png" ="Excluir item" width="20" height="20"></a></td>
	<td class="lista" class="total">R$ '.number_format($subtotal,2,',','.').'</td>
	<tr>
  
 
  </tr>
	
    
	</tr>';
	echo $list['id_anun'];
	 //echo $_SESSION['anun'];
          $end = mysql_query("SELECT DISTINCT `nome_anun` FROM `anunciantes` WHERE `id_anun` =".$list['id_anun']."HAVING id_anun = 1");
          
          
				$imprime = mysql_fetch_assoc($end);
                                //echo $imprime['nome_anun']; 			
					
	   }
	  }
	
	  $soma += $subtotal;
          
	   }
        } 
         
	
	if($soma == 0){
		echo '<td colspan="8" class="total">Sua lista de compras est� vazia!	</td>';
	}else{
		echo '<tr>
  <tr>
  <td colspan="4"class="total"></td>
  <td colspan="2"class="total">TOTAL </td>
 
  <td colspan="2" class="total" align="right"> R$: '.number_format($soma,2,',','.').'</td>
 
  </tr>
  <tr>
  <td colspan="8"class="total">
 
  
  </td>
  </tr>
  ';
	}
 
}
}
 
//fim class
}
$conecta = new shopping();
$conecta->conexao();
function antiSQL($sql)
    {
    $seg = preg_replace("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/","",$sql); //remove palavras que          contenham a sintaxe sql
    $seg = trim($seg); //limpa espa�os vazios
    $seg = strip_tags($seg); // tira tags html e php
    $seg = addslashes($seg); //adiciona barras invertidas a uma string
    return $seg;
    }
if(isset($_GET['add'])){
	$id_produto=$_GET['add'];
	$id_produto=antiSQL($id_produto);
	$id_produto=(int)$id_produto;
	$VER=(mysql_query("SELECT `integrantes`.`id` FROM `integrantes` WHERE id=".$id_produto));
	$conta=mysql_num_rows($VER);
	if($conta==1)
	{	
$_SESSION['produtos_'.$_GET['add']] += '1';//(isset($_SESSION['produtos_'.$_GET['add']])) ? $_SESSION['produtos_'.$_GET['add']] + 1 : 1;
header("Location:".$pagina);	
}else{
	echo "Produto não cadastrado";
}
}
//exclus�o de item
if(isset($_GET['del'])){
$_SESSION['produtos_'.$_GET['del']]= '0';//(isset($_SESSION['produtos_'.$_GET['del']])) ? $_SESSION['produtos_'.$_GET['del']] == 0 : 0;
header('Location:'.$pagina);	
}
//subtra��o de item
if(isset($_GET['menos'])){
$_SESSION['produtos_'.$_GET['menos']]--;//(isset($_SESSION['produtos_'.$_GET['del']])) ? $_SESSION['produtos_'.$_GET['del']] == 0 : 0;
header('Location:'.$pagina);	
}
 
?>
</body>
</html>

a parte que está entre as linhas 86 e 92 no código, é uma das inúmeras tentativas que fiz, onde eu consigo imprimir o id do anunciante, mas se tiverem sido selecionados 5 produtos desse anunciante, seu nome aparece cinco vzs.

certo da atenção dos amigos

no aguardo

OBS: no código eu apaguei os dados de conexão ao banco.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Boa noite cara, não entendi muito bem o seu codigo, mais tenta fazer o seguinte:

na linha 63:

	$AN = mysql_query("SELECT `anunciantes`.`id_anun`, `anunciantes`.`nome_anun` 
                           FROM `anunciantes` 
                           WHERE id_anun=".mysql_real_escape_string($list['id_anun'])."
                           GROUP BY `anunciantes`.`id_anun`");
Link para o comentário
Compartilhar em outros sites

  • 0

<script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script>

Boa noite cara, não entendi muito bem o seu codigo, mais tenta fazer o seguinte:

na linha 63:

	$AN = mysql_query("SELECT `anunciantes`.`id_anun`, `anunciantes`.`nome_anun` 
                           FROM `anunciantes` 
                           WHERE id_anun=".mysql_real_escape_string($list['id_anun'])."
                           GROUP BY `anunciantes`.`id_anun`");

fala Euler01!!! beleza?

cara fiz exatamente como você indicou e continuo na mesma, pois na realidade minha pesquisa está correta, faz exatamente o que eu quero, o problema é que eu , como descrevi no post, gostaria de exibir no final da lista de compras, o endereço de cada anunciante selecionado, independente de qtos produtos dele o consumidor escolheu seja apenas 01 produto ou 'n' produtos.

ficaria mais ou menos assim:

logo abaixo da lista eu VOU COLOCAR uma função em javascript (aquelas bem comuns para ocultar ou exibir uma div) onde vou colocar um checkbox constando: VOCÊ QUER IMPRIMIR O ENDEREÇO DOS ANUNCIANTES SELECIONADOS?

Caso o usuário marque o checkbox, vou mostrar os dados dos anunciantes que ele selecionou, juntamente com a frase:

VOCÊ SELECIONOU AS OFERTAS DE:

ANUNCIANTE X

ENDEREÇO:RUA TAL Nº TAL; FONE:(XX)XXXX-XXXX

_____________________________________________

ANUNCIANTE Y

ENDEREÇO:RUA QUALQUER Nº 01; FONE:(XX)XXXX-XXXX

acho que ficou mais claro agora.

no aguardo

abração

Link para o comentário
Compartilhar em outros sites

  • 0

<script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script>

<script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script>

Boa noite cara, não entendi muito bem o seu codigo, mais tenta fazer o seguinte:

na linha 63:

	$AN = mysql_query("SELECT `anunciantes`.`id_anun`, `anunciantes`.`nome_anun` 
                           FROM `anunciantes` 
                           WHERE id_anun=".mysql_real_escape_string($list['id_anun'])."
                           GROUP BY `anunciantes`.`id_anun`");

fala Euler01!!! beleza?

cara fiz exatamente como você indicou e continuo na mesma, pois na realidade minha pesquisa está correta, faz exatamente o que eu quero, o problema é que eu , como descrevi no post, gostaria de exibir no final da lista de compras, o endereço de cada anunciante selecionado, independente de qtos produtos dele o consumidor escolheu seja apenas 01 produto ou 'n' produtos.

ficaria mais ou menos assim:

logo abaixo da lista eu VOU COLOCAR uma função em javascript (aquelas bem comuns para ocultar ou exibir uma div) onde vou colocar um checkbox constando: VOCÊ QUER IMPRIMIR O ENDEREÇO DOS ANUNCIANTES SELECIONADOS?

Caso o usuário marque o checkbox, vou mostrar os dados dos anunciantes que ele selecionou, juntamente com a frase:

VOCÊ SELECIONOU AS OFERTAS DE:

ANUNCIANTE X

ENDEREÇO:RUA TAL Nº TAL; FONE:(XX)XXXX-XXXX

_____________________________________________

ANUNCIANTE Y

ENDEREÇO:RUA QUALQUER Nº 01; FONE:(XX)XXXX-XXXX

eu até consigo imprimir os nome do anunciante, porém se forem selecionadas 5 ofertas dele, seu nome aparece 5 vzs e eu gostaria que aparecesse somente uma vez. antes que você, como eu, queime mais uns neurônios, já tentei usar o DISTINCT no sql e não adiantou ou eu não soube usar de forma correta

acho que ficou mais claro agora.

no aguardo

abração

Link para o comentário
Compartilhar em outros sites

  • 0

Cara tenta fazer o seguinte na linha 61 adicione isso:

$idProdutos .= $id.",";

Depois da linha 120 (dentro do else) você coloca isso.

// RETIRA ULTIMA VIRGULA DA VARIAVEL
$idProdutos = substr($idProdutos, 0,-1);

$sql = "SELECT anunciantes.id_anun, anunciantes.nome_anun FROM anunciantes
    INNER JOIN integrantes ON integrantes.id_anun = anunciantes.id_anun
WHERE integrantes.id IN(".$idProdutos.")
GROUP BY anunciantes.id_anun
ORDER BY anunciantes.nome_anun";

Não sei se entendi muito bem a logica da sua $_SESSION e do seu banco de dados, mais acho que vai trazer os anunciantes uma única vez.

Tenta ai qualquer coisa me fala.

Link para o comentário
Compartilhar em outros sites

  • 0

<script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script>

Cara tenta fazer o seguinte na linha 61 adicione isso:

$idProdutos .= $id.",";

Depois da linha 120 (dentro do else) você coloca isso.

// RETIRA ULTIMA VIRGULA DA VARIAVEL
$idProdutos = substr($idProdutos, 0,-1);

$sql = "SELECT anunciantes.id_anun, anunciantes.nome_anun FROM anunciantes
    INNER JOIN integrantes ON integrantes.id_anun = anunciantes.id_anun
WHERE integrantes.id IN(".$idProdutos.")
GROUP BY anunciantes.id_anun
ORDER BY anunciantes.nome_anun";

Não sei se entendi muito bem a logica da sua $_SESSION e do seu banco de dados, mais acho que vai trazer os anunciantes uma única vez.

Tenta ai qualquer coisa me fala.

cara tentei como você me orientou e ainda não deu certo (ôh burrice abagualada tchê)

vou fazer assim

vou te passar a sequencia de scripts pra que você veja o funcionamento

esse abaixo é o exibe.php

<?PHP
require("db.php");
	if ($_GET['p']==NULL)
	{   
	header("Location:index.php");
	}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8"/>
<title>Ofertas</title>
<script>
function zebra(id, classe) {
var tabela = document.getElementById(id);
var linhas = tabela.getElementsByTagName("tr");
	for (var i = 0; i < linhas.length; i++) { 
	((i%2) == 0) ? linhas[i].className = classe : void(0);
	}
}
</script>
<link href="css/style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
   function DoPrinting(){
      if (!window.print){
         alert("Use o Netscape  ou Internet Explorer \n nas versões 4.0 ou superior!")
         return
      }
      window.print()
   }
 
</script>
</head>
<style>
* { font-family:Arial, Helvetica, sans-serif; font-size:24px; }
h1 { font-size:36px; color:#e63c1e; }
th, td { padding:2px; border-bottom:1px solid #ddd; text-align:left; font-family:Arial, Helvetica, sans-serif; font-size:18px;}
th { background:#e63c1e; font-weight:bold; color:#fff; }
tr.zb td { background:#eee; }
.link{font-size:12px; width:25%; padding:4px;}
.preço{width:14%; margin-top:auto; padding:4px; background-image:url(images/preço.png); width:100px; height:20px; color:#FFF;}
.produto{color:#666; font-style:italic; padding:4px;}
</style>
<body>
<div id="wrapper">
<?php
	require("db.php");
	if (isset($_GET['p']))
	{   
	$id=(int)$_GET['p'];
	}
	//$looph=3;
	$res = mysql_query("SELECT * FROM anunciantes WHERE `id_anun` = $id");
	$i=1;
	while ($linha = mysql_fetch_array($res)){
			echo '<td><img src="'.$linha['caminho_foto']. $linha['foto'].'" width="980" height="300"></td>
			
			';
	
	?>
<table width="500px" cellpadding="0" cellspacing="0" id="wrapper">
<tr><td colspan="3">
  <?php  
   echo $linha['nome_anun'];
	}
  ?>
  </td></tr>
 <tr>
    <?php
	
	if (isset($_GET['p']))
	{   
	$id=(int)$_GET['p'];
	}
	require("db.php");
	//$looph=2;
	$res = mysql_query("SELECT * FROM integrantes WHERE `id_anun` = $id ");
	$i=1;
	while ($list = mysql_fetch_array($res)){
		//if($i < $looph){
			echo '<td class="produto">'.$list['produto'].'</td>';
			//}elseif($i = $looph){
	echo '<td class="preço"><b>R$ '.number_format($list['valor'],2,',','.').'
	
	</b></td>';
	echo '<td class="link"><a href="processa.php?add='.$list['id'].'">    <img src="images/icon1.png" width="25" height="20" alt="Adicionar a lista de compras" title="Adicionar a lista de compras" /><br />Adicionar à lista de Compras</a>
	
	</td>
	</tr>
	<tr>
	';
	$i = 0;
	
			}
		$i++;
		//}
		
	?>
    
    

  </tr>
  <tr><td colspan="3">
  <?php
	$data = mysql_query("SELECT * FROM limite_oferta WHERE `id_anun` = $id ");
	
	$list = mysql_fetch_array($data);
	
	?>
<?php echo "<p style='color:#000000; font-size:12px; text-align:center;'> Ofertas válidas até &nbsp;<b><u>$list[data]</u></b>&nbsp;  ou enquanto durarem os estoques.</p>"; ?>
<?php echo "<a href='javascript:history.go(-1)'>Voltar</a>"; ?>
  </td></tr>
  
</table>
<div id="footer">
		
	</div>
<script>zebra('minhatabela','zb');</script>
</div>

</body>
</html>

você vai observar que eu passo os dados via GET para o arquivo processa.php passando o ID do produto.

o processa php é esse abaixo:

<?php
session_start();
//session_destroy();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sem t&iacute;tulo</title>
<style rel="stylesheet" type="text/css" media="print">
#botao {
	display: none
}
</style>
<style>
.total{font:Arial, Helvetica, sans-serif;
		font-size:18px;
		font-weight:bold;}
.total2{font:Arial, Helvetica, sans-serif;
		font-weight:bold;
		font-style:italic;
		}
.lista{
	padding:4px;
	
}
</style>
</head>

<body>
<?php
//instanciar a página do carrinho
$pagina = 'carrinho.php';

//inicio da class
	
		
function conexao(){
	//conexão com banco de dados
 	mysql_connect($this->hostname, $this->login, $this->senha) or die("Não foi possível validar os dados".mysql_error());
	mysql_select_db($this->banco) or die("Não foi possível conectar ao banco".mysql_error());
	
	mysql_query("SET NAME 'utf-8'");
	mysql_query("SET character_set_connection='utf-8'");
	mysql_query("SET character_set_clien='utf-8'");
	mysql_query("SET character_set_results='utf-8'");	

}


//mostrar carrinho de compra
function carrinho (){
	$soma=0;
	//verificar session
	if($_SESSION){
		foreach($_SESSION as $nome=>$quantidade){
			if ($quantidade>0){
			if(substr($nome,0,9) == 'produtos_'){
				// pegar id da session
				$id = substr($nome,9,(strlen($nome) -9));
				$PD = mysql_query("SELECT id,id_anun, produto, valor FROM integrantes WHERE id=".mysql_real_escape_string((int)$id));				
				while($list = mysql_fetch_array($PD)){
					$AN = mysql_query("SELECT `anunciantes`.`id_anun`, `anunciantes`.`nome_anun` FROM `anunciantes` WHERE id_anun=".mysql_real_escape_string($list['id_anun'])." GROUP BY `anunciantes`.`id_anun`");
					$anun = mysql_fetch_assoc($AN);	
					$subtotal = $quantidade * $list['valor'];
									
										
				echo '
					
  <tr>
  
   <td class="lista total2">'.$anun['nome_anun'].'</td>
    <td class="lista total2">'.$list['produto'].'</td>
	<td class="lista total2">'.$quantidade.' X</td>
    <td class="lista total2">R$ '.number_format($list['valor'],2,',','.').'</td>
	<td class="lista total2"><a href="processa.php?add='.((int)$id).'"><img src="images/add.png" ="Aumentar Quantidade" width="20" height="20"></a></td>
	<td class="lista"><a href="processa.php?menos='.((int)$id).'"><img src="images/menos.png" ="Diminuir Quantidade" width="20" height="20"></a></td>
	<td class="lista"><a href="processa.php?del='.((int)$id).'"><img src="images/remove.png" ="Excluir item" width="20" height="20"></a></td>
	<td class="lista" class="total">R$ '.number_format($subtotal,2,',','.').'</td>
	<tr>
  

  </tr>
	
    
	</tr>';
				
				
					
	   }
	  }
  	  $soma += $subtotal;
	  }
	} 
	if($soma == 0){
		echo '<td colspan="8" class="total">Sua lista de compras está vazia!	</td>';
	}else{
		echo '<tr>
  <tr>
  
  <td colspan="6"class="total">TOTAL </td>
 
  <td colspan="2" class="total" align="right"> R$: '.number_format($soma,2,',','.').'</td>

  </tr>
  <tr>
  <td colspan="8"class="total">

  
  </td>
  </tr>
  ';
   
	}

}
}















//fim class
}

$conecta = new shopping();
$conecta->conexao();
function antiSQL($sql)
    {
    $seg = preg_replace("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/","",$sql); //remove palavras que          contenham a sintaxe sql
    $seg = trim($seg); //limpa espaços vazios
    $seg = strip_tags($seg); // tira tags html e php
    $seg = addslashes($seg); //adiciona barras invertidas a uma string
    return $seg;
    }
if(isset($_GET['add'])){
	$id_produto=$_GET['add'];
	$id_produto=antiSQL($id_produto);
	$id_produto=(int)$id_produto;
	$VER=(mysql_query("SELECT `integrantes`.`id` FROM `integrantes` WHERE id=".$id_produto));
	$conta=mysql_num_rows($VER);
	if($conta==1)
	{	
$_SESSION['produtos_'.$_GET['add']] += '1';//(isset($_SESSION['produtos_'.$_GET['add']])) ? $_SESSION['produtos_'.$_GET['add']] + 1 : 1;
header("Location:".$pagina);	
}else{
	echo "Produto não cadastrado";
}
}
//exclusão de item
if(isset($_GET['del'])){
$_SESSION['produtos_'.$_GET['del']]= '0';//(isset($_SESSION['produtos_'.$_GET['del']])) ? $_SESSION['produtos_'.$_GET['del']] == 0 : 0;
header('Location:'.$pagina);	
}
//subtração de item
if(isset($_GET['menos'])){
$_SESSION['produtos_'.$_GET['menos']]--;//(isset($_SESSION['produtos_'.$_GET['del']])) ? $_SESSION['produtos_'.$_GET['del']] == 0 : 0;
header('Location:'.$pagina);	
}

?>
</body>
</html>

funciona da seguinte forma:

na tela do arquivo exibe.php eu mostro as ofertas de um determinado anunciante

cada produto anunciado tem um link que manda seu respectivo id para o arquivo processa.php via query string

o arquivo processa, monta a lista mostrando anunciante, produto, valor unitário, quantidade, subtotal e total, porém pode-se acrescentar ofertas de ' N ' anunciantes, conforme a necessidade do usuário.

eu quero colocar. ao final da lista, a possibilidade do usuário escolher se quer ou não exibir e imprimir junto com sua lista de ofertas selecionadas, o endereço dos anunciantes cujas ofertas ele selecionou.

desde já agradeço a boa vontade do amigo, mas programação é assim mesmo, os que sabem menos aprendem com os que sabem mais e depois passam o conhecimento adiante

Editado por jlmsbage
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...