Estrarre da Cartella una determinata 'via'

Lewis34

Nuovo Utente
6 Mar 2020
8
0
1
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:.........................
PHP:
$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
PHP:
$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
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();

}

$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>
 
Ultima modifica di un moderatore:

marino51

Utente Attivo
28 Feb 2013
2.919
164
63
Lombardia
intanto dovresti modificare così, per contare i clienti che poi selezionerai
altrimenti conti tutti i clienti e poi se selezioni solo una parte
PHP:
$via = $_POST['via'];

$total_pages_sql = "SELECT COUNT(*) FROM clienti WHERE Via LIKE '%$via%'";
$result = mysqli_query($conn,$total_pages_sql);
$total_rows = mysqli_fetch_array($result)[0];
$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";
poi metti un valore fisso al posto di $_POST e verifica che lo script funzioni estraendo solo i clienti di quella via e paginando correttamente

se tutto funziona, deve essere gestito il contenuto di $_POST, ovvero bisogna capire da dove arriva e se lo script segue una logica corretta (vedi valore fisso per le prove)

fatti vivo dopo le prove
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.275
328
83
@Lewis34
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
PHP (2).png
quando posti del codice php, oppure la funzione codice dalla barra degli strumenti

box inserisci.png


Inoltre IMPORTANTE: Prima di creare una nuova discussione o di rispondere alle discussioni esistenti ricordati di leggere attentamente il Regolamento del Forum e l'eventuale regolamento specifico della sezione!
Grazie


Per questa volta te lo sistemo io ma mi raccomando per il futuro
 

Lewis34

Nuovo Utente
6 Mar 2020
8
0
1
Grazie Marino 51, purtroppo sono a totale digiuno sul linguaggio PHP.
Potresti correggermi le righe sbagliate?
Grazie
Lewis
 

marino51

Utente Attivo
28 Feb 2013
2.919
164
63
Lombardia
non mi sembra così semplice consigliarti delle variazioni senza sapere come funzionano gli script che stai usando,
ti ho proposto di fare una prova in modo che potessimo capire entrambi qualche cosa di più,
se riesci a fare la prova che ti ho suggerito possiamo proseguire altrimenti lascio che sia qualcun altro a darti supporto
 

Lewis34

Nuovo Utente
6 Mar 2020
8
0
1
Ciao Marino, grazie per la tua pazienza.
Ho aggiornato il codice secondo le tue indicazioni.
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
...............
PHP:
$total_pages_sql = "SELECT COUNT(*) FROM clienti WHERE Via LIKE '%$via%'";
............................
Visualizzazione perfetta:
PHP:
SELECT COUNT(*) FROM clienti WHERE Via LIKE '%cuore%'
Totale records: 3
PHP:
SELECT COUNT(*) FROM clienti WHERE Via LIKE '%poligono%'
Totale records: 6
PHP:
SELECT COUNT(*) FROM clienti WHERE Via LIKE '%torino%'
Totale records: 2
PHP:
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:
..............................
PHP:
SELECT COUNT(*) FROM clienti WHERE Via LIKE '%pascoli%'
Totale records: 40
................................
quando vado su NEXT appare il seguente errore:
...............................
PHP:
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 elimiminato i Link --> FIRST - LAST che non mi servono,,,,
Cosa mi consigli?
Grazie. Saluti
Lewis
 
Ultima modifica di un moderatore:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.275
328
83
@Lewis34
Ti ho chiesto di usare gli appositi tag per postrare il codice e visto che non mi hai nemmeno preso in considerazione chiudo
 

marino51

Utente Attivo
28 Feb 2013
2.919
164
63
Lombardia
prova così, probabilmente (se funziona), sono possibili solo avanti e indietro
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'];
    $via    = $_GET['via'];
}
else
{
    $pageno = 1;
    $via    = "";
}

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

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

if ( !empty($_POST['via']) ) $via = $_POST['via'];

$txt = ( (!empty($via)) ? " WHERE Via LIKE '%".$via."%'" : "" );

$total_pages_sql = "SELECT COUNT(*) FROM clienti".$txt;
$result          = mysqli_query($conn,$total_pages_sql);

$total_rows      = mysqli_fetch_array($result)[0];
$total_pages     = ceil($total_rows / $no_of_records_per_page);

$sql = "SELECT * FROM clienti".$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 "?via=".$via."&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>
  <li><a href="?pageno=<?php echo $total_pages; ?>">Last</a></li>
</ul>
<br /><br />
</body>
</html>
 

Lewis34

Nuovo Utente
6 Mar 2020
8
0
1
PHP:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\3\pannello3.php on line 43
Deve essere così
PHP:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\3\pannello3.php on line 43
 
Ultima modifica di un moderatore:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.275
328
83

Lewis34

Nuovo Utente
6 Mar 2020
8
0
1
Ti funziona perchè digiti ---> http://localhost./3/pannello3.php
anche se non è esatto perché visualizza tutti i records presenti
senza alcun filtro della via richiesta con il Form

Se invii la richiesta dal Form selezionando una determinata via
questo il messaggio di errore:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\3\pannello3.php on line 43

Se vedi il codice inviato a Marino, con alcuni miei comment,i forse si può risalire all'errore
Penso sia utile inserire nel Link NEXT un richiamo alla variabile --> $via = $_POST['via'];
Non conosco la sintassi per provarlo.

Grazie
 

marino51

Utente Attivo
28 Feb 2013
2.919
164
63
Lombardia
NON è mai una bella risposta se non dici perché !
hai scritto che la paginazione funzionava, senza via, deve funzionare ancora
Penso sia utile inserire nel Link NEXT un richiamo alla variabile --> $via = $_POST['via'];
questa é la linea contenuta nel codice che ti ho inviato
PHP:
    <a href="<?php if($pageno >= $total_pages){ echo '#'; } else { echo "?via=".$via."&pageno=".($pageno + 1); } ?>">Next</a>
ciò che chiedi é già presente

ho concluso
 

Lewis34

Nuovo Utente
6 Mar 2020
8
0
1
Dopo inserita la stringa ottengo questa risposta
Notice: Undefined index: via in C:\xampp\htdocs\3\pannello3.php on line 55
SELECT COUNT(*) FROM clienti WHERE Via LIKE '%%'
 

marino51

Utente Attivo
28 Feb 2013
2.919
164
63
Lombardia
Dopo inserita la stringa ottengo questa risposta
Notice: Undefined index: via in C:\xampp\htdocs\3\pannello3.php on line 55
SELECT COUNT(*) FROM clienti WHERE Via LIKE '%%'
mi dispiace, ma NON stai usando il codice come l'ho scritto io
ciò che hai postato non deriva dal mio codice
 

Lewis34

Nuovo Utente
6 Mar 2020
8
0
1
Ciao Marino 51,
oggi buone notizie... finalmente!
Hai ragione tu, la colpa è mia!
Il problema era proprio nella riga del NEXT
Ho rivisto anche quella del PREV riadattandola a quanto da te suggerito per il NEXT.
Ti voglio ringraziare per avermi aiutato ad uscire dal 'coma farmacologico del PHP'
Un grazie anche a Max 1 per avermi supportato e sopportato in questa avventura per me estremamente tecnologica.
Un caro saluto dal vostro amico
Lewis