interazione PHP Access con paginazione

ste80

Nuovo Utente
25 Feb 2012
38
0
6
40
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
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

ste80

Nuovo Utente
25 Feb 2012
38
0
6
40
Brescia
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...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

ste80

Nuovo Utente
25 Feb 2012
38
0
6
40
Brescia
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:
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
devi modificare anche mysql_num_rows() con la tua sintassi
PHP:
$rs->Fields->count;
 

ste80

Nuovo Utente
25 Feb 2012
38
0
6
40
Brescia
ok, domani provo con le modifiche che mi hai detto.
Ti saluto intanto, a domani:fonzie:
 

ste80

Nuovo Utente
25 Feb 2012
38
0
6
40
Brescia
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
Autore Titolo Forum Risposte Data
V Interazione tra PHP e MS Access, aggiungere WHERE condition PHP 2
N interazione php access PHP 0
A PROBLEMA INTERAZIONE PHP E JAVASCRIPT PHP 1
F Interazione tra i form html ajax e php PHP 3
S [PHP] Interazione tra due finestre. Come fare? PHP 4
Albertoesse Problemi Interazione tra PHP\JS\MYSQL PHP 3
X interazione javascript e php (aggirare limite) Javascript 2
G Snoopy e Php,tentativo di interazione con sito PHP 1
F Facebook ADS ... meglio impression o interazione con post? Facebook 1
A interazione su campo input dopo l'inserimento della prima lettera jQuery 2
V Interazione excel con pagina web HTML e CSS 1
MrClog interazione con VNC PHP 0
L Interazione Javascript con Java Javascript 0
Athene Interazione session_start() e array associativo PHP 5
Athene Interazione tra il foreach e una tabella html PHP 12
S bacheca interazione tra utenti stile facebook ... PHP 49
S Interazione solo tra utenti stile facebook PHP 44
M interazione database con google maps Javascript 0
emanuelevt interazione programmazione web .exe con laurea breve Discussioni Varie 5
F interazione database template system PHP 1
C [HELP] interazione flash e javascript Flash 0
S Semplice Javascript di interazione con iframe Javascript 1
M Interazione tra un più campi di un form con un solo campo di database - query mysql PHP 2
T Problema interazione flash-html Flash 0
P interazione in html HTML e CSS 2
C Problemi interazione javascript e flash Javascript 0
C Problemi interazione Flash-javascript!!!! Help! Flash 1
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1
E Barra di avanzamento codice PHP PHP 4
G creazione menu a tendina e invio a pagina php PHP 1
A inserire variabile php colore in div html PHP 2
Z Video protetto con PHP PHP 0
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
I Eecuzione di javascript in ciclo foreach php. PHP 7
S Libreria PHP per creare file dwg o dxf PHP 0
A [cerco - retribuito] Sviluppatore Php freelance per progetti vari Offerte e Richieste di Lavoro e/o Collaborazione 2

Discussioni simili