interazione PHP Access con paginazione

  • Creatore Discussione Creatore Discussione ste80
  • Data di inizio Data di inizio

ste80

Nuovo Utente
25 Feb 2012
38
0
6
44
Brescia
Buongiorno,
ho trovato un articolo che spiega come collegare php ad un database access.

Essendo che utilizzo per lavoro molti database in access ho sperimentato questo sistema e funziona alla perfezione, sia per visualizzazione, inserimento e modifica dati dal mio DB access.

L'unico problema, non da poco, che ho è l'impaginazione dei dati estratti.
Dalla tabella spese del mio file access estraggo tutti i record (SELECT * FROM spese) e voglio visualizzarne solo 20 record per pagina, insomma fare una sorta di paginazione come se fossero dati estratti da database mysql.

Ho provato tutti i modi per paginare ma non funziona nulla...

Vi posto anche parte di codice della mia index

PHP:
<?php
require_once("config.php");

$cn = new COM("ADODB.Connection");
$cnStr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".
            realpath(DBNAME).";";
$cn->open($cnStr);
$rs = $cn->execute("SELECT * FROM spese");
$numFields = $rs->Fields->count;

// Print HTML
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
echo '<html xmlns="http://www.w3.org/1999/xhtml">';
echo '<head>';
echo '<meta http-equiv="Content-Type" 
     content="text/html; charset=utf-8" />';
echo '<title>Inserimento Spese</title>';
echo '<link href="styles.css" rel="stylesheet" type="text/css" />';
echo '</head><body>';
echo '<h1>Inserimento '.DBTBL.'</h1>';

//Icona Inserimento
echo ("<p>[ <a href='?ins=1'>Inserimento</a> ]</p>");


// Modifica record 
if (!empty($_GET['id'])){
  $id = intval($_GET['id']);
  $rs = $cn->execute("SELECT * FROM ".DBTBL." WHERE ".PKNAME."=".$id);
  echo ("<form action='modify.php' method='post'>");
  echo ("<fieldset>");
  echo ("<legend>Modifica inserimento</legend>");
  for ($i=0;$i<$numFields;$i++){
    if (LINKPK && $i==PKCOL){
      echo ("<label for='".$rs->Fields($i)->name."'>"
             .$rs->Fields($i)->name."</label>");
      echo ("<input type='text' readonly='readonly' name='"
             .$rs->Fields($i)->name."' value=\""
             .$rs->Fields($i)->value."\" /><br />\n");      
    }
    else {
      echo ("<label for='".$rs->Fields($i)->name."'>"
             .$rs->Fields($i)->name."</label>");
      echo ("<input type='text' name='".$rs->Fields($i)->name."' value=\""
             .$rs->Fields($i)->value."\" /><br />\n");
    }
  }
  echo ("<button type='submit' name='azione' value='modifica'>Modifica/ritorna</button>");
  echo ("<button class='affiancato' type='submit' name='azione' value='cancella'>Cancella voce</button>");
  echo ("</fieldset></form>");
}

// Inserimento record -----
elseif (!empty($_GET['ins'])){
  echo ("<form action='modify.php' method='post'>");
  echo ("<fieldset>");
  echo ("<legend>Inserimento record</legend>");
  for ($i=0;$i<$numFields;$i++){
    if ($i!=PKCOL){
      echo ("<label for='".$rs->Fields($i)->name."'>"
             .$rs->Fields($i)->name."</label>");
      echo ("<input type='text' name='".$rs->Fields($i)->name."' /><br />\n");
    }
  }
  echo ("<button type='submit' name='azione' value='inserisci'>Inserisci</button>");
  echo ("</fieldset></form>");
}
echo '</body></html>';


// Elenca records -----
echo ("<table class='datatable' summary=''>");
echo("<caption>Tabella ".DBTBL."</caption>\n");


echo("<thead><tr>\n");
for ($i=0;$i<$numFields;$i++){
    echo("<th scope='col'>");
    echo $rs->Fields($i)->name;
    echo("</th>\n");
}
echo("</tr></thead>\n");
echo("<tbody>");


$alt = false;
while (!$rs->EOF)
{
    echo("<tr>");
    for ($i=0;$i<$numFields;$i++){
      $altClass = $alt ? " class='alt'" : "";
      if (LINKPK && $i==PKCOL){
        echo "<td".$altClass."><a href='?id=".$rs->Fields($i)->value
              ."'>".$rs->Fields($i)->value."</a></td>\n";
      }
      else{
        echo "<td".$altClass.">".$rs->Fields($i)->value."</td>\n";
      }
    }
    echo("</tr>\n");    
    $rs->MoveNext();
    $alt = !$alt;
}

