Ir para conteúdo

POWERED BY:

Arquivado

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

Furian

[Resolvido] Comparação entre tabelas.

Recommended Posts

Boa tarde galera!!

 

Observem o seguinte código:

<?php
$ca = mysql_query("SELECT CARRINHO.COD_PRODUTO,CARRINHO.QUANT,CARRINHO.OPCAO,OPCOES.PRODUTOS_COD_PRODUTO,OPCOES.OPCAO,OPCOES.QUANTIDADE FROM CARRINHO,OPCOES WHERE SESSAO='$sessao' AND CARRINHO.COD_PRODUTO=OPCOES.PRODUTOS_COD_PRODUTO");
while ($res = mysql_fetch_array($ca)) {
 $car = $res['QUANT'];
 $opc = $res['QUANTIDADE'];
 if ($car > $opc) {
print "<div align='center'><font color='#ff0000'><b>AVISO</b>
Não existe quantidade disponível em estoque para o produto solicitado!</div>";
break;
 }
 else {
include_once("finaliza.php");
 }
}
?>

 

Ele faz uma consulta no banco de dados e me retorna valores do mesmo, o que eu quero é que quando a condição não seja aceita a página "finaliza.php" seja incluída, porém ela está sendo incluída se este select possui mais de um resultado, a mensagem é exibida e abaixo é incluída a página "finaliza.php", no caso de ser retornado apenas um valor neste select ele exibe a mensagem e não inclui a página, gostaria que independente da quantidade de resultados do select, se a condição fosse aceita não incluísse a página.

 

Alguém poderia me ajudar a resolver esse problema.

Desde já agradeço pela atenção dedicada, grande abraço, até...

Compartilhar este post


Link para o post
Compartilhar em outros sites

gostaria que independente da quantidade de resultados do select, se a condição fosse aceita não incluísse a página.

Como assim? Você quer que inclua ou não a página? E em que condição?

 

Um mysql_num_rows($ca) resolveria?

 

http://www.php.net/manual/pt_BR/function.mysql-num-rows.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo o erro esta na lógica utilizada.

 

Você colocou o if dentro de um while.

 

De uma olha em como funciona o loop while na documentação do PHP (Link Abaixo)

www.php.net/while

 

Se o seu SELECT trouxer 3 registros e a condição if só for atendida após o 3 loop a sua pagina será incluida 2x pois a condição não foi antendida nos outros 2 registros expostos pelo laço.

 

Você pode apagar este if e criar um array com 2 valores por exemplo: 0 e 1.

Se a condição for atendida ele adiciona 1 ao array, se não ele adiciona o 0;

 

Depois, fora do loop While, você verifica se dentro do array existe o valor 1.

 

Se existir você não faz o include, caso contrário você faz o include.

É simples de se fazer, basta ajustar a lógica

 

Espero ter ajudado http://forum.imasters.com.br/public/style_emoticons/default/natal_happy.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Do lance do while eu já sabia, e sabia também que minha lógica estava errada, por isso postei logo o código de cara pra ver se alguém me ajudava nisso... no caso o if não é pra ser apagado né? É só colocar a condição e dentro dela o array, né isso?

 

Valeu pela ajuda brother... Grande abraço, até...

 

Um mysql_num_rows($ca) resolveria?

 

Vlw meu camarada, mas acho que o mysql_num_rows não adiantaria não, o que eu preciso é comparar os valores dos arrays que vem como resultado da consulta...

 

Grande abraço, até...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso ai amigo, ao invés de você apagar o if usa ele para incrementar o array

 

e fora do loop você faz o if como te expliquei.

 

 

Espero ter ajudado http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... não sei se agora estou fazendo alguma besteira... estou tentando fazer o que o Periscuelo disse, mas não estou conseguindo resultados positivos, ou a mensagem é exibida constantemente e o valor retornado é sempre 1 para o array ou então a inclusão da página não é efetuada... simplesmente não exibe nada...

 

Vou postar aqui como ficou o código, quem puder ajudar eu agradeço desde já...

 

<?php
$ca = mysql_query("SELECT CARRINHO.COD_PRODUTO,CARRINHO.QUANT,CARRINHO.OPCAO,OPCOES.PRODUTOS_COD_PRODUTO,OPCOES.OPCAO,OPCOES.QUANTIDADE FROM CARRINHO,OPCOES WHERE SESSAO='$sessao' AND CARRINHO.COD_PRODUTO=OPCOES.PRODUTOS_COD_PRODUTO");
 $top = array();
while ($res = mysql_fetch_array($ca)) {
 $car = $res['QUANT'];
 $opc = $res['QUANTIDADE'];
 if ($car > $opc) {
	$top[] = 0;
 }
 else {
	$top[] = 1;
 }
}
 if ($top < 1) {
	print "

<div align='center'><font color='#ff0000'><b>AVISO</b>
Não existe quantidade disponível em estoque para o produto solicitado!</div>";
	print_r($top);
 }
 else {
	include_once("finaliza.php");
 }
