Show launch tag when date is IS NOT NULL

6

I'm trying to make a splash of a release tag and what seemed to be simple ended up becoming a complication. The product registration has two fields, data_inicial and data_expiração , initially I make a select to show all the products, then I'm making another select to pick products that have the dates filled, in this case, IS NOT NULL and try to show the tag that is an image, I will try not to complicate.

The first select that takes all products according to the defined clauses, it looks like this:

mysql_select_db($database_conexao, $conexao);
if ($IdCategoria != 0) {
    $query_rsProdutos = "SELECT 
                              produtos_imagem.caminho,
                              produtos_imagem.caminho_thumbs,
                              produtos.codigo_iabv,
                              produtos.nome,
                              produtos.lancamento,
                              produtos.id_produto                                                         
                            FROM
                              categorias
                              INNER JOIN produtos ON (categorias.id_categoria = produtos.id_categoria)
                              INNER JOIN produtos_imagem ON (produtos.id_produto = produtos_imagem.id_produto)
                            WHERE
                              (produtos.id_produto = produtos_imagem.id_produto) AND 
                              (produtos.id_categoria = '".$IdCategoria."') AND 
                              (produtos.id_idioma = '".$_SESSION['idioma']."') AND
                              (produtos.'status' = 1)";
} else {
    $query_rsProdutos = "SELECT 
                              produtos_imagem.caminho,
                              produtos_imagem.caminho_thumbs,
                              produtos.codigo_iabv,
                              produtos.nome,
                              produtos.lancamento,
                              produtos.id_produto
                            FROM
                              categorias
                              INNER JOIN produtos ON (categorias.id_categoria = produtos.id_categoria)
                              INNER JOIN produtos_imagem ON (produtos.id_produto = produtos_imagem.id_produto)
                            WHERE
                              (produtos.id_produto = produtos_imagem.id_produto) AND                              
                              (produtos.id_idioma = '".$_SESSION['idioma']."') AND
                              (produtos.'status' = 1)"; 
}
$rsProdutos = mysql_query($query_rsProdutos, $conexao) or die(mysql_error());
$row_rsProdutos = mysql_fetch_assoc($rsProdutos);
$totalRows_rsProdutos = mysql_num_rows($rsProdutos);

This shows me all the products, I'm displaying them all like this:

<?php do { 

mysql_select_db($database_conexao, $conexao);
$query_rsProdutosLanc = 
	"SELECT 						  
	  produtos.data_inicial,
	  produtos.data_expiracao
	FROM
	  produtos
	WHERE						  
	  (produtos.id_idioma = '".$_SESSION['idioma']."') AND 						  
	  (produtos.'status' = 1) AND
	  (produtos.data_inicial IS NOT NULL) AND
	  (produtos.data_expiracao IS NOT NULL)";				
$rsProdutosLanc = mysql_query($query_rsProdutosLanc, $conexao) or die(mysql_error());
$row_rsProdutosLanc = mysql_fetch_assoc($rsProdutosLanc);	

$DataInicial = $row_rsProdutosLanc['data_inicial'];							
$DataExpiracao = $row_rsProdutosLanc['data_expiracao'];	

?>
<div class="col-md-4 col-sm-4"> <a class="shop-item-list" href="detalhes.php?id=<?php echo $row_rsProdutos['id_produto'];  ?>">

<figure> 
	<?php if ($DataInicial <= $DataExpiracao) { ?>
	<div class="imagem-mascara"></div>
	<?php } ?>                
	<img  src="<?php echo $row_rsProdutos['caminho']; ?>" alt="" />
</figure>


<div class="product-info">
  <h2> <span class="product-name"> <span class="bold">CÓD.: </span><?php echo utf8_encode($row_rsProdutos['codigo_iabv']); ?></span> <span class="product-name"><?php echo utf8_encode($row_rsProdutos['nome']); ?></span> </h2>
</div>
</a>
</div>

<?php } while($row_rsProdutos = mysql_fetch_assoc($rsProdutos)); ?>

Inside the loop to show the products I'm making a new select to try to get the dates IS NOT NULL to show the tag of launch.

The tag is trying to show so within that loop :

<figure> 
	<?php if ($DataInicial <= $DataExpiracao) { ?>
	<div class="imagem-mascara"></div>
	<?php } ?>                
	<img  src="<?php echo $row_rsProdutos['caminho']; ?>" alt="" />
</figure>

But the tag is appearing on all products.

Dates are in this format:

data_inicial - 2017-10-01
data_expiracao - 2017-10-31

I even tried it, but it still did not work;

<?php if (strtotime($DataInicial) <= strtotime($DataExpiracao)) { ?>	
    <div class="imagem-mascara"></div> 
<?php } ?>
    
asked by anonymous 23.10.2017 / 20:42

2 answers

2

I was able to solve my problem, I discarded the second loop , I inserted the dates in the first select and now only select , then I made some checks before showing tag

Within loop :

if ($row_rsProdutos['data_inicial'] == "" and $row_rsProdutos['data_expiracao'] == "") {
    $Lanc = 0;
} else {
   if ($row_rsProdutos['data_inicial'] = date('Y-m-d')) {
       $Lanc = 1;
   } else {
       $Lanc = 0;
   }
} 

And to show or not the image I did so:

<?php if ($Lanc == 1) { ?>	
  <div class="imagem-mascara"></div>
<?php  } ?> 

Thanks for the tips.

    
31.10.2017 / 12:52
0

As you are comparing the date would be ideal to convert it to strtotime , then the comparison is more accurate, but if you wish you can also do the database in case mysql returns you the difference of days between dates with DATEDIFF(data_inicial, data_expiracao) will return positive or negative depending on the order used, if "0" is the same date, then just add your select:

SELECT produtos.data_inicial, produtos.data_expiracao,
DATEDIFF(produtos.data_inicial, produtos.data_expiracao) dif

And compare in php.

    
24.10.2017 / 12:40