[PHP] aggiornamento table tramite select senza ricaricare la pagina

  • Creatore Discussione Creatore Discussione sanzweb
  • Data di inizio Data di inizio

sanzweb

Nuovo Utente
9 Lug 2019
4
0
1
Ciao a tutti del forum e grazie per avermi accettato.

Ho una necessità di questo tipo:

Ho una <table> con le ore dei dipendenti che prende i dati da Mysql. fin qui li carica e tutto bene
Sopra alla tabella ho piazzato una select che vorrei mi facesse da filtro per data:
HTML:
<div id="filtri">
<h3>Filtra per data:</h3>
<form id="filtra-data" method="GET" action="">
da <input type="date" data-format="yyyy-mm-dd" name="inizio" id="inizio" placeholder="inizio" />
a <input type="date" data-format="yyyy-mm-dd" name="fine" id="fine" placeholder="fine" />
<input type="button" name="filtra" id="filtra" value = "Filtra"/>
</form>
</div>

stavo quindi pensando di adottare una cosa del genere usando all'inizio:
PHP:
if(isset($_GET['filtra']))
{
 $inizio = $_GET['inizio'];
 $fine = $_GET['fine'];
 filtra_record($inizio, $fine);  //chiamata alla funzione
}

la funzione:
PHP:
function filtra_record($inizio, $fine){
 
$db_host = '89.46.111.72';
$username = 'Sql1250405';
$password = '608h3if5o2';
$dbname = "Sql1250405_2";
 $conn = new mysqli($db_host , $username, $password, $dbname);
 
 $sql = "SELECT * FROM interventi WHERE data BETWEEN '" .  $inizio . "' AND '" . $fine . "' ORDER BY data DESC";
 
 $result = $conn->query($sql);

......... e qui che devo caricare la tabella di nuovo? ma verrebbe duplicata sotto l'altra già presente immagino
}

La domanda è: come posso fare per ricaricare la table "filtrata" aggiornando quella esistente che carico ad apertura di pagina? Devo servirmi di Ajax o riesco anche con PHP senza disturbare JQUERY?

grazie per i vostri consigli illuminanti che riuscirete a darmi.

sanzweb
 
Ultima modifica di un moderatore:
ti basta modificare la SELECT iniziale aggiungendo la condizione in una variabile che valorizzerai o meno a seconda dell'uso del filtro

PHP:
<?php

$where=""; //condizione iniziale

if(isset($_GET['filtra']))
{
$inizio = $_GET['inizio'];
$fine = $_GET['fine'];
$where="WHERE data BETWEEN '$inizio' AND '$fine '"; //valorizzo la condizione
}

//query
$sql="SELECT * FROM tabella $where";

//.......

?>
 
@sanzwebù
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code-gif.6007
o il tag
php-png.6009
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box-inserisci-2-png-jpg.6008


Inoltre ti prego e sei tenuto di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
 
Ciao Mr. X, ti ringrazio per la risposta e scusami il ritardo per i ringraziamenti del caso, ma sono stato fuori per lavoro.

Ho capito cosa intendi impostando una query dinamica.
Ma mi rimane un punto da chiarire..

Al caricamento della pagina, nella select vengono caricati tutti i record nella tabella e va da se che i campi inizio e fine sono vuoti la prima volta.

Quando l'utente compila i campi di data iniziale e data finale, come viene rieseguita la query? nel senso ho provato a fare come qui sotto riportato, ma la pagina rimane immobile, con la tabella tale e quale.

Nell'action va messo qualcosa di particolare?

PHP:
If(isset($_GET['filtra']))
{
 $inizio = $_GET['inizio'];
 $fine = $_GET['fine'];
 $conn = new mysqli($host, $db_user, $db_psw, $db_name);
 $where = "WHERE data BETWEEN ' " .  $inizio . " ' AND ' " . $fine . " ' ";
 $query = "SELECT * FROM interventi $where ORDER BY data DESC";   
 $result = $conn->query($query);
} else {
 
$conn = new mysqli($host, $db_user, $db_psw, $db_name);
$query = "SELECT * FROM interventi ORDER BY data DESC";   
$result = $conn->query($query);
}

grazie per il tuo aiuto.
 
io penso che sia necessario usare ajax,
ti posto un esempio che ho realizzato per me e che puoi valutare per applicarlo
lo script di partenza l'ho chiamato TableHandler.php, equivale alla pagina sulla quale aggiornare la tabella
PHP:
<?php
@unlink('TableHandler.log');

ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('display_errors', FALSE);
ini_set('log_errors', TRUE);
ini_set('error_log', 'TableHandler.log');
error_log("TableHandler.php", 0);