?>

Grande abraço a todos, até...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para $top < 1 estar correto teria de ser count($top)<1 e ai você estaria perguntando

se o array topo esta vazio ou seja possui 0 elementos.

 

Mas vamos ao código correto:

 

<?php

$ca = mysql_query("SELECT CARRINHO.COD_PRODUTO,CARRINHO.QUANT,CARRINHO.OPCAO,OPCOES.PRODUTOS_COD_PRODUTO,OPCOES.OPCAO,OPCOES.QUANTIDADE FROM CARRINHO,OPCOES WHERE SESSAO='$sessao' AND CARRINHO.COD_PRODUTO=OPCOES.PRODUTOS_COD_PRODUTO");
 $top = array();
while ($res = mysql_fetch_array($ca)) {
 $car = $res['QUANT'];
 $opc = $res['QUANTIDADE'];
/* código correto */
 if ($car > $opc) {
        $top[] = 1;
 }
 else {
        $top[] = 0;
 }
}
/* código correto 2 */
 if (in_array(1,$top)) {
	print "

<div align='center'><font color='#ff0000'><b>AVISO</b>
Não existe quantidade disponível em estoque para o produto solicitado!</div>";
	print_r($top);
 }
 else {
	include_once("finaliza.php");
 }
?>

Com o código acima, como te falei, caso a condição seja atendida você incrementa 1 ao array e não o 0.

Depois você verifica se existe o valor 1 dentro do array.

 

Espero ter ajudado http://forum.imasters.com.br/public/style_emoticons/default/natal_happy.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Periscuelo... primeiramente agradeço por toda a atenção dedicada, mas ainda assim está ocorrendo o mesmo que antes, no caso do primeiro item ser modificado e exceder a quantidade presente no estoque é exibida a mensagem, mas com mais de um item ele não está exibindo a mensagem de erro, e agora a página "finaliza.php" não está sendo incluída em nenhuma hipótese...

 

Vou postar aqui como está o código:

 

<?php
$ca = mysql_query("SELECT CARRINHO.COD_PRODUTO,CARRINHO.QUANT,CARRINHO.OPCAO,OPCOES.PRODUTOS_COD_PRODUTO,OPCOES.OPCAO,OPCOES.QUANTIDADE FROM CARRINHO,OPCOES WHERE SESSAO='$sessao' AND CARRINHO.COD_PRODUTO=OPCOES.PRODUTOS_COD_PRODUTO");
 $top = array();
while ($res = mysql_fetch_array($ca)) {
 $car = $res['QUANT'];
 $opc = $res['QUANTIDADE'];
 unset($top);
 if ($car > $opc) {
	$top[] = 1;
 }
 else {
	$top[] = 0;
 }
}
 if (in_array(1,$top)) {
	print "<br><br><div align='center'><font color='#ff0000'><b>AVISO</b><br>Não existe quantidade disponível em estoque para o produto solicitado!</font></div>";
	print_r($top);
 }
 else {
	print_r($top);
	include_once("finaliza.php");
 }
?>

Grande abraço até...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom resolvi em parte o problema do código...

 

retirei o unset($top); do código e agora ele está adicionando 0 ou 1 no array de forma correta e exibindo a mensagem quando tem que exibir... porém ainda estou com um problema, a página "finaliza.php" ainda não está sendo inclusa quando o valor do array é diferente de 1, ou seja 0... alguém saberia dizer o que pode estar acontecendo?

 

Grande abraço, até...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O array tem de estar apenas com o valor 0.

não pode existir nenhum valor 1 no mesmo.

Já verificou se ele esta passando pelo else?

Se estiver entrando na condição do include faça testes no mesmo.

 

Adicione no começo do script as linhas

ini_set("display_errors",1);
error_reporting(E_ALL);

E veja quais erros ele exibe.

Tente debugar para ver oq ocorre.

De um die("passei aqui"); no começo do finaliza.php

pra ver se aparece e por ai vai.

 

 

Espero ter ajudado http://forum.imasters.com.br/public/style_emoticons/default/natal_smile.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw Periscuelo... vou tentar... estou achando que o erro está mesmo na página finaliza.php, apesar de eu não ter editado ela e ela aparecer antes, alguma coisa deve estar errado nela, utilizei o print_r para verificar o número recebido pelo array, e ao que tudo indica está tudo certo quanto a isso, meu único problema agora é que a finaliza.php não está aparecendo quando entra no else...

 

Grande abraço, vlw pela força, até...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw Periscuelo... problema resolvido... tava faltando o $ em um array no finaliza.php... rsrsrs

 

Brigadão pela força brother...

 

Grande abraço, até...

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.