Combox appear if there are records

1

I have a form where the user selects the size, automatically fills in the color combox:

TheproblemisthatthesizeswillnotalwayshavecolorsandIwishthatiftherewerenocolors,thecolorboxwouldnotappear.Lookatthecode:

PHP

if(mysqli_num_rows($sqlTamanhos)>0){$visualizarT="<div class=\"color-quality\">";
     $visualizarT .= "<div class=\"col-lg-10\" style=\"padding: 10px;\"><div style=\"font-size: 18px;\">Tamanho: </div>";
       $visualizarT .= "<select name=\"TamanhoProdutos\" class=\"form-control\" id='tamanhoProdutos'>";
         $visualizarT .= "<option value=\"selecione\">Selecione o tamanho</option>";    
          while($jmTamanhos = mysqli_fetch_object($sqlTamanhos)){
                $visualizarT .= "<option value='".$jmTamanhos->Tamanho."'>".$jmTamanhos->Tamanho."</option>";               
       }
       $visualizarT .= "</select>";
     $visualizarT .= "</div>";
   $visualizarT .= "<div class='col-lg-10' id=\"cores\"></div>";
 $visualizarT .= "</div>";
}

JQuery

$(function(){
            $('#tamanhoProdutos').change(function(){
                if($(this).val()){
                    $('#cores').show();
                    $.getJSON('cores.php?search=',{idProduto: <?php echo $visualizar->IDProdutos; ?>, tamanho: $(this).val(), ajax: 'true'}, function(j){

            var options = '<div style="font-size: 18px;">Cores:</div><select name="Cores" class="form-control"><option value="selecione">Escolha a Cor</option>';
                        for (var i = 0; i < j.length; i++) {
                            options += '<option value="' + j[i].idT + '">' + j[i].coresT + '</option>';
                        }
              options += '</select>';
                        $('#cores').html(options).show();
                        $('.carregando').hide();
                    });
                }
            });
        });

Query

$key = $_REQUEST['idProduto'];
$tamanho = $_REQUEST['tamanho'];

$sqlCores = mysqli_query($conexao,"SELECT * FROM loja_estoques WHERE IDProdutos = '".$key."' AND Tamanho = '".$tamanho."' GROUP BY Cores ORDER BY Cores");

while ($jmCores = mysqli_fetch_assoc($sqlCores)){
            $coresTamanho[] = array(
            'idT'   => $jmCores['IDEstoques'],
             'coresT' => utf8_encode($jmCores['Cores']),
     );
}
echo (json_encode($coresTamanho));
    
asked by anonymous 10.11.2017 / 16:14

1 answer

1

It's simple, return an information in the json response of the query saying whether or not there are colors:

$key = $_REQUEST['idProduto'];
$tamanho = $_REQUEST['tamanho'];

$sqlCores = mysqli_query($conexao,"SELECT * FROM loja_estoques WHERE IDProdutos = '".$key."' AND Tamanho = '".$tamanho."' GROUP BY Cores ORDER BY Cores");
$jmCores = mysqli_fetch_assoc($sqlCores)
$count = count($jmCores);
if($count > 0){
    foreach($jmCores as $row){
               $coresTamanho[] = array(
                'idT'   => $row['IDEstoques'],
                'coresT' => utf8_encode($row['Cores']),
         );
    }
    $coresTamanho['hasOptions'] = true;
}else{
    $coresTamanho['hasOptions'] = false;
}
echo (json_encode($coresTamanho));

and then treat this answer in jQuery:

(function(){
    $('#tamanhoProdutos').change(function(){
        if($(this).val()){
            $('#cores').show();
             $.getJSON('cores.php?search=',{idProduto: <?php echo $visualizar->IDProdutos; ?>, tamanho: $(this).val(), ajax: 'true'}, function(j){
                  if(j[i].hasOptions === true){
                      var options = '<div style="font-size: 18px;">Cores:</div><select name="Cores" class="form-control"><option value="selecione">Escolha a Cor</option>';
                      for (var i = 0; i < j.length; i++) {
                           options += '<option value="' + j[i].idT + '">' + j[i].coresT + '</option>';
                      }
                      options += '</select>';
                     $('#cores').html(options).show();
                     $('.carregando').hide();
                  }else{

                     $('.carregando').hide();
                  }
             })
        }
    })
});
    
10.11.2017 / 16:30