Jump to content

Filtrar por data inicio e data final


noname346

Recommended Posts

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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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);
}
?>
Link to comment
Share on other sites

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
Link to comment
Share on other sites

Em 05/03/2020 às 16:54, 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.

qbu9Lpg.jpeg uma imagem para entender

Link to comment
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.