Ciao a tutti, premetto che sto imparando gradualmente PHP e che non è da molto che ci "smanetto".
Sto diventando matto per un problema.
Ho un DB ("users") con una tabella ("utenti") con 3 campi: id, nome, cognome.
Ho creato una pagina php che estrae i dati contenuti nel DB, li mette in tabella e, per ogni elemento, dà la possibilità di cancellare uno o più elementi selezionando la rispettiva checkbox.
Fin qui tutto ok.
Il problema è che il database contiene un numero veramente enorme di valori ed io vorrei suddividere questi record estratti facendo apparire il numero delle pagine con le freccine avanti e indietro
es: << 1, 2 ... 5 >>
Ora: in Internet, come pure su html.it ho trovato delle ottime guide che spiegano come ottenere questa cosa comunemente chiamata 'paginazione'...però non riesco ad integrarle nel mio codice. Credo che il problema sia dovuto al fatto che sia la cancellazione che la paginazione utilizzano le variabili _GET e che io non riesco correttamente a gestire, proprio perché sono ancora un po' imbranato...
Mi potreste gentilmente aiutare?
Questo è il codice della pagina mostra_nomi.php e che funziona bene
Codice PHP:
<?php
$DB_host = 'localhost';
$DB_user = 'root';
$DB_password = '';
$DB_name = 'users';
//connessione al DB
$link = mysql_connect($DB_host, $DB_user, $DB_password);
if (!$link) {
die ('Non riesco a connettermi: ' . mysql_error());
}
$db_selected = mysql_select_db($DB_name, $link);
if (!$db_selected) {
die ("Errore nella selezione del database: " . mysql_error());
}
if($_POST)
{
$ids = isset($_POST['id']) ? $_POST['id'] : array();
elimina_record($ids);
}
elseif(isset($_GET['id']))
{
elimina_record(array($_GET['id']));
}
else
mostra_lista();
function mostra_lista()
{
// mostro un eventuale messaggio
if(isset($_GET['msg']))
echo '[b]'.htmlentities($_GET['msg']).'[/b]
';
// preparo la query
$query = "SELECT id,nome,cognome FROM utenti";
// invio la query
$result = mysql_query($query);
// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
echo '<form name="form1" method="post" action="">
<table border="1">
<tr>
<th></th>
<th>Nome</th>
<th>Cognome</th>
<th></th>
</tr>';
while ($row = mysql_fetch_assoc($result))
{
$nome = htmlentities($row['nome']);
$cognome = htmlentities($row['cognome']);
// preparo il link per la modifica dei dati del record
$link = $_SERVER['PHP_SELF'].'?id=' . $row['id'];
echo "<tr>
<td><input name=\"id[]\" type=\"checkbox\" value=\"$row[id]\" /></td>
<td>$nome</td>
<td>$cognome</td>
<td><a href=\"$link\">elimina</a></td>
</tr>";
}
echo '</table>
<input type="submit" name="Submit" value="Elimina record selezionati" />
</form>';
// libero la memoria di PHP occupata dai record estratti con la SELECT
mysql_free_result($result);
// chiudo la connessione a MySQL
mysql_close();
}
function elimina_record($ids)
{
// verifico che almeno un id sia stato selezionato
if(count($ids) < 1)
{
$messaggio = urlencode("Nessun record selezionato!");
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
exit;
}
// per precauzione converto gli ID in interi
$ids = array_map('intval',$ids);
// creo una lista di ID per la query
$ids = implode(',',$ids);
// preparo la query
$query = "DELETE FROM utenti WHERE id IN ($ids)";
// invio la query
$result = mysql_query($query);
// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
// conto il numero di record cancellati
$num_record = mysql_affected_rows();
// chiudo la connessione a MySQL
mysql_close();
$messaggio = urlencode("Numero record cancellati: $num_record");
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
}
?>
Questa è la pagina sorella di quella sopra che dovrebbe mostrare i risultati della query spalmandoli su più pagine (ma non funziona
):
Codice PHP:
<?php
$DB_host = 'localhost';
$DB_user = 'root';
$DB_password = '';
$DB_name = 'users';
//Connetto al database
$link = mysql_connect($DB_host, $DB_user, $DB_password);
if (!$link) {
die ('Errore durante la connessione: ' . mysql_error());
}
$db_selected = mysql_select_db($DB_name, $link);
if (!$db_selected) {
die ("Errore durante la selezione del database: " . mysql_error());
}
if($_POST)
{
$ids = isset($_POST['id']) ? $_POST['id'] : array();
elimina_record($ids);
}
elseif(isset($_GET['id']))
{
elimina_record(array($_GET['id']));
}
else
mostra_lista();
function mostra_lista()
{
// mostro un eventuale messaggio
if(isset($_GET['msg']))
echo '[b]'.htmlentities($_GET['msg']).'[/b]
';
//---------------------------codice per elenco pagine
// esecuzione prima query
$count = mysql_query("SELECT COUNT(id) FROM utentii");
$res_count = mysql_fetch_row($count);
// numero totale di records
$tot_records = $res_count[0];
// risultati per pagina(secondo parametro di LIMIT)
$per_page = 2;
// numero totale di pagine
$tot_pages = ceil($tot_records / $per_page);
// pagina corrente
$current_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];
// primo parametro di LIMIT
$primo = ($current_page - 1) * $per_page;
//-------------------------------------------------
// preparo la query
$query = "SELECT id,nome,cognome FROM utenti LIMIT $primo, $per_page;";
// invio la query
$result = mysql_query($query);
// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
echo '
<form name="form1" method="post" action="">
<table border="1">
<tr>
<th></th>
<th>Nome</th>
<th>Cognome</th>
<th></th>
</tr>';
while ($row = mysql_fetch_assoc($result))
{
$nome = htmlentities($row['nome']);
$cognome = htmlentities($row['cognome']);
// preparo il link per la modifica dei dati del record
$link = $_SERVER['PHP_SELF'].'?id=' . $row['id'];
echo "<tr>
<td><input name=\"id[]\" type=\"checkbox\" value=\"$row[id]\" /></td>
<td>$nome</td>
<td>$cognome</td>
<td><a href=\"$link\">elimina</a></td>
</tr>";
}
echo '</table>
<input type="submit" name="Submit" value="Elimina record selezionati" />
</form>';
// libero la memoria di PHP occupata dai record estratti con la SELECT
mysql_free_result($result);
// chiudo la connessione a MySQL
mysql_close();
}
function elimina_record($ids)
{
// verifico che almeno un id sia stato selezionato
if(count($ids) < 1)
{
$messaggio = urlencode("Nessun record selezionato!");
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
exit;
}
// per precauzione converto gli ID in interi
$ids = array_map('intval',$ids);
// creo una lista di ID per la query
$ids = implode(',',$ids);
// preparo la query
$query = "DELETE FROM utenti WHERE id IN ($ids)";
// invio la query
$result = mysql_query($query);
// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
// conto il numero di record cancellati
$num_record = mysql_affected_rows();
// chiudo la connessione a MySQL
mysql_close();
$messaggio = urlencode("Numero record cancellati: $num_record");
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
}
// includiamo uno dei files contenenti la paginazione, commentate l'altro ovviamente
include("paginazione_2.php");
//inseriamo la paginazione
echo $paginazione;
?>
Mi potreste gentilmente aiutare?
Grazie mille in anticipo.