Jump to content
betomunhoz

uma cláusula if não está dando certo

Recommended Posts

bom estou fazendo um codigo simples de um app de consulta de preço tipo de mercado, porém não estou conseguindo fazer o if para quando não encontrar o código de barras no banco de dados apresentar a mensagem de código não encontrado, ele está apresentando a mensagem em qualquer codigo que passo... abaixo esta o código:

<div align="center" style="color:#0000FF">
<?php
    $servidor = "localhost";
    $usuario = "root";
    $senha = "senha1";
    $dbname = "teste";
    //Criar a conexao
    $conn = mysqli_connect($servidor, $usuario, $senha, $dbname);
    
    $pesquisar = $_POST['pesquisar'];
    $result_produtos = "select * from cadpro inner join arqbar where cadpro.codpro01=arqbar.codpro and arqbar.codbarra='$pesquisar'";
    $resultado_produtos = mysqli_query($conn, $result_produtos);
    
    if($result_produtos = 0) {
        while($rows_produtos = mysqli_fetch_array($resultado_produtos)){
        echo '<font size="20" style="color:#000000"'.">";
        echo "".$rows_produtos['descpro01']."<br>";
        echo '<font size="20" style="color:#FF0000"'.">";
        echo 'R$  ' . number_format($rows_produtos['prevend01'], 2, ',', '.');
    }
        } 
    else {
        echo '<font size="20" style="color:#FF0000"'.">";
        echo "PRODUTO NÃO LOCALIZADO!";
    }
        
?>
</div>

    <script>
    window.setTimeout("history.back(-2)", 3000);
    </script>   

 

Edited by Matheus Tavares
Adicionar marcação para código

Share this post


Link to post
Share on other sites

Olá @betomunhoz, seja bem-vindo.

