Query system

1

I have this form to consult only for a period of time or just by the name of the client or to consult for a period of time and a specific client:

<form method="POST" action="">
    <strong>Data Início:</strong> <input type="date" name="inicio" placeholder="Data Início">
    <strong>Data Fim:</strong> <input type="date" name="fim" placeholder="Data Fim">
    <strong>Utente:</strong> <input type="text" name="nome" placeholder="Utente">   
    <input type="submit" value="Consultar">
</form>

Code:

$inicio = $_POST['inicio']; 
$fim = $_POST['fim'];   
$nome= $_POST['nome'];

$result_cursos = "SELECT centrodb.utentes.codigoutente,
centrodb.utentes.nome,
centrodb.utentes.descricaovalencia,
centrodb.registoFisioterapia.'DataRegisto',
centrodb.registoFisioterapia.'Data',
Inicio,
Fim,
centrodb.colaboradores.Nome AS Colaborador,
TimeDiff(TIME_FORMAT(Fim,'%H:%i'), TIME_FORMAT(Inicio,'%H:%i')) AS 'Horas Consumidas'

FROM centrodb.registoFisioterapia LEFT OUTER JOIN centrodb.utentes

ON centrodb.utentes.Id = centrodb.registoFisioterapia.utente

LEFT OUTER JOIN colaboradores

ON centrodb.colaboradores.codigo = centrodb.registoFisioterapia.Nome WHERE centrodb.registoFisioterapia.'Data' >= '$inicio' OR centrodb.registoFisioterapia.'Data' <= '$fim' OR centrodb.utentes.nome LIKE '%$nome%'";

$resultado_cursos = mysqli_query($conn, $result_cursos);

$tabela3 .= '<div style="float: center" table align="center">';
$tabela3 .= '<table border="5">';

$tabela3 .= '<tr>';

$tabela3 .='<thead>';

$tabela3 .= '<tr>';

$tabela3 .= '<th>Nº Utente</th>';

$tabela3 .= '<th>Utente</th>';

$tabela3 .= '<th>Valência</th>';

$tabela3 .= '<th>Data Registo</th>';

$tabela3 .= '<th>Data</th>';

$tabela3 .= '<th>Hora Início</th>';

$tabela3 .= '<th>Hora Fim</th>';

$tabela3 .= '<th>Fisioterapeuta</th>';

$tabela3 .= '<th>Horas Consumidas</th>';

$tabela3 .= '</tr>';

$tabela3 .='</thead>'; 

$tabela3 .='<tbody>';

if (empty($resultado_cursos)) {
    echo "Nenhum registro encontrado.";
}

while ($rows_cursos = mysqli_fetch_array($resultado_cursos)) {
$tabela3 .= '<tr>';

$tabela3 .= '<td>'.$rows_cursos['codigoutente'].'</td>';

$tabela3 .= '<td>'.$rows_cursos['nome'].'</td>';

$tabela3 .= '<td>'.$rows_cursos['descricaovalencia'].'</td>';

$tabela3 .= '<td>'.$rows_cursos['DataRegisto'].'</td>';

$tabela3 .= '<td>'.$rows_cursos['Data'].'</td>';

$tabela3 .= '<td>'.$rows_cursos['Inicio'].'</td>';

$tabela3 .= '<td>'.$rows_cursos['Fim'].'</td>';

$tabela3 .= '<td>'.$rows_cursos['Colaborador'].'</td>';

$tabela3 .= '<td>'.$rows_cursos['Horas Consumidas'].'</td>';

$tabela3 .= '</tr>'; 
}

$tabela3 .= '</tr>';

$tabela3 .='</tbody>'; 

$tabela3 .= '</table>';

$tabela3 .= '</div>';

echo $tabela3;

?>

When I search only for the start date and end date it returns the correct data, but if I search only by the name of the client or I search by the time interval and the client name does not return the correct data, it keeps the data that is initially.

    
asked by anonymous 07.05.2018 / 11:46

1 answer

1

Creating conditioning for $nome relating to dates:

$inicio = $_POST['inicio'];
$fim = $_POST['fim'];
$nome = $_POST['nome'];


if((empty($inicio))||(empty($fim))&&(empty($nome))){
    $condicao = 'OR';
}else{
    $condicao = 'AND';
}

$result_cursos = "SELECT
centrodb.utentes.codigoutente,
centrodb.utentes.nome,
centrodb.utentes.descricaovalencia,
centrodb.registoFisioterapia.'DataRegisto',
centrodb.registoFisioterapia.'Data',
Inicio,
Fim,
centrodb.colaboradores.Nome AS Colaborador,
TimeDiff(TIME_FORMAT(Fim,'%H:%i'), TIME_FORMAT(Inicio,'%H:%i')) AS 'Horas Consumidas'

FROM centrodb.registoFisioterapia LEFT OUTER JOIN centrodb.utentes

ON centrodb.utentes.Id = centrodb.registoFisioterapia.utente

LEFT OUTER JOIN colaboradores

ON centrodb.colaboradores.codigo = centrodb.registoFisioterapia.Nome WHERE (centrodb.registoFisioterapia.'Data' >= '$inicio' AND centrodb.registoFisioterapia.'Data' <= '$fim') $condicao centrodb.utentes.nome LIKE '%$nome%'";
    
07.05.2018 / 13:10