Jump to content
noname346

Filtrar por data inicio e data final

Recommended Posts

noname346

Eu estou a fazer um estágio e propuseram um software web-based de facturação de salão de beleza e com isso como trabalho de estágio e com isso estou a fazer e fiquei impedido num filtro que me pediram para fazer num dos menus e o filtro é de data inicio e data fim.

Código:

<?php
$sql = 'SELECT * FROM custos';
$resultado = mysqli_query($ligacao,$sql) or die("Não tem dados para apresentar !");
?>
Data Inicial <input id="datainicial" name="datainicial" type = 'date'>
Data Final <input id="datafinal" name="datafinal"  type = 'date'>
<input type="submit" class="button3" value = "Buscar">
<p></p>
<table style="width: 50%;" border='0' id="table" name="table">
   <thead>
        <tr>
        <th width="10%" align='center' bgcolor='#baba84'>Data</th>
        <th width="25%" align='center' bgcolor='#baba84'>Nome do custo</th>
        <th width="8%" align='center' bgcolor='#baba84'>Valor</th>
        </tr>
    </thead>
    <tbody>
<?php
$total_valor = 0;
while($registo = mysqli_fetch_assoc($resultado)){
	$valor=number_format($registo['valor'], 2, ',', ' ')."€";
    echo '<tr>';
    echo'<td align="left" bgcolor="white">'.date('d/m/Y', strtotime($registo['data'])).'</td>';
	echo'<td bgcolor="white">'.$registo['nome_custo'].'</td>';
    echo "<td align='left' bgcolor='white'>".$valor."</td>";
    print ("<td bgcolor='white' width='1%'><a href='alterar_custos.php?num={$registo['num']}&data={$registo['data']}&nome={$registo['nome_custo']}&valor={$registo['valor']}' class='button2'><i class='fa fa-edit'></i></</a></td>");
    print ("<td bgcolor='white' width='1%'><a href='eliminar_custos.php?num={$registo['num']}' class='button2'><i class='fa fa-trash'></i></</a></td>"); 
	echo'</tr>';
	$total_valor += $registo['valor'];
}
?>
</tbody>
<tfoot>
    <tr>
        <td align='left' colspan='2' bgcolor='#baba84'><b>Valor Total</b></td>
        <td align='left' bgcolor='white'><?php echo number_format($total_valor, 2, ',', ' ')."€"; ?></td>
    </tr>
</tfoot><!---->
</table>
<?php
mysqli_close($ligacao);
?>

 

Edited by noname346

Share this post


Link to post
Share on other sites
noname346
1 minuto atrás, noname346 disse:

Eu estou a fazer um estágio e propuseram um software web-based de facturação de salão de beleza e com isso como trabalho de estágio e com isso estou a fazer e fiquei impedido num filtro que me pediram para fazer num dos menus e o filtro é de data inicio e data fim.

Código:


<?php
$sql = 'SELECT * FROM custos';
$resultado = mysqli_query($ligacao,$sql) or die("Não tem dados para apresentar !");
?>
Data Inicial <input id="datainicial" name="datainicial" type = 'date'>
Data Final <input id="datafinal" name="datafinal"  type = 'date'>
<input type="submit" class="button3" value = "Buscar">
<p></p>
<table style="width: 50%;" border='0' id="table" name="table">
   <thead>
        <tr>
        <th width="10%" align='center' bgcolor='#baba84'>Data</th>
        <th width="25%" align='center' bgcolor='#baba84'>Nome do custo</th>
        <th width="8%" align='center' bgcolor='#baba84'>Valor</th>
        </tr>
    </thead>
    <tbody>
<?php
$total_valor = 0;
while($registo = mysqli_fetch_assoc($resultado)){
	$valor=number_format($registo['valor'], 2, ',', ' ')."€";
    echo '<tr>';
    echo'<td align="left" bgcolor="white">'.date('d/m/Y', strtotime($registo['data'])).'</td>';
	echo'<td bgcolor="white">'.$registo['nome_custo'].'</td>';
    echo "<td align='left' bgcolor='white'>".$valor."</td>";
    print ("<td bgcolor='white' width='1%'><a href='alterar_custos.php?num={$registo['num']}&data={$registo['data']}&nome={$registo['nome_custo']}&valor={$registo['valor']}' class='button2'><i class='fa fa-edit'></i></</a></td>");
    print ("<td bgcolor='white' width='1%'><a href='eliminar_custos.php?num={$registo['num']}' class='button2'><i class='fa fa-trash'></i></</a></td>"); 
	echo'</tr>';
	$total_valor += $registo['valor'];
}
?>
</tbody>
<tfoot>
    <tr>
        <td align='left' colspan='2' bgcolor='#baba84'><b>Valor Total</b></td>
        <td align='left' bgcolor='white'><?php echo number_format($total_valor, 2, ',', ' ')."€"; ?></td>
    </tr>
</tfoot><!---->
</table>
<?php
mysqli_close($ligacao);
?>

 

Esqueci me de dizer que eu quero. O que queria era que desse o filtro e mais uma pequena coisa, para aparecer a tabela tenho de usar o filtro

