- Home
- Categorie
- Coding e Sistemistica
- Coding
- php e access - paginazione dati
-
php e access - paginazione dati
Ho questa pagina che mi fa una query:
[php]
<?php
$odbc_dns = "db_forum";
$odbc_userid = "";
$odbc_password = "";$query = "SELECT ID,Titolo
FROM Forum";if ( !( $odbc_db = odbc_connect($odbc_dns, $odbc_userid, $odbc_password) ) )
die("Could not connect to ODBC data source $odbc_dns");if ( !( $odbc_rs = odbc_do($odbc_db, $query) ) )
die("Error executing query $query");$num_cols = odbc_num_fields($odbc_rs);
if ($num_cols < 1)
die("Query retured an empty set");echo "<TABLE>";
echo("<TR>");
for($a = 1; $a <= $num_cols; $a++)
{
echo "<TH><B>
<font face='Arno Pro Light Display' size='5'>";
echo odbc_field_name($odbc_rs, $a);
echo "</TH></B></font>";
}
echo "</TR>";while( odbc_fetch_row($odbc_rs) )
{
echo "<TR>";
for($a = 1; $a <= $num_cols; $a++)
{
echo "<TD>
<font face='Arno Pro Light Display' size='4'>";
echo odbc_result($odbc_rs, $a);
echo "</TD>";
}
echo "<TD><input type='radio' name=titoloforum value=".odbc_result($odbc_rs, "Id")."></TD></TR>";
}echo "</TABLE>";
?> [/php]Vorrei mettere i risultati di questa query in più pagine se nella tabella c sn più di un certo numero di valori. Come devo modificare questa pagina?
Grazie mille.
-
Visto che usi Access non puoi usare LIMIT come in MySQL.
Prova in questo modo:[php]
$num_of_val = 10;
$start_val = 4;
$query = "SELECT TOP $num_of_val ID, Titolo FROM Forum
WHERE (((ID) NOT IN (SELECT TOP $start_val ID FROM Forum ORDER BY ID)))
ORDER BY ID";
[/php]La query dovrebbe ritornare 10 ($num_of_val) valori partendo dal 5 ($start_val + 1) record.
Il valore di partenza ($start_val) può essere passato di pagina in pagina attraverso un GET oppure variabili di sessione.Ciao!
-
Non ho capito solo una cosa : per ogni pagina che mi serve devo fare una pagina php???
Se io per esempio ho 40 records nella tabella e voglio che in ogni pagina me ne vengano visualizzati 10, devo fare 4 pagine php diverse???
-
No, utilizzi sempre la stessa pagina per visualizzare i dati.
Se per esempio hai la pagina "demo.php" fatta in questo modo:[php]
$p = @$_GET["p"];
//...
$num_of_val = 10;
$start_val = $p - 1;
$query = "SELECT TOP $num_of_val ID, Titolo FROM Forum
WHERE (((ID) NOT IN (SELECT TOP $start_val ID FROM Forum ORDER BY ID)))
ORDER BY ID";
//...
$next_link = $p + $num_of_val
echo "<a href="demo.php?p=$next_link">Prossima pagina</a>";
[/php]Verranno fuori link del tipo:
demo.php?p=5
demo.php?p=15
demo.php?p=25P.S: Non utilizzare abbreviazioni like SMS nei post.
-
Scusa la mia ignoranza, ma potresti aggiungermi il codice che mi hai consigliato nel codice che avevo inserito io prima??? Perchè mi perdo proprio... sono alle prime armi e quindi non so dove mettere mano.
Grazie mille per la disponibilità.
-
Così:
[php]
<?php
$p = @$_GET["p"];if(($p == "")||($p <= 0))
$p = 1;$odbc_dns = "db_forum";
$odbc_userid = "";
$odbc_password = "";$num_of_val = 10;
$start_val = $p - 1;
$query = "SELECT TOP $num_of_val ID, Titolo FROM Forum
WHERE (((ID) NOT IN (SELECT TOP $start_val ID FROM Forum ORDER BY ID)))
ORDER BY ID";if ( !( $odbc_db = odbc_connect($odbc_dns, $odbc_userid, $odbc_password) ) )
die("Could not connect to ODBC data source $odbc_dns");if ( !( $odbc_rs = odbc_do($odbc_db, $query) ) )
die("Error executing query $query");$num_cols = odbc_num_fields($odbc_rs);
if ($num_cols < 1)
die("Query retured an empty set");echo "<TABLE>";
echo("<TR>");
for($a = 1; $a <= $num_cols; $a++)
{
echo "<TH><B>
<font face='Arno Pro Light Display' size='5'>";
echo odbc_field_name($odbc_rs, $a);
echo "</TH></B></font>";
}
echo "</TR>";while( odbc_fetch_row($odbc_rs) )
{
echo "<TR>";
for($a = 1; $a <= $num_cols; $a++)
{
echo "<TD>
<font face='Arno Pro Light Display' size='4'>";
echo odbc_result($odbc_rs, $a);
echo "</TD>";
}
echo "<TD><input type='radio' name=titoloforum value=".odbc_result($odbc_rs, "Id")."></TD></TR>";
}echo "</TABLE>";
$next_link = $p + $num_of_val
echo "<br><br><a href="NOME_PAGINA.php?p=$next_link">Record Successivi</a>";?>
[/php]
-
Purtroppo mi da quest'errore:
Parse error: parse error, unexpected T_ECHO in c:\programmi\easyphp1-7\www\mancini3_private\elencoforum.php on line **71
**Un'altra cosa: da questa pagina,_tramite un form mi dovrebbe andare ad un'altra pagina.
<a href="NOME_PAGINA.php?p=$next_link">Record Successivi</a>";
Che è??? Al posto di nome pagina che dovrei inserire???_Questa è tutta la pagina per intero:[php]
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
</head><body background="../images/sfondo.jpg">
<p align="right">
<font face="Arno Pro Light Display" size="3"><a href="logout.php">Logout</a></font></p>
<p align="center">
<img border="0" src="../images/ForumSystem.gif" width="700" height="150"></p><p><font size="6" face="Algerian">ELENCO FORUM</font></p>
<form action="elencodiscussioni.php" method="post">
<?php
$p = @$_GET["p"];if(($p == "")||($p <= 0))
$p = 1;$odbc_dns = "db_forum";
$odbc_userid = "";
$odbc_password = "";$num_of_val = 10;
$start_val = $p - 1;
$query = "SELECT TOP $num_of_val ID, Titolo FROM Forum
WHERE (((ID) NOT IN (SELECT TOP $start_val ID FROM Forum ORDER BY ID)))
ORDER BY ID";if ( !( $odbc_db = odbc_connect($odbc_dns, $odbc_userid, $odbc_password) ) )
die("Could not connect to ODBC data source $odbc_dns");if ( !( $odbc_rs = odbc_do($odbc_db, $query) ) )
die("Error executing query $query");$num_cols = odbc_num_fields($odbc_rs);
if ($num_cols < 1)
die("Query retured an empty set");echo "<TABLE>";
echo("<TR>");
for($a = 1; $a <= $num_cols; $a++)
{
echo "<TH><B>
<font face='Arno Pro Light Display' size='5'>";
echo odbc_field_name($odbc_rs, $a);
echo "</TH></B></font>";
}
echo "</TR>";while( odbc_fetch_row($odbc_rs) )
{
echo "<TR>";
for($a = 1; $a <= $num_cols; $a++)
{
echo "<TD>
<font face='Arno Pro Light Display' size='4'>";
echo odbc_result($odbc_rs, $a);
echo "</TD>";
}
echo "<TD><input type='radio' name=titoloforum value=".odbc_result($odbc_rs, "Id")."></TD></TR>";
}echo "</TABLE>";
$next_link = $p + $num_of_val
echo "<br><br><a href="NOME_PAGINA.php?p=$next_link">Record Successivi</a>";?>
<input type="submit" name="submit" value="Continua"> </td>
<td width="307">
</tr>
</table></form><p align="center"><a href="menuamministratore.php">
<font size="3" face="Arno Pro Light Display"><strong>Menù Amministratore</strong></font></a></p><p align="center"><a href="gestioneforum.php">
<font size="3" face="Arno Pro Light Display"><strong>Indietro</strong></font></a></p></body>
</html>
[/php]
-
Per l'errore, nella linea 70 ho dimenticato ;
Metti:$next_link = $p + $num_of_val;
Invece, NOME_PAGINA.php va stostituito col vero nome del file che contiene il codice php che, visto dal messaggio di errore, si chiama elencoforum.php
echo "<br><br><a href="elencoforum.php?p=$next_link">Record Successivi</a>"
-
L'ho modificata come mi hai detto tu ma mi esce questo errore:
Warning: odbc_do(): SQL error: [Microsoft][Driver ODBC Microsoft Access] Errore di sintassi. nell'espressione della query '(((ID) NOT IN (SELECT TOP 0 ID FROM Forum ORDER BY ID)))'., SQL state 37000 in SQLExecDirect in c:\programmi\easyphp1-7\www\mancini3_private\elencoforum.php on line 35
Error executing query SELECT TOP 10 ID, Titolo FROM Forum WHERE (((ID) NOT IN (SELECT TOP 0 ID FROM Forum ORDER BY ID))) ORDER BY ID
-
Non si può fare SELECT TOP 0 ..., puoi farlo partire da 1 in poi.
Per i primi 10 risultati basta solo la querySELECT TOP 10 ID, Titolo FROM Forum
Modifica il codice in questo modo:
[php]
$num_of_val = 10;if(($p == "")||($p <= 0))
{
$query = "SELECT TOP $num_of_val ID, Titolo FROM Forum";
$p = 1;
}
else
{
$start_val = $p - 1;
$query = "SELECT TOP $num_of_val ID, Titolo FROM Forum
WHERE (((ID) NOT IN (SELECT TOP $start_val ID FROM Forum ORDER BY ID)))
ORDER BY ID";
}
[/php]
-
Se tolgo lo 0 mi funziona ma non mi prende il primo valore della tabella...
-
Non funziona la modifica che ti ho proposto?
-
Risolto... grazie mille... ho anche modificato la pagina inserendo anche la pagina precedente...
Grazie mille della disponibilità...
-
Un'altra domanda... è giusta come sintassi questa query???
[php]
$query = "SELECT TOP $num_of_val ID, Titolo
FROM Discussione
WHERE (((ID) NOT IN (SELECT TOP $start_val ID FROM Forum ORDER BY ID))) AND
ID_Forum = " . $titoloforum . "
[/php]E' lo stesso problema di prima,solo che quando clicco su pagina precedente o successiva mi da errore perchè non mi prende il valore $titoloforum.
-
Convertila in questo modo, utilizzando gli apici per contenere il valore:
[php]
$query = "SELECT TOP $num_of_val ID, Titolo
FROM Discussione
WHERE (((ID) NOT IN (SELECT TOP $start_val ID FROM Forum ORDER BY ID))) AND
ID_Forum = '" . $titoloforum . "'";
[/php]
-
Se la converto come mi hai consigliato mi esce errore, mentre se la lascio come avevo scritto in precedenza quando clicco su pagina successiva mi ritorna quest'errore:
Notice: Undefined index: titoloforum in c:\programmi\easyphp1-7\www\mancini3_private\elencodiscussioni.php on line 24
Warning: odbc_do(): SQL error: [Microsoft][Driver ODBC Microsoft Access] Errore di sintassi (operatore mancante) nell'espressione della query '(((ID) NOT IN (SELECT TOP 11 ID FROM Forum ORDER BY ID))) AND ID_Forum ='., SQL state 37000 in SQLExecDirect in c:\programmi\easyphp1-7\www\mancini3_private\elencodiscussioni.php on line 42
Error executing query SELECT TOP 10 ID, Titolo FROM Discussione WHERE (((ID) NOT IN (SELECT TOP 11 ID FROM Forum ORDER BY ID))) AND ID_Forum = ORDER BY ID
-
Dall'errore si vede che $titoloforum non è stato definito, quindi contine un valore vuoto e non è possibile fare una query sul nulla se non usi apici.
Questo è un errore: ... AND ID_Forum = ORDER BY ID
che dovrebbe essere riscritto in questo modo ... AND ID_Forum = ' ' ORDER BY ID.Controlla bene dove viene definita $titoloforum, cioè dove c'è l'assegnazione del valore:
$titoloforum = ... ;
-
Questo è il codice della mia pagina, quando clicco su precedente o successiva mi da quell'errore...
[php]
<?php$odbc_dns = "db_forum";
$odbc_userid = "";
$odbc_password = "";$titoloforum = $HTTP_POST_VARS["titoloforum"];
$p = @$_GET["p"];
if(($p == "")||($p <= 0))
$p = 1;$num_of_val = 10;
$start_val = $p;
$query = "SELECT TOP $num_of_val ID, Titolo
FROM Discussione
WHERE (((ID) NOT IN (SELECT TOP $start_val ID FROM Forum ORDER BY ID))) AND
ID_Forum = " . $titoloforum . "
ORDER BY ID";if ( !( $odbc_db = odbc_connect($odbc_dns, $odbc_userid, $odbc_password) ) )
die("Could not connect to ODBC data source $odbc_dns");if ( !( $odbc_rs = odbc_do($odbc_db, $query) ) )
die("Error executing query $query");$num_cols = odbc_num_fields($odbc_rs);
if ($num_cols < 1)
die("Query retured an empty set");echo "<TABLE>";
echo("<TR>");
for($a = 1; $a <= $num_cols; $a++)
{
echo "<TH><B>
<font face='Arno Pro Light Display' size='5'>";
echo odbc_field_name($odbc_rs, $a);
echo "</TH></B></font>";
}
echo "</TR>";while( odbc_fetch_row($odbc_rs) )
{
echo "<TR>";
for($a = 1; $a <= $num_cols; $a++)
{
echo "<TD>
<font face='Arno Pro Light Display' size='4'>";
echo odbc_result($odbc_rs, $a);
echo "</TD>";
}
echo "<TD><input type='radio' name='titolodiscussione' value=".odbc_result($odbc_rs, "Id")."></TD></TR>";
}echo "</TABLE>";
$next_link_prec = $p - $num_of_val;
echo "<br><br><a href="elencodiscussioni.php?p=$next_link_prec">Pagina Precedente</a>";$next_link_succ = $p + $num_of_val;
echo "<br><br><a href="elencodiscussioni.php?p=$next_link_succ">Pagina Successiva</a>";?>
[/php]
-
Sostituisci
$titoloforum = $HTTP_POST_VARS["titoloforum"];
con
$titoloforum = $_POST["titoloforum"];
-
Niente,_mi da lo stesso errore.