if (empty($_POST)) {
?>
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>AJAX - Table Handler</title>

    <script type='text/javascript' src='http://localhost/test_site/php/jquery.min.js'></script>

    <script type='text/javascript'>
        $(document).ready(function() {

            NewReq();

            $('#NewUpd').click(function(){
                alert('hai cliccato il bottone SEARCH');
                NewReq();
            });

            function NewReq(currentItem)
            {
                alert( "NewReq function called" );

                var data =
                {
                    par1 : $("#PAR1").val(),
                    par2 : $("#PAR2").val(),
                }
                alert(" par1 = "+data["par1"]+"\n\r par2 = "+data["par2"]);

                $.ajax
                ({
                    type    : 'post',
                    cache   : false,
                    url     : 'TableHandlerExec.php',
                    data    : data,

                    success:function(html) {
                        $('#ResDiv').html(html);
                    },
                    error: function(request, status, error) {
                        $('#ResDiv').html('ERRORE : il server non risponde o lo ha fatto in modo anomalo '+request.responseText);
                    }
                });
        };
        });
    </script>

  </head>

  <body>
    <form name='myform' method='POST' action="<?php echo $_SERVER['PHP_SELF']; ?>">

      <p>
        <label for="PAR1">parametro 1 :</label>
        <br />
        <input type="text" name="PAR1" id="PAR1" value="" placeholder="inserisci il parametro 1" />
      </p>
      <p>
        <label for="PAR2">parametro 2 :</label>
        <br />
        <input type="text" name="PAR2" id="PAR2" value="" placeholder="inserisci il parametro 2" />
      </p>

      <p>
        <input type="button" name="NewUpd" id="NewUpd" value="Search" />
      </p>

      <p>
        <div id='ResDiv'>risultato atteso qui</div>
      </p>
    </form>
  </body>
</html>
<?php
}
else
{
    echo "<br />qui vanno inserite le operazioni da eseguire quando POST contiene valori";
}
?>

lo script chiamato dalla funzione ajax ha nome TableHandlerExec.php
PHP:
<?php
// @unlink('TableHandler.log');

ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('display_errors', FALSE);
ini_set('log_errors', TRUE);
ini_set('error_log', 'TableHandler.log');
error_log("TableHandlerExec.php", 0);


if ( empty($_POST['par1']) ) {
    $sql    = "SELECT color_id, color_name, color_hex FROM colors WHERE color_id IN( ?, ?, ?, ? )";
    $params = array( 1, 3, 7, 12 );
}
else {
    $par1 = $_POST['par1'];  error_log('PAR1 = '.$par1, 0);
    $par2 = $_POST['par2'];  error_log('PAR2 = '.$par2, 0);

    $sql    = "SELECT color_id, color_name, color_hex FROM colors WHERE color_id IN( ?, ? )";
    $params = array( $par1, $par2 );
}
error_log('sql = '.$sql, 0);

require_once 'myUtils/ClassTheBestDB.php';
$db  = new TheBestDB( 'sqlsrv:Server=******;Database=testDB','******','******' );
$sth = $db->query( $sql, $params );

$rowCounter = $sth->rowCount();
error_log('record found = '.$rowCounter, 0);

if ( $rowCounter ) {

    $tb = "<table width='50%'>"
        . "<tbody>";

    while( $row = $sth->fetch( PDO::FETCH_ASSOC ) ) {
        $tb .= "<tr>"
             . "<td>" . $row['color_id']   . "</td>"
             . "<td>" . $row['color_name'] . "</td>"
             . "<td>" . $row['color_hex']  . "</td>"
             . "</tr>";
    }

    $tb .= "</tbody>"
         . "</table>";
}
else {
    $tb = "NON HO TROVATO ELEMENTI DA VISUALIZZARE";
}

error_log('risultato = '.$tb, 0);
echo $tb;

?>

entrambi gestiscono un log TableHandler.log

ho lasciato attivi tutti i log,
eseguendo il primo script, si vede
upload_2019-8-4_16-24-19.png


che produce il risultato iniziale
upload_2019-8-4_16-25-41.png


ed inserendo i parametri filtra i due valori nel mio esempio, se
upload_2019-8-4_16-27-33.png

vedi se puoi adattarlo alla tua necessità
 

Discussioni simili