[PHP] aggiornamento table tramite select senza ricaricare la pagina

Discussione in 'PHP' iniziata da sanzweb, 9 Luglio 2019.

  1. sanzweb

    sanzweb Nuovo Utente

    Registrato:
    9 Luglio 2019
    Messaggi:
    4
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    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: 9 Luglio 2019
  2. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    213
    Mi Piace Ricevuti:
    22
    Punteggio:
    28
    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";

    //.......

    ?>
     
  3. Max 1

    Max 1 Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    29 Febbraio 2012
    Messaggi:
    3.798
    Mi Piace Ricevuti:
    283
    Punteggio:
    83
    Sesso:
    Maschio
    @sanzwebù
    Da regolamento del forum, come tutti noi sei tenuto ad usare il tag [​IMG] o il tag [​IMG] per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
    [​IMG]

    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
     
  4. sanzweb

    sanzweb Nuovo Utente

    Registrato:
    9 Luglio 2019
    Messaggi:
    4
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    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.
     
  5. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    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( 13712 );
    }
    else {
        
    $par1 $_POST['par1'];  error_log('PAR1 = '.$par10);
        
    $par2 $_POST['par2'];  error_log('PAR2 = '.$par20);

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

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

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

    if ( 
    $rowCounter ) {

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

        while( 
    $row $sth->fetchPDO::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 = '.$tb0);
    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à
     
  6. sanzweb

    sanzweb Nuovo Utente

    Registrato:
    9 Luglio 2019
    Messaggi:
    4
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Grazie Marino51, vedo come integrare quanto da te postato con le mie esigenze.
     
Sto caricando...

Condividi questa Pagina