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 Anonicah
      Olá preciso de ajuda com esse exercício. Montei até a parte de formulário + validação de javascrip no dreamweaver mas buguei com o resto. O que eu fiz:
       

      <html>
      <head>
      <title> Formulário CPF validado com Java Script </title>
          
          <script language="javascript" type="text/javascript">
      function validar() {
      var cpf = form1.cpf.value;
          
      if (cpf == "") {
      alert('Preencha o campo com seu cpf');
      form1.cpf.focus();
      return false;
      }
          
      }
      </script>
          
          
      </head>
      <body>
      <form name="form1" action="enviar.php" method="post">
      CPF:
      <input name="cpf" type="text"><br /><br />
      <input type="submit"  onclick="return validar()">
      </form>
      </body>
      </html>
       
       
      EXERCÍCIO
      Criar um formulário simples em html com um único campo CPF;
      Fazer uma validação em javascript antes de fazer o post;
      Consumir o WS https://bi.vidaclass.com.br/utils para consultar informações do CPF enviado pelo form;
      Do retorno obtido exibir na tela:
      Nome, email, telefone
      Se tem compra em saude: Sim | Não
      Quantas compras: (5) ex.
      Se tem farma: Sim | Não
      Se tem dependente: Sim | Não
      Qtd. de dependentes: (2) ex.

      Obtem o token para consumir os endpoints;
      https://bi.vidaclass.com.br/auth
      {
          "company_id": 1,
          "username": "webmaster@vidaclass.com.br",
          "password": "Teste20170705"
      }
      Endpoint para consultar o CPF
      https://bi.vidaclass.com.br/utils
      {
          "action": 4,
          "key": {
              "cpf": 25383193820
          }
      }
    • By Luciano Marques
      Então pessoal é o seguinte: Estou tendo problemas para impedir acesso simultâneo no meu projeto. Foi depois de muito pesquisar que vim aqui abrir esse tópico. 
      Enfim, eu até consegui colocar uma teoria em prática que era a de criar uma coluna na tabela `usuarios` com 1 para ativo, e 2 para  inativo. e depois coloquei no topo a condição IF para se 1 já preenchido não permite o login. até ai de boa. o problema vem se o usuário não desloga só fecha a janela. a coluna ainda permanece como ativa 1. mesmo expirando o login, não ocorre o update na base de dados. Se alguém puder me ajudar nessa, preciso concluir esse trabalho ainda essa semana. desde já agradeço 
    • By paulojk
      Como faço essa funçao alguem sabe? Depos que o usuario clica no botao so libera depois de um determinado tempo.
       


    • By iagomonteiro
      Estou criando um jogo de cartas em web, o jogo é bem estilo HS, e estou tendo problemas para adicionar condições de movimentação no drag and drop. Como vocês podem ver eu tenho uma variável mana, e a movimentação das cartas só seria possível de acordo com ela, porém quando adiciono as condições o D&D acaba nem se movimentando mais, pensei em chamar cada função do d&d dentro de uma condição, mas também não funcionou, alguém pode ajudar?
       
      JS
      // Jogador 1
      const fillplace1 = document.querySelector('#fillplace1');
      const fillplace2 = document.querySelector('#fillplace2');
      const fillplace3 = document.querySelector('#fillplace3');
      var fill;
      const empties = document.querySelectorAll('.empty');
      fillplace1.addEventListener('dragstart', enterstart);
      fillplace2.addEventListener('dragstart', enterstart);
      fillplace3.addEventListener('dragstart', enterstart);
      for (const empty of empties) {
          empty.addEventListener('dragover', dragOver);
          empty.addEventListener('dragenter', dragEnter);
          empty.addEventListener('dragleave', dragLeave);
          empty.addEventListener('drop', dragDrop);
      }
      function enterstart(){
          fill = this;
      }
      function dragOver(e) {
          e.preventDefault();
      }
      function dragEnter(e) {
          e.preventDefault();
          this.className += ' hovered';
      }
      function dragLeave() {
          this.className = 'empty';
      }
      function dragDrop(id) {
          this.className = 'empty';
          this.append(fill);
      }
       
      HTML
      <link rel="stylesheet" href="../css/jogar.css" />
       
      <div id="barraGeneral">
          <img src="../imagens/Campo/barraGeneralalfa.png" id="imggeneral" />
      </div>
       
      <div id="persona">
          <img src="../imagens/Personagem/cucapersonagem.png" id="imgpersonagem" />
      </div>
       
      <button id="btpassar" onclick="cont();">Passar Rodada</button>

      <H1 id="campomana">1</H1>
       
      <!-- Mesa das cartas jogador 1-->
      <div class="empty" id="emptyplace1">
      </div>
      <div class="empty" id="emptyplace2">
      </div>
      <div class="empty" id="emptyplace3">
      </div>
      <div class="empty" id="emptyplace4">
      </div>
      <div class="empty" id="emptyplace5">
      </div>
       
      <!-- Mão do jogador 1 -->
      <div class="emptyhand1">
          <div class="fill" draggable="true" id="fillplace1">
              <img src='../imagens/Sorteio/aa.png' draggable='true'>
          </div>
      </div>
       
      <div class="emptyhand2">
          <div class="fill" draggable="true" id="fillplace2">
              <img src='../imagens/Sorteio/aa2.png' draggable='true'>
          </div>
      </div>
       
      <div class="emptyhand3">
          <div class="fill" draggable="true" id="fillplace3">
              <img src='../imagens/Sorteio/aa2.png' draggable='true'>
          </div>
      </div>
       
    • By Anderson Maciel
      Boa tarde pessoal,

      Estou quebrando a cabeça para resolver um problema, tenho uma div dinâmica que carrega uma <table> em uma das colunas deveria apresentar o componente Switchery, esta <table> é montada a partir de uma função PHP que faz o select em uma tabela do banco de dados conforme abaixo:
       
      echo '<table class="table table-hover"> <thead> <tr> <th>Nome</th> <th>Agrupamento</th> <th>Ativo</th> </tr> </thead> <tbody>'; foreach($data as $row) { If ($row['ativo'] == 1) {$vativochk = "checked";} else {$vativochk = "";} echo '<tr> <td>'.$row['nome'].'</td> <td>'.$row['agrupamento'].'</td> <td><input type="checkbox" name="ativo_grid" class="js-switch" '.$vativochk.' disabled="disabled"></td> </tr>'; } echo ' </tbody> </table>'; Aqui está o Ajax que chama e retorna atualizando a DIV:
      //funcoes do grid dos graficos function atualiza_grid_graficos() { $.ajax({ type: "POST", url: "hubfuncind.php", data: { id_tabindicadores_paineis: $('#id_tabindicadores_paineis').val(), acao: "gridgraficos" }, success: function(data) { $('#conteudo').html(data); } }); } O retorno vem certinho, mas apenas o componente Switchery está vindo desconfigurado, ou seja vem um checkbox normal (html).

      O que é mais incrível é que neste mesmo formulário mais acima tenho este mesmo componente funcionando normalmente, somente dentro da DIV dinâmica é que fica desconfigurado conforme imagem anexa.

      Será que alguém já passou por isso?

×

Important Information

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