if($result_produtos = 0) {

Essa linha está completamente incorreta.

 

1 - Você está atribuindo 0 à variável, e não fazendo uma verificação/validação/comparação. Você deveria estar utilizando "==" ou "===".

 

2 - $result_produtos contém apenas a consulta em String (texto puro). Você precisa trabalhar em cima do mysqli_query, que está em $resultado_produtos.

 

Para verificar se não foram encontrados registros, você deveria fazer assim:

// "> 0" é opcional, mas fica mais fácil de entender...
if ( mysqli_num_rows( $resultado_produtos ) > 0 ) {

Veja o exemplo do manual: http://php.net/manual/pt_BR/mysqli.query.php

  • +1 1

Share this post


Link to post
Share on other sites

Blz?

 

Outra solução:

if($resultado_produtos) { .... echo "produto encontrado"; } else { .... echo "nenhum produto encontrado"; }

Se não tiver nenhum retorno, o próprio IF identificará que a string está vazia, pois não retornou nenhum resultado, ou pelo contrário é verdadeira.

 

Abraços.

Share this post


Link to post
Share on other sites
48 minutos atrás, leomarriel disse:

Se não tiver nenhum retorno, o próprio IF identificará que a string está vazia, pois não retornou nenhum resultado, ou pelo contrário é verdadeira.

Na verdade, não.

 

O retorno do mysqli_query é:

Citar

Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.

 

Isso significa que verificar somente se ela possui um valor pseudo-verdadeiro apenas iria dizer se a consulta está correta.

 

Resumindo, se a consulta fosse absurda como:

SELECT * FROM `tabela` WHERE `id` = 1 AND `id` != 1

Ainda assim o if iria permitir o prosseguimento da execução.

 

O ideal mesmo seria verificar ambos: se mysqli_query não é FALSE e a quantidade de registros de num_rows é maior que zero.

Mas se confiarmos que a consulta está correta, num_rows é suficiente...

Share this post


Link to post
Share on other sites
17 minutos atrás, Matheus Tavares disse:

Na verdade, não.

 

O retorno do mysqli_query é:

 

Isso significa que verificar somente se ela possui um valor pseudo-verdadeiro apenas iria dizer se a consulta está correta.

 

Resumindo, se a consulta fosse absurda como:


SELECT * FROM `tabela` WHERE `id` = 1 AND `id` != 1

Ainda assim o if iria permitir o prosseguimento da execução.

 

O ideal mesmo seria verificar ambos: se mysqli_query não é FALSE e a quantidade de registros de num_rows é maior que zero.

Mas se confiarmos que a consulta está correta, num_rows é suficiente...

Show...

 

Utilizo da forma que apresentei e me atende perfeitamente, utilizo codeigniter portanto ele informaria se a consulta apresentasse algum erro. Vai do contexto da aplicação e da necessidade. Na realidade que ele apresentou, funcionaria, mas poderia ocorrer um erro na consulta e não retornaria valor algum, então ele não identificaria se foi um erro na consulta ou se o produto realmente não existe.

 

Seguindo uma aplicação para extrair mais condições, antecipando algum problema futuro, o correto seria:

 

 if ($resultado_produtos)
  {
   if(mysqli_num_rows( $resultado_produtos ) > 0) { echo "Produto encontrado"; }
  else { echo "Produto não encontrado"; }
  }
else
    { echo "Erro na consulta."; }

Dessa forma se houver algum erro, teria como identificar em que etapa o mesmo ocorreu e retornar uma mensagem mais exata.

 

Abraços.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Charlie04
      Tenho um formulário
       
                 <form role="form" name="senha" class="ls-login-form" action="#">
                  <fieldset>
       
                    <label class="ls-label col-md-16">
                      <b class="ls-label-text">CPF:</b>
                      <input type="text" name="cpf" id="cpf" class="ls-mask-cpf" placeholder="000.000.000-00" required>
                      <span id="errocpf" class="ls-sm-space"></span>
                    </label>
       
                    <label class="ls-label col-md-16">
                      <b class="ls-label-text">E-mail:</b>
                      <input type="text" name="email" placeholder="Digite seu email" maxlength="60" size="65" required>
       
                    </label>
       
                    <br>
       
                    <input onclick="validacaoEmail(senha.email,senha.cpf)" id="botao" type="button" value="Redefinir"
                      class="ls-btn-primary ls-btn-block ls-btn-lg">
        
      --- e o JS ----
       
      function validacaoEmail(field, field2) {
          usuario = field.value.substring(0, field.value.indexOf("@"));
          dominio = field.value.substring(field.value.indexOf("@") + 1, field.value.length);
          var cpf = field2.value;
       
          if ((usuario.length >= 1) &&
            (dominio.length >= 3) &&
            (usuario.search("@") == -1) &&
            (dominio.search("@") == -1) &&
            (usuario.search(" ") == -1) &&
            (dominio.search(" ") == -1) &&
            (dominio.search(".") != -1) &&
            (dominio.indexOf(".") >= 1) &&
            (dominio.lastIndexOf(".") < dominio.length - 1)) {
       
            if (cpf.length < 11) {
              document.getElementById("alerta-email").innerHTML = "<strong>Vish!</strong> CPF inválido.";
             
            }
          } else {
            if (cpf.length < 11) {
              document.getElementById("alerta-email").innerHTML = "<strong>Vish!</strong> E-mail e CPF inválidos";
             
            } else {
              document.getElementById("alerta-email").innerHTML = "<strong>Vish!</strong> E-mail inválido. Os endereços de e-mail devem seguir o padrão xx@xx.xx. ";
             
            }
          }
        }
       
        $(document).ready(function () {
            var $seuCampoCpf = $("#cpf");
            $seuCampoCpf.mask('000.000.000-00', {reverse: true});
        });
       
      Quero testar com onclick e depois enviar para o PHP adicionar no banco.
      Mas ele não chama a pagina.
       
      Com TYPE = Button ele funciona o testa da máscara e não redireciona.
      Com type = submit ele não funciona a mascara e redireciona.

      Provavelmente é algo bem simples , mas estou com uma bela duvida de como resolver.
       
      att
       
    • By TeixeiraRamos
      Prezados,
      Digitando no DW.
      No final do código coloquei o script abaixo e funcionou normalmente. Só que achei que poderia criar um js e criei o audio.js. Indiquei no final da página <script src="js/audio.js"></script>. Deletei todas as linhas da function da página fincando apenas com o audio.js 
      Ocorre que na página audio.js, vem mostrando os números das linhas em vermelho e encostando o mouse mostra: "ERROR:Mixed spaces and tabs. [no-mixed-spaces-and-tabs]".
      Nunca nunca me deparei com esse erro e gostaria de aprender a resolver.
      Encontrei na internet algo que fala em espaço, mas não entendi.
      // JavaScript Document $(function(){ $("#audio1").on('play', function(){ var pe = $("#audio2").get(0); if(pe.paused == false) pe.pause(); }); $("#audio1").on('play', function(){ var pe = $("#audio3").get(0); if(pe.paused == false) pe.pause(); }); $("#audio1").on('play', function(){ var pe = $("#audio4").get(0); if(pe.paused == false) pe.pause(); }); $("#audio1").on('play', function(){ var pe = $("#audio5").get(0); if(pe.paused == false) pe.pause(); }); $("#audio1").on('play', function(){ var pe = $("#audio6").get(0); if(pe.paused == false) pe.pause(); }); $("#audio1").on('play', function(){ var pe = $("#audio7").get(0); if(pe.paused == false) pe.pause(); }); $("#audio1").on('play', function(){ var pe = $("#audio8").get(0); if(pe.paused == false) pe.pause(); }); $("#audio1").on('play', function(){ var pe = $("#audio9").get(0); if(pe.paused == false) pe.pause(); }); $("#audio1").on('play', function(){ var pe = $("#audio10").get(0); if(pe.paused == false) pe.pause(); }); $("#audio1").on('play', function(){ var pe = $("#audio11").get(0); if(pe.paused == false) pe.pause(); }); $("#audio1").on('play', function(){ var pe = $("#audio12").get(0); if(pe.paused == false) pe.pause(); }); $("#audio1").on('play', function(){ var pe = $("#audio13").get(0); if(pe.paused == false) pe.pause(); }); //*** Fim audio 1 ***// //*** Audio 2 ***// $("#audio2").on('play', function(){ var pe = $("#audio1").get(0); if(pe.paused == false) pe.pause(); }); $("#audio2").on('play', function(){ var pe = $("#audio3").get(0); if(pe.paused == false) pe.pause(); }); $("#audio2").on('play', function(){ var pe = $("#audio4").get(0); if(pe.paused == false) pe.pause(); }); $("#audio2").on('play', function(){ var pe = $("#audio5").get(0); if(pe.paused == false) pe.pause(); }); Obrigado a todos
       
       
       
       
    • By ricardosites
      Warning: pg_query() [function.pg-query]: Query failed: ERRO: sintaxe de entrada é inválida para tipo time: "" LINE 13: usu_hr_entrada = '',^ in /var/ftp/pontodigital/usuario/condicao_add.php on line 49
       
       
      Estou com esse erro aqui no sistema de ponto e não sei como resolver, não manjo muito mais tenho acesso ao banco de dados, alguém pode me ajudar a resolver? Grato
       

    • By Jeovane Carvalho
      Olá pessoal, estou precisando de um help !
       
      Pois eu tenho uma classe assim:
       
      DadosComboClasse.php
       
      class DadosComboCidades { private $conecta_banco; public function __construct(){ $this->conecta_banco= new Conexao(); $this->conecta_banco->Conectar(); } public $array = array(); public $imoveis_tipo; public $cidade; public $bairro; public $bairro_id2; public $idcidade; public $negocios; public $qtd; public $bairro_id; public $id_cidade; public $id_tipo; public $id_bairro; public $nome_empresa_2; public $nome_empresa_3; public $nome_empresa_4; public $nome_empresa_5; public $titulo_cadastro; public $creci; public $facebook; public $twitter; public $linha_b; public $sloga; public $site; public $sqlT_1; public $sqlT_2; public $sqlT_3; public $sqlT_4; public $row; public $id='1'; function BuscarCidades(){ $result=$this->conecta_banco->banco; $pega_cidade=new ComboCidades();=> instancio os ids ou arrays quando são requisitados tipo assim : finalidade ID:1 Tipo ID:3,9 (array) $pega_cidade->PegarCidadeId(); $ativo='1'; ARRAYS ABAIXO: $this->id_negocio=$pega_cidade->id_negocio; $this->id_tipo=$this->id_cidade=$pega_cidade->id_tipo; $this->id_cidade=$pega_cidade->id_cidade; Acima eu pego os dados do array vindo da pagina combo_cidades.php if($pega_cidade->id_negocio): $negocio_array = explode(",",$pega_cidade->id_negocio); if($pega_cidade->id_tipo): $tipos_array = explode(",", $pega_cidade->id_tipo); if($pega_cidade->id_cidade): $cidades_array = explode(",", $pega_cidade->id_cidade); foreach($negocio_array as $negocio): foreach($tipos_array as $tipos): foreach($cidades_array as $cidades): $sqlT_1 = $result->prepare("SELECT i.id,t.tipo_nome,c.cidade,b.bairro,i.ativo FROM imoveis i LEFT JOIN imoveis_tipo t ON (t.id = i.id_tipo_imovel) LEFT JOIN cidades c ON (c.id = i.id_cidade)LEFT JOIN bairros b ON (b.id = i.bairro) WHERE i.id_tipo_imovel IN ('".$tipos."') AND i.id_cidade IN ('".$cidades."') AND i.ativo=? ORDER BY i.bairro DESC"); $sqlT_1->bind_param('s',$ativo); $sqlT_1->execute(); $this->sqlT_1=$sqlT_1->get_result(); Acima com get_result eu gero os dados que preciso do array abaixo são outras chamadas do sql que vou implementar na solução acima $sqlT_2=$result->prepare("SELECT id, bairro,ativo FROM bairros WHERE id AND ativo=? ORDER BY bairro"); $sqlT_2->bind_param('s',$ativo); $sqlT_2->execute(); $this->sqlT_2=$sqlT_2->get_result(); "'%".$negocio."%'"; $where = " i.ativo =? "; if( $negocio) { $where .="AND i.id_negocio_tipo LIKE ?"; }if( $tipos ) { $where .=" AND i.id_tipo_imovel IN ('".$tipos."')"; } if( $cidades ) { $where .=" AND i.id_cidade IN ('".$cidades."')"; } if($this->bairro_id2) { $where .=" AND i.bairro IN ('".$this->bairro_id2."')"; } $sqlT_3 = $result->prepare("SELECT i.id,i.ativo,n.tipo,b.bairro,t.tipo_nome,c.cidade,i.id_negocio_tipo, COUNT(b.bairro) AS Qtd FROM imoveis i LEFT JOIN negocio_tipo n ON (n.id= i.id_negocio_tipo) LEFT JOIN imoveis_tipo t ON (t.id = i.id_tipo_imovel) LEFT JOIN cidades c ON (c.id = i.id_cidade) LEFT JOIN bairros b ON (b.id = i.bairro) WHERE ".$where." GROUP BY b.bairro HAVING COUNT( b.bairro) > 0 ORDER BY b.bairro "); //EXECUTA A QUERY $conta=$sqlT_3->num_rows(); $sqlT_3->bind_param('ss',$ativo,$negocio); $sqlT_3->execute(); $this->sqlT_3=$sqlT_3->get_result(); endforeach; endforeach; endforeach; endif; endif; endif; } }  
       
      Abaixo a classe combocidades.php
       
      require_once("tags2.php"); //RECEBE PARÃMETRO class ComboCidades{ private $conecta_banco; public function __construct(){ $this->conecta_banco= new Conexao(); $this->conecta_banco->Conectar(); } public $id_negocio; public $id_tipo; public $busca_cidade; public $id_cidade; public function PegarCidadeId(){ function filter( $str ){ return addslashes( $str ); } function getPost( $key ){ return isset( $_GET[ $key ] ) ? filter( $_GET[ $key ] ) : null; } $this->id_negocio = getPost('id_negocio'); $this->id_tipo = getPost('id_tipo'); $this->id_cidade=getPost('id_cidade'); } } class ExibirBairros extends DadosComboCidades{ public function Mostrar(){ extract( $_GET, EXTR_OVERWRITE); $busca_bairro=new DadosComboCidades(); $busca_bairro->BuscarCidades(); $busca_bairro->id_cidade; if($busca_bairro->id_cidade==0): echo "<div class='atencao'></div><div class='atencao_text'>Selecione uma Cidade para pesquisar por Bairros !</div> "."<br />"; endif; echo "<div class='sel'></div>"."<br />"; /* MONTA CRITERIOS DE BUSCA */ //QUERY echo '<br /><div class="botao-modal"><button type="button" class="botao_marcar" title="Todos" id="todos" onclick="marcardesmarcar();">Selecionar Todos</button> </div>'; Aqui onde chamo os array já convertidos pelo foreach na classe DadosComboCidades.php echo'<br /><br /><div style=" font-weight:bold; margin-left:30px;">'.$busca_bairro->imoveis_tipo.' (s) </div>'; echo'<br /><br /><div style=" font-weight:bold; margin-left:30px;">'.$busca_bairro->cidade.'</div>'; echo'<div class="form_modal"><form name="form1">'.'<br /><br />'; echo '<input type="checkbox" id="c'.$bairro.'" class="marcar" value="'.$bairro_id.'" name="bairro[]"/><label for="c'.$bairro_id.'"><span></span></label> '.$bairro.' - '.$cidade.' ('.$qtd.') <br />'; //FECHA IF (row) //PRINTA O RESULTADO if($bairro_id): echo FALSE; else: echo "<div class='atencao'></div><div class='atencao_text'>Não existem imóveis para essa Busca !</div> "."<br />"; echo'</form></div></b><br />'; endif; } } Abaixo onde istancio e chamo a classe DadosComboCidades $f=new ExibirBairros(); $f->Mostrar(); RESUMINDO:
       
      O que acontece é que eu não consigo pegar o array no seu índice, ou seja , por exemplo se o id tipo for ID: 1 rola beleza a busca  e a impressão dos dados mas se eu for buscar 2 informações no mesmo id tipo , assim => ID: array(5,9) , na outra página só consigo pegar o último id em vez de buscar 5,9 só busca o 9, por eu estar acessando o array de outra página , e pelo que entendi , acessando o array de outra página ele só percorre o último em vez do índice.
      Mas se eu jogar todo código dentro da classe ai roda beleza , mas não quero misturar objeto com html (isso é má prática na programação), por isso estou remodelando meu código em POO
      Se alguém tiver uma solução eu agradeço  .  :)
    • By Keber_Crato
      Boa noite galera!!  estou com dificuldades em conseguir o somatório de de dois campos de uma tabela e o somatório de um campo de outra tabela,
      segue assim:
      Tenho uma tabela chamada CID_TITULAR  e outra CID_COMPOSICAO. a tabela CID_TITULAR recebe os cadastro de um programa social e a tabela CID_COMPOSICAO o cadastros dos dependentes (filhos, parentes) TITULAR_COD = COMPOSICAO_COD_TITULAR (chave de ligação)
      tenho dois campos na CID_TITULAR de valores, são eles: TITULAR_RENDA e TITULAR_RENDA_MENSAL e na outra tabela CID_COMPOSICAO tenho um campo de valor COMPOSICAO_RENDA
      estão povoado assim:
       
      Na tabela CID_TITULAR nos campos TITULAR_RENDA (R$ 10.00) e TITULAR_RENDA_MENSAL (R$ 10.00) e na tabela CID_COMPOSICAO no campo COMPOSICAO_RENDA tenho 3 registros com os valores R$ 300.00, R$ 200.00 e R$ 100.00
      GOSTARIA QUE A SELEÇÃO FOSSE O VALOR DOS DOIS CAMPOS DA TABELA CID_TITULAR + O CAMPO DA OUTRA TABELA CID_COMPOSICAO
       
      NO CASO O SOMATÓRIO CORRETO SERIA R$ 620,00
      10,00 no campo TITULAR_RENDA
      10,00 no campo TITULAR_RENDA_MENSAL
      300,00 NO 1º REGISTRO no campo COMPOSICAO_RENDA
      200,00 NO 2º REGISTRO no campo COMPOSICAO_RENDA
      100,00 NO 3º REGISTRO no campo COMPOSICAO_RENDA
       
      TOTALIZANDO R$ 620,00
      O PROBLEMA É:
      Quando faço a seleção com inner join a resposta é R$ 660,00 e não 620,00. a seleção triplica o valor da primeira tabela devido ter três registros na tabela CID_COMPOSICAO
       
      TABELA CID_TITULAR
      CREATE TABLE `cid_titular` (
        `titular_cod` int(11) NOT NULL AUTO_INCREMENT,
        `titular_renda` float(10,2) DEFAULT NULL,
        `titular_renda_mensal` float(10,2) DEFAULT NULL,
        PRIMARY KEY (`titular_cod`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
       
      TABELA CID_COMPOSICAO
      CREATE TABLE `cid_composicao` (
        `composicao_cod` int(11) NOT NULL AUTO_INCREMENT,
        `composicao_cod_titular` int(11) DEFAULT NULL,
        `composicao_renda` float(10,2) DEFAULT NULL,
        PRIMARY KEY (`composicao_cod`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
       
       
      GOSTARIA MUITO DE AJUDA GALERA. OBRIGADO!!!!
       

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.