Share this post


Link to post
Share on other sites
Cerzedelo
1 hora atrás, noname346 disse:

Esqueci me de dizer que eu quero. O que queria era que desse o filtro e mais uma pequena coisa, para aparecer a tabela tenho de usar o filtro

Para ter um filtro entre as datas de inicio e fim só tem de alterar a instrução sql de forma a postar os valores entre essas datas.

SELECT * FROM tabela WHERE (data>$datainicio AND data<$datafim).

Pode ainda utilizar o operador BETWEEN.

SELECT * FROM tabela WHERE data BETWEEN $datainicio AND $datafim

 

Share this post


Link to post
Share on other sites
noname346
13 minutos atrás, Cerzedelo disse:

Para ter um filtro entre as datas de inicio e fim só tem de alterar a instrução sql de forma a postar os valores entre essas datas.

SELECT * FROM tabela WHERE (data>$datainicio AND data<$datafim).

Pode ainda utilizar o operador BETWEEN.

SELECT * FROM tabela WHERE data BETWEEN $datainicio AND $datafim

 

Eu fiz assim e não está aparecer nada na tabela.

<form method="POST">
Data Inicial <input name="datainicio" type = 'date'>
Data Final <input name="datafim"  type = 'date'>
<input type="submit" class="button3" value="Buscar">
</form>
<?php
if(isset($_POST['datainicio']) && isset($_POST['datafim'])){
	$datainicio=$_POST['datainicio'];
	$datafim=$_POST['datafim'];
	$query="SELECT * FROM custos WHERE data BETWEEN $datainicio AND $datafim";
	$res=mysqli_query($ligacao,$query) or die(mysqli_error($ligacao));
?>
<p></p>
<table style="width: 100%;" border='0' id="table" name="table">
   <thead>
        <tr>
        <th width="2%" align='center' bgcolor='#baba84'>Data</th>
        <th width="5%" align='center' bgcolor='#baba84'>Nome do custo</th>
        <th width="1%" align='center' bgcolor='#baba84'>Valor</th>
        </tr>
    </thead>
    <tbody>
<?php
$total_valor = 0;
while($registo = mysqli_fetch_assoc($res)){
	$valor=number_format($registo['valor'], 2, ',', ' ')."€";
    echo '<tr>';
    echo'<td align="center" bgcolor="white">'.$registo['data'].'</td>';
	echo'<td bgcolor="white">'.$registo['nome_custo'].'</td>';
    echo "<td bgcolor='white'>".$valor."</td>";
    print ("<td bgcolor='white' width='1%'><a href='alterar_custos.php?num={$registo['num']}&data={$registo['data']}&nome={$registo['nome_custo']}&valor={$registo['valor']}' class='button2'><i class='fa fa-edit'></i></</a></td>");
    print ("<td bgcolor='white' width='1%'><a href='eliminar_custos.php?num={$registo['num']}' class='button2'><i class='fa fa-trash'></i></</a></td>"); 
	echo'</tr>';
	$total_valor += $registo['valor'];
}
?>
</tbody>
<tfoot>
    <tr>
        <td align='left' colspan='2' bgcolor='#baba84'><b>Valor Total</b></td>
        <td align='left' bgcolor='white'><?php echo number_format($total_valor, 2, ',', ' ')."€";?></td>
    </tr>
</tfoot><!---->
</table>
<?php
mysqli_close($ligacao);
}
?>

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

sem entrar pelos meandros de várias situações que não deveriam ser feitas no código apresentado, vamos nos centrar naquilo que faz com que não apareça a informação.

datas devem ser tratadas como strings, e como tal, necessitam de ser ladeadas pelo caracter '.

por outras palavras, terás de colocar esses caracteres, antes e depois de $datainicio e $datafim dentro da tua instrução de SQL


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
noname346
9 minutos atrás, HappyHippyHippo disse:

sem entrar pelos meandros de várias situações que não deveriam ser feitas no código apresentado, vamos nos centrar naquilo que faz com que não apareça a informação.

datas devem ser tratadas como strings, e como tal, necessitam de ser ladeadas pelo caracter '.

por outras palavras, terás de colocar esses caracteres, antes e depois de $datainicio e $datafim dentro da tua instrução de SQL

Já aparece. Usei o date(), ficou assim $datainicio=date("d/m/Y", strtotime($_POST['datainicio']));

$datafim= date("d/m/Y", strtotime($_POST['datafim'])); , mas ele só pesquisa o dia e quero que pesquise dia/mes/ano não só um.

https://imgur.com/a/fsWKdpA uma imagem para enteder

Edited by noname346
faltava uma imagem

Share this post


Link to post
Share on other sites
HappyHippyHippo

altera para o formato que o MySQL pretende : "Y-m-d"


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
noname346
9 minutos atrás, HappyHippyHippo disse:

altera para o formato que o MySQL pretende : "Y-m-d"

Já está a dar, eu agr quando adicionar vai ser como - em vez / e mudei no mysql de / para - o que tinha inserido

Obrigado pela a ajuda

Edited by noname346

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

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.