• User Newbie

    Estrarre da Cartella una determinata 'via'

    Cari amici,
    desidero estrarre dalla cartella 'Clienti' una determinata 'via'.
    Tutto sembra funzionare, ma quando visualizzo i records della 'via' ,
    dopo la paginazione di 10 records per pagina,
    cliccando su NEXT mi appare il seguente errore,
    mentre la paginazione funziona regolarmente:
    .......................
    Notice: Undefined index: via in C:\xampp\htdocs\3\pannello3.php on line 40
    .......................
    La riga incriminata è la seguente:
    .........................
    $via = $_POST['via'];
    ..........................
    se tolgo questa riga mi appare chiaramente il seguente errore
    ............................
    Notice: Undefined variable: via in C:\xampp\htdocs\3\pannello3.php on line 49
    ................................
    Questa la riga con --> Undefined variable: via
    $sql = "SELECT * FROM clienti WHERE Via LIKE '%$via%' ORDER BY via ASC LIMIT $offset, $no_of_records_per_page";
    Potetei cortesemente fornirmi una soluzione?
    Grazie. Cordiali saluti
    Lewis

    Allego lo script

    <html>
    <head>
    <title>Rubrica</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    </head>
    <body>
    <?php
    if (isset($_GET['pageno'])) {
    $pageno = $_GET['pageno'];
    } else {
    $pageno = 1;
    }
    $no_of_records_per_page = 10;
    $offset = ($pageno-1) * $no_of_records_per_page;

    $conn=mysqli_connect("localhost","root","","utenti");
    // Check connection
    if (mysqli_connect_errno()){
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    die();
    }
    $total_pages_sql = "SELECT COUNT(*) FROM clienti";
    $result = mysqli_query($conn,$total_pages_sql);
    $total_rows = mysqli_fetch_array($result)[0];
    $total_pages = ceil($total_rows / $no_of_records_per_page);
    $via = $_POST['via'];
    {
    $sql = "SELECT * FROM clienti WHERE Via LIKE '%$via%' ORDER BY via ASC LIMIT $offset, $no_of_records_per_page";

    $res_data = mysqli_query($conn,$sql);
    while($row = mysqli_fetch_array($res_data)){
    {
    echo "<center> ";
    echo $row['nome'] . "<br> " . $row['settore'] . "<br> " . $row['via']. "<br>" . $row['telefono']. "<br> ";
    echo "<br />";
    }
    }
    mysqli_close($conn);
    ?>
    <p align="center">testo centrato in HTML</p>

    <ul class="pagination">
    <li><a href="?pageno=1">Primo</a></li>
    <li><a href="?pageno=1">First</a></li>
    <li class="<?php if($pageno <= 1){ echo 'disabled'; } ?>">
    <a href="<?php if($pageno <= 1){ echo '#'; } else { echo "?pageno=".($pageno - 1); } ?>">Prev</a>
    </li>
    <li class="<?php if($pageno >= $total_pages){ echo 'disabled'; } ?>">
    <a href="<?php if($pageno >= $total_pages){ echo '#'; } else { echo "?pageno=".($pageno + 1); } ?>">Next</a>
    </li>
    <li><a href="?pageno=<?php echo $total_pages; ?>">Last</a></li>
    </ul>

    <br><br>
    </body>
    </html>


  • User Attivo

    Ciao,

    come invii il valore di via da una pagina all'altra?

    Perché $_POST['via'] lo puoi recuperare tramite un modulo HTML con POST come metodo. Invece dovresti passare via nell'url e recuperare tale valore tramite $_GET['via'] nella successiva pagina.

    Es.

    Sei su "pagina1.php" e clicchi sul link che ha href uguale a "pagina2.php?via=via"

    Dentro "pagina2.php" recuperi il valore di "via" tramite $_GET['via'] e lo utilizzi nella query (magari valida/sanitizza il contenuto prima di utilizzarlo nella query).


  • User Newbie

    Grazie flaviors200 per la pronta risposta.
    Purtroppo le mie conoscenze di PHP sono pochissime.
    Potresti cortesemente inserire nel mio codice i tuoi consigli?
    Ti ringrazio. Sono un insegnante a digiuno su questo linguaggio.
    Saluti
    Lewis


  • User Attivo

    Sostituisci

    [PHP]
    $via = $_POST['via'];
    [/PHP]

    con

    [PHP]
    $via = $_GET['via'];
    [/PHP]

    e prova a chiamare la pagina pannello3.php?via=nome-via

    Al posto di "nome-via" metti una stringa, quello che ti pare basta che sia qualcosa presente nel db.


  • User Newbie

    Ciao Flavio, grazie.
    Ho aggiornato il codice secondo le tue indicazioni. NON FUNZIONA

    Premetto che nella tabella ho dei records con TRE vie diverse:

    • cuore (3 records)
    • poligono (6 records)
    • torino (2 records)
    • pascoli (40 records)

    Per verificare il contenuto della variable
    ho inserito un Echo di controllo dopo la stringa
    ...............
    $total_pages_sql = "SELECT COUNT(*) FROM clienti WHERE Via LIKE '%$via%'";
    ............................

    Visualizzazione perfetta:

    SELECT COUNT(*) FROM clienti WHERE Via LIKE '%cuore%'
    Totale records: 3

    SELECT COUNT(*) FROM clienti WHERE Via LIKE '%poligono%'
    Totale records: 6

    SELECT COUNT(*) FROM clienti WHERE Via LIKE '%torino%'
    Totale records: 2

    SELECT COUNT(*) FROM clienti WHERE Via LIKE '%pascoli%'
    Totale records: 40
    ...............................

    La paginazione funziona correttamente.....

    Quando richiedo la via 'pascoli' nella prima pagina il risultato è giusto:
    ..............................
    SELECT COUNT(*) FROM clienti WHERE Via LIKE '%pascoli%'
    Totale records: 40
    ................................

    quando vado su NEXT appare il seguente errore:
    ...............................
    Notice: Undefined index: via in C:\xampp\htdocs\3\pannello3.php on line 46 (la riga --> $via = $_POST['via'];
    SELECT COUNT(*) FROM clienti WHERE Via LIKE '%%' (mentre in questa manca il contenuto della variabile '%%' )
    ........................................

    Per non creare ulteriori errori ho eliminato i Link --> FIRST - LAST che non mi servono,,,,

    Cosa mi consigli?
    Grazie. Saluti
    Lewis


  • User Attivo

    @Lewis34 said:

    Cosa mi consigli?
    Lewis

    Di rileggere meglio la soluzione che ti ho postato, se ti da ancora questo errore

    Notice: Undefined index: via in C:\xampp\htdocs\3\pannello3.php on line 46 (la riga --> $via = $_POST['via'];
    SELECT COUNT(*) FROM clienti WHERE Via LIKE '%%' (mentre in questa manca il contenuto della variabile '%%' )

    vuol dire che non hai modificato il codice come suggerito.

    Devi usare $_GET e non $_POST

    Se vuoi portarti questa variabile anche nelle successive pagine salvala in $via e includila nell'URL

    [PHP]pannello3.php?via=<?php echo $via;?>&pageno=<?php echo $pageno;?>[/PHP]


  • User Newbie

    Ciao.
    ho provato .... Devi usare $_GET e non $_POST ....
    Non funziona|

    Dove devo inserire la scritta

    pannello3.php?via=<?php echo $via;?>&pageno=<?php echo $pageno;?>

    In quale posizione del codice devo inserirla?

    Scusami. Spiegalo ad un bambino di 10 anni che non conosce la materia.

    Ti ringrazio. Ciao
    Lewis


  • User Newbie

    Questa è la riga di NEXT
    <a href="<?php if($pageno >= $total_pages){ echo '#'; } else { echo "?pageno=".($pageno + 1); } ?>">Next</a>

    puoi cortesemente correggerla secondo le tue indicazioni?

    Ti ringrazio
    Lewis


  • User Attivo

    @Lewis34 said:

    Questa è la riga di NEXT
    <a href="<?php if($pageno >= $total_pages){ echo '#'; } else { echo "?pageno=".($pageno + 1); } ?>">Next</a>

    puoi cortesemente correggerla secondo le tue indicazioni?

    Ti ringrazio
    Lewis

    Quando posti codice usa i tag PHP (ultimo pulsante partendo da destra seconda riga editor)

    [PHP]
    <a href="<?php if ($pageno >= $total_pages){ echo '#'; } else { echo "?via=".$via."&pageno=".($pageno + 1); } ?>">Next</a>
    [/PHP]


  • User Newbie

    Ciao Flaviors200,
    ho inserito il tuo codice ma quando clicco su NEXT appare questo errore:

    [PHP]
    Notice: Undefined index: via in C:\xampp\htdocs\3\pannello3.php on line 46
    SELECT COUNT(*) FROM clienti WHERE Via LIKE '%%'[/QUOTE]
    [/PHP]

    La riga 46 si riferisce a:
    [PHP]$via = $_POST['via'];[/PHP]

    Se tolgo questa riga il programma all'avvio dà questo errore:
    [PHP]Notice: Undefined variable: via in C:\xampp\htdocs\3\pannello3.php on line 54
    SELECT COUNT(*) FROM clienti WHERE Via LIKE '%%'
    [/PHP]

    e nella riga con SELECT COUNT di controllo non appare più il contenuto della variabile.

    Sto pensando ad un comando che all'inizio del programma memorizzi la variabile in maniera stabile
    in tutta la durata dei cambi della paginazione.

    Scusami, io non ci capisco nulla.


  • User Newbie

    Il listato

    [PHP]
    <html>
    <head>
    <title>Rubrica</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    </head>
    <body>
    <?php

    if (isset($_GET['pageno'])) {
    $pageno = $_GET['pageno'];
    } else {
    $pageno = 1;
    }

    $no_of_records_per_page = 10;
    $offset = ($pageno-1) * $no_of_records_per_page;

    $conn=mysqli_connect("localhost","root","","utenti");
    // Check connection
    if (mysqli_connect_errno()){
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    die();
    }

    $via = $_POST['via'];

    // $total_pages_sql = "SELECT COUNT(*) FROM clienti";

    echo "<center> ";

    $total_pages_sql = "SELECT COUNT(*) FROM clienti WHERE Via LIKE '%$via%'";
    echo $total_pages_sql;
    $result = mysqli_query($conn,$total_pages_sql);
    $total_rows = mysqli_fetch_array($result)[0];

    echo "<br />";
    echo "<br />";

    echo "Totale records: " . $total_rows;
    echo "<br />";
    echo "<br />";

    $total_pages = ceil($total_rows / $no_of_records_per_page);

    {
    $sql = "SELECT * FROM clienti WHERE Via LIKE '%$via%' ORDER BY via ASC LIMIT $offset, $no_of_records_per_page";

    $res_data = mysqli_query($conn,$sql);
    while($row = mysqli_fetch_array($res_data)){
    {
    echo "<center> ";
    echo $row['nome'] . "<br> " . $row['settore'] . "<br> " . $row['via']. "<br>" . $row['telefono']. "<br> ";
    echo "<br />";
    }
    }
    mysqli_close($conn);

    ?>
    <p align="center">testo centrato in HTML</p>

    <ul class="pagination">

    <!-- <li><a href="?pageno=1">First</a></li> -->
    <li class="<?php if($pageno <= 1){ echo 'disabled'; } ?>">
    <a href="<?php if($pageno <= 1){ echo '#'; } else { echo "?pageno=".($pageno - 1); } ?>">Prev</a>
    </li>
    <li class="<?php if($pageno >= $total_pages){ echo 'disabled'; } ?>">
    <a href="<?php if ($pageno >= $total_pages){ echo '#'; } else { echo "?via=".$via."&pageno=".($pageno + 1); } ?>">Next</a>
    </li>
    </ul>
    <br><br>
    </body>
    </html>

    <?php } ?>

    [/PHP]


  • User Attivo

    @flaviors200 said:

    Sostituisci

    [PHP]
    $via = $_POST['via'];
    [/PHP]

    con

    [PHP]
    $via = $_GET['via'];
    [/PHP]

    Scusa ma cosa c'è di così difficile da capire nelle righe che ti avevo scritto l'altro ieri?

    Continui a utilizzare $_POST anziché $_GET come ti ho suggerito (e come ti hanno suggerito su altri forum :1:


  • User Newbie

    Ho cambiato in $_GET e continua a darmi errore sulla riga del $_GET.

    Se credi ti mando il contenuto della Tabella clienti e così puoi verificarlo di persona.


  • User Attivo

    Ti da errore quando la variabile non è inizializzata

    Cambia la riga che ti da errore con questa

    [PHP]
    $via = $_GET['via'] ?? '';
    [/PHP]

    oppure se usi ancora PHP 5

    [PHP]
    $via = isset($_GET['via']) ? $_GET['via'] : '';
    [/PHP]


  • User Newbie

    Grazie Flaviors200,
    ora tutto OK!

    Saluti
    Lewis