echo("</tbody>");
echo("</table>\n");

$rs->Close();
$cn->Close();
?>

Come posso fare ad impaginare i dati estratti??? i sistemi di impaginazione che ci sono spiegati sul forum non funzionano...

P.S: Preferisco usare php rispetto ad ASP.

Grazie
Stefano
 
i sistemi di impaginazione che ci sono spiegati sul forum non funzionano...
Ciao, quali non funzionano? puoi indicarli?
Hai gia provato anche questo script
non far caso a come ho scritto sufficiente.. per ben due volte :book:
Alla fine o usi access o mysql la sintassi SQL è sempre la stessa
 
Ciao e intanto grazie per l'interessamento,

ho provato lo script che mi hai segnalato, l'errore lo da quando effetto il collegamento con il mio DB

PHP:
<?php
require_once("config.php");

$cn = new COM("ADODB.Connection");
$cnStr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".
            realpath(DBNAME).";";
$cn->open($cnStr);
$rs = $cn->execute("SELECT * FROM spese ORDER BY data DESC");
$numFields = $rs->Fields->count;

// imposto il limite di risultati per pagina 
$limite_pag = 10; 

// verifico che sia settata la pagina da visualizzare 
if (isset($_GET['num_pag'])) { 
    $num_pag = $_GET['num_pag']; 
} else { 
// altrimenti setto la prima pagina 
    $num_pag = 1; 
} 

// imposto il limite minimo da usare nella query 
if ($num_pag <= 1) { 
    $limite_min = 0; 
} else { 
    $limite_min = ($num_pag - 1) * $limite_pag; 
} 

// imposto il limite massimo sul quale finirà la ricerca 
$limite_max = $limite_min + $limite_pag; 

// interrogo il database per recuperare il numero totale di record 
$query = "SELECT * FROM spesa"; 
$res = mysql_query($query, $cnStr); 
$totali = mysql_num_rows($res); 

// interrogo il database per recuperare la lista dei record fornendo limite minimo e limite per pagina 
$query = "SELECT * FROM spesa LIMIT $limite_min,$limite_pag"; 
$res = mysql_query($query, $cnStr); 

// se il limite massimo supera i record totali lo fermo al numero di record totali 
if ($totali <= $limite_max) { 
    $limite_max = $totali; 
} 

// informo sulla ricerca 
echo"da "; 
echo $limite_min + 1; 
echo" a $limite_max risultati su $totali"; 
echo"<br/><br/>"; 

// recupero il numero di pagine totali 
$pagine = ceil($totali / $limite_pag); 

// creo dei pulsanti per andare avanti e indietro nelle pagine 
// pulsante indietro 
$indietro = $num_pag - 1; 
echo " <input "; 
if ($num_pag <= 1) 
    echo "disabled = 'disabled'"; 
// da cambiare la destinazione della location 
echo "class='min' type='button' onclick='javascript:location.href=\"paginazione.php?pag&num_pag=$indietro\"' value='<'/>&nbsp;"; 
$avanti = $num_pag + 1; 

// select con il numero di pagine 
// da cambiare la destinazione della location 
echo "<select onchange='javascript:location.href=\"paginazione.php?num_pag=\"+this.value+\"\"'>\n"; 
for ($i = 1; $i <= $pagine; $i++) { 
    echo "<option value='$i' "; 
    if ($i == $num_pag) 
        echo "selected='selected'"; 
    echo ">$i</option>\n"; 
} 
echo "</select>"; 

// pulsante avanti 
echo "&nbsp;<input "; 
if ($num_pag >= $pagine) 
    echo "disabled = 'disabled'"; 
// da cambiare la destinazione della location 
echo "class='min' type='button' onclick='javascript:location.href=\"paginazione.php?num_pag=$avanti\"' value='>'/>"; 

echo "&nbsp;&nbsp;Totale pagine $pagine"; 

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

// stampo i risultati 
for ($i = 0; $i < mysql_num_rows($res); $i++) { 
    $comune = mysql_result($res, $i, 'comune'); 
    echo $comune . "<br/>"; 
} 
if(mysql_num_rows($res) == 0) { 
    echo "Nessun risultato"; 
}

Io uso la variabile $cn per la connessione al DB invece di $conn dove ci specifico solo che uso "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=". realpath(DBNAME).";";
mi vengono restituiti gli errori:

Warning: mysql_query() expects parameter 2 to be resource, object given in C:\xampp\htdocs\prova\index.php on line 34

Warning: mysql_num_rows() expects parameter 1 to be resource, null given in C:\xampp\htdocs\prova\index.php on line 35

Warning: mysql_query() expects parameter 2 to be resource, object given in C:\xampp\htdocs\prova\index.php on line 39
da 1 a risultati su

Totale pagine 0


Warning: mysql_num_rows() expects parameter 1 to be resource, null given in C:\xampp\htdocs\prova\index.php on line 88

Warning: mysql_num_rows() expects parameter 1 to be resource, null given in C:\xampp\htdocs\prova\index.php on line 92
Nessun risultato

Non so come fare...
 
Il modo con cui ti connetti e con cui esegui le query non lo devi cambiare
a te interesano i parametri che poi andranno a completare la query
PHP:
// imposto il limite di risultati per pagina
$limite_pag = 20;

// verifico che sia settata la pagina da visualizzare
if (isset($_GET['num_pag'])) {
    $num_pag = $_GET['num_pag'];
} else {
// altrimenti setto la prima pagina
    $num_pag = 1;
}

// imposto il limite minimo da usare nella query
if ($num_pag <= 1) {
    $limite_min = 0;
} else {
    $limite_min = ($num_pag - 1) * $limite_pag;
}

// imposto il limite massimo sul quale finirà la ricerca
$limite_max = $limite_min + $limite_pag;
Se guardi lo script faccio 2 query : la prima ti da il totale dei risultati e la seconda
PHP:
$query = "SELECT * FROM listacomuni LIMIT $limite_min,$limite_pag";
ti restituisce i record da mostrare
 
ok le connessioni le ho tolte e gli errori sono solo questi
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prova\index.php on line 35
da 1 a risultati su

Totale pagine 0


Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prova\index.php on line 88

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prova\index.php on line 92
Nessun risultato

Le query sono due ok, ma l'errore melo da ugualmente:mad:
 
devi modificare anche mysql_num_rows() con la tua sintassi
PHP:
$rs->Fields->count;
 
ciao, ho fatto come detto, ti riposto la situazione interessata della mia index.

PHP:
<?php
require_once("config.php");

$cn = new COM("ADODB.Connection");
$cnStr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".
            realpath(DBNAME).";";
$cn->open($cnStr);
$rs = $cn->execute("SELECT * FROM spese ORDER BY data DESC");
$numFields = $rs->Fields->count;

// imposto il limite di risultati per pagina 
$limite_pag = 10; 

// verifico che sia settata la pagina da visualizzare 
if (isset($_GET['num_pag'])) { 
    $num_pag = $_GET['num_pag']; 
} else { 
// altrimenti setto la prima pagina 
    $num_pag = 1; 
} 

// imposto il limite minimo da usare nella query 
if ($num_pag <= 1) { 
    $limite_min = 0; 
} else { 
    $limite_min = ($num_pag - 1) * $limite_pag; 
} 

// imposto il limite massimo sul quale finirà la ricerca 
$limite_max = $limite_min + $limite_pag; 

// interrogo il database per recuperare il numero totale di record 
$query = "SELECT * FROM spesa";
$res = mysql_query($query);
$totali = $rs->Fields->count;

// interrogo il database per recuperare la lista dei record fornendo limite minimo e limite per pagina 
$query = "SELECT * FROM spesa LIMIT $limite_min , $limite_pag";
$res = mysql_query($query);

// se il limite massimo supera i record totali lo fermo al numero di record totali 
if ($totali <= $limite_max) { 
    $limite_max = $totali; 
} 

// informo sulla ricerca 
echo"da "; 
echo $limite_min + 1; 
echo" a $limite_max risultati su $totali"; 
echo"<br/><br/>"; 

// recupero il numero di pagine totali 
$pagine = ceil($totali / $limite_pag); 

// creo dei pulsanti per andare avanti e indietro nelle pagine 
// pulsante indietro 
$indietro = $num_pag - 1; 
echo " <input "; 
if ($num_pag <= 1) 
    echo "disabled = 'disabled'"; 
// da cambiare la destinazione della location 
echo "class='min' type='button' onclick='javascript:location.href=\"paginazione.php?pag&num_pag=$indietro\"' value='<'/>&nbsp;"; 
$avanti = $num_pag + 1; 

// select con il numero di pagine 
// da cambiare la destinazione della location 
echo "<select onchange='javascript:location.href=\"paginazione.php?num_pag=\"+this.value+\"\"'>\n"; 
for ($i = 1; $i <= $pagine; $i++) { 
    echo "<option value='$i' "; 
    if ($i == $num_pag) 
        echo "selected='selected'"; 
    echo ">$i</option>\n"; 
} 
echo "</select>"; 

// pulsante avanti 
echo "&nbsp;<input "; 
if ($num_pag >= $pagine) 
    echo "disabled = 'disabled'"; 
// da cambiare la destinazione della location 
echo "class='min' type='button' onclick='javascript:location.href=\"paginazione.php?num_pag=$avanti\"' value='>'/>"; 

echo "&nbsp;&nbsp;Totale pagine $pagine"; 

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

// stampo i risultati 
for ($i = 0; $i < $rs->Fields->count; $i++) { 
    $comune = mysql_result($res, $i, 'comune'); 
    echo $comune . "<br/>"; 
} 
if($numFields == 0) { 
    echo "Nessun risultato"; 
}  






// Print HTML
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
echo '<html xmlns="http://www.w3.org/1999/xhtml">';
echo '<head>';
echo '<meta http-equiv="Content-Type" 
     content="text/html; charset=utf-8" />';
echo '<title>Inserimento Spese</title>';
echo '<link href="styles.css" rel="stylesheet" type="text/css" />';
echo '</head><body>';
echo '<h1>Inserimento '.DBTBL.'</h1>';

//Icona Inserimento
echo ("<p>[ <a href='?ins=1'>Inserimento</a> ]</p>");


// Modifica record 
if (!empty($_GET['id'])){
  $id = intval($_GET['id']);
  $rs = $cn->execute("SELECT * FROM ".DBTBL." WHERE ".PKNAME."=".$id);
  echo ("<form action='modify.php' method='post'>");
  echo ("<fieldset>");
  echo ("<legend>Modifica inserimento</legend>");
  for ($i=0;$i<$numFields;$i++){
    if (LINKPK && $i==PKCOL){
      echo ("<label for='".$rs->Fields($i)->name."'>"
             .$rs->Fields($i)->name."</label>");
      echo ("<input type='text' readonly='readonly' name='"
             .$rs->Fields($i)->name."' value=\""
             .$rs->Fields($i)->value."\" /><br />\n");      
    }
    else {
      echo ("<label for='".$rs->Fields($i)->name."'>"
             .$rs->Fields($i)->name."</label>");
      echo ("<input type='text' name='".$rs->Fields($i)->name."' value=\""
             .$rs->Fields($i)->value."\" /><br />\n");
    }
  }
  echo ("<button type='submit' name='azione' value='modifica'>Modifica/ritorna</button>");
  echo ("<button class='affiancato' type='submit' name='azione' value='cancella'>Cancella voce</button>");
  echo ("</fieldset></form>");
}
// Inserimento record -----
elseif (!empty($_GET['ins'])){
  echo ("<form action='modify.php' method='post'>");
  echo ("<fieldset>");
  echo ("<legend>Inserimento record</legend>");
  for ($i=0;$i<$numFields;$i++){
    if ($i!=PKCOL){
      echo ("<label for='".$rs->Fields($i)->name."'>"
             .$rs->Fields($i)->name."</label>");
      echo ("<input type='text' name='".$rs->Fields($i)->name."' /><br />\n");
    }
  }
  echo ("<button type='submit' name='azione' value='inserisci'>Inserisci</button>");
  echo ("</fieldset></form>");
}
echo '</body></html>';


// Elenca records -----
echo ("<table class='datatable' summary=''>");
echo("<caption>Tabella ".DBTBL."</caption>\n");


echo("<thead><tr>\n");
for ($i=0;$i<$numFields;$i++){
    echo("<th scope='col'>");
    echo $rs->Fields($i)->name;
    echo("</th>\n");
}
echo("</tr></thead>\n");
echo("<tbody>");


$alt = false;
while (!$rs->EOF)
{
    echo("<tr>");
    for ($i=0;$i<$numFields;$i++){
      $altClass = $alt ? " class='alt'" : "";
      if (LINKPK && $i==PKCOL){
        echo "<td".$altClass."><a href='?id=".$rs->Fields($i)->value
              ."'>".$rs->Fields($i)->value."</a></td>\n";
      }
      else{
        echo "<td".$altClass.">".$rs->Fields($i)->value."</td>\n";
      }
    }
    echo("</tr>\n");    
    $rs->MoveNext();
    $alt = !$alt;
}

echo("</tbody>");
echo("</table>\n");

$rs->Close();
$cn->Close();
?>

gli errori della mysql_num_rows() sono risolti, adesso ho questi warning

da 1 a 7 risultati su 7

Totale pagine 1


Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prova\index.php on line 89


Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prova\index.php on line 89


Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prova\index.php on line 89


Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prova\index.php on line 89


Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prova\index.php on line 89


Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prova\index.php on line 89


Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prova\index.php on line 89

le pagine non esistono ancora perchè ho 21 record se ne dovrei visualizzare 10 per pagina dovrei avere 3 pagine... hai qualche suggerimento
 

Discussioni simili