- Home
- Categorie
- Coding e Sistemistica
- PHP
- Recuperare tutti gli elementi con paging
-
Recuperare tutti gli elementi con paging
<? $sql = "SELECT * FROM files NE LEFT JOIN files_categorie NC ON NE.ID_categoria = NC.ID_categoria ORDER BY categoria, data DESC "; $rs = $db->Execute($sql); // Recupero tutti gli elementi senza paging if ( $rs->RecordCount() == 0 ) { ?>
Salve a tutti,
Ho un problema per la modifica di questa stringa e non solo, mi hanno chiesto di modificare uno script che archivia file pdf e li mostra in una pagina con categoria e come vedete sopra i file sono ordinate per categoria in ordine decrescente, tutti senza paging.
Io ho bisogno di poter specifiare il numero di categorie da mettere in modo che la lista si divida in più pagine.
Anche se non mi sono esperesso molto bene spero che qualcuno capisca il concetto....
Grazie in anticipo
-
Ciao Capitan_ e benvenuto sul forum GT,
purtroppo non hai fornito molte indicazioni... direi comunque di utilizzare una clausola del tipo:
**WHERE categoria=$categoria1 OR categoria=$categoria2
**Se ti occorre potresti passare le variabili $categoria mediante $_GET.
Se ci dai maggiori dettagli cerchiamo di aiutarti in modo più soddisfacente!
-
allora visto la mia poca esperienza... da quanto ho capito questo script prende i file da un file access? o sbaglio? comunque vi posto il codice sotto:
[php]<?php
}
else
{
$cat = "______";
while (!$rs->EOF)
{
$nRiga++;
$class = "";if ($rs->fields["ID_categoria"] != $cat) { $nRiga = 1; $cat = $rs->fields["ID_categoria"]; ?> <p><font color="#FF0000"><strong>:: <?= $rs->fields["categoria"] ?> </strong></font><br> <br> <? } if ($rs->fields["data"]."" != "0000-00-00 00:00:00") $data = $rs->fields["data"]; else $data = "-"; ?> <img src="imgs/pdf-icon.gif" width="16" height="16"> <a href="getProduct.php?i=<?= $rs->fields["ID_file"] ?>&check1=<?= md5($rs->fields["ID_file"]) ?>&check2=<?= md5($rs->fields["titolo"]) ?>"> <?= $rs->fields["titolo"] ?> </a><br> <br> <?php $rs->MoveNext(); } } ?>[/php]perchè la variabile WHERE non c'è io ho provato a leggermi qualcosa tipo:
http://forum.html.it/forum/showthread.php?s=&threadid=439411&perpage=15&highlight=&pagenumber=1
http://php.html.it/articoli/leggi/857/paginazione-di-dati/1/
ma non saprei come fare ad aplicarli perchè non riesco a capire come richiama la tabello questo script...
-
Come da regolamento ho dovuto eliminare i link attivi:
5.0. NON sono graditi link attivi specialmente a siti propri (salvo nelle Aree Annunci), anche quando approfondiscono l'argomento in modo unico ed originale.
In questi casi è consigliato riportare l'Url della risorsa **NON attivo.**Detto ciò, veniamo a noi: il codice che hai riportato nel post precedente è diverso da quello riportato nel post di apertura... nel post precedente utilizzi le classi: cerca nei file richiamati all'inizio dello script (con i comandi include o require probabilmente le query le trovi lì.Se sei poco avvezzo al php la modifica di una classe potrebbe risultarti un po' complicata, perché non provi a scegliere un'altra strada?
Ad esempio perché non entri nel merito del perché modificare il paging?
-
Prima cosa Mi scuso per i link diretti..
Comunque per me sbattere la testa è una cosa mi aiuta molto e poi pratica in tutto...
Però il paging bisogna farlo perchè diventerebbe una pagina troppo lunga dopo un pò di tempo con gli aggiornamenti...
tornando a noi i due codici che ho postato son attaccati nella pagina production.php
in includes.php
[PHP]<?
///
header("Content-type: text/html; charset=iso-8859-1");
//error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
error_reporting(E_ERROR | E_WARNING | E_PARSE );
ini_set ("display_errors", "1");
///require_once($_SERVER["DOCUMENT_ROOT"].'/include/parametri_globali.php');
require_once(DOCUMENT_ROOT.'include/functions.php');
require_once(DOCUMENT_ROOT.'include/class.phpmailer/class.phpmailer.php');
require_once(DOCUMENT_ROOT.'include/markdown.php');
require_once(DOCUMENT_ROOT.'private/common/funzioni_comuni.php');
require_once(DOCUMENT_ROOT.'private/common/adodb/adodb.inc.php');
require_once(DOCUMENT_ROOT.'private/common/class_form_validation.php');// Apro la connessione
$db = ADONewConnection('mysql'); # eg. 'mysql' or 'oci8'
$db->Connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$db->SetFetchMode(ADODB_FETCH_ASSOC);
?>[/PHP]
c'è questo....
-
Comunque per me sbattere la testa è una cosa mi aiuta molto
Non posso che straquotarti ed elogiarti per l'affermazione. Credo sia l'unico modo di imparare per bene un linguaggio di programmazione.Detto ciò, prova ad inserire tra le righe in rosso quella in verde:
ON NE.ID_categoria = NC.ID_categoria
WHERE NE.ID_categoria=1
**ORDER BY categoria, data DESC ";**ovviamente al posto di 1 metti una categoria che sei sicuro esista. Prova anche delle varianti analoghe: quello che cerchi, in prima battuta, è un elenco ridotto alla sola categoria 1.
-
Quindi inserendo:**
WHERE NE.ID_categoria=x
**pubblchiamo solo la categoria selezionata?Ho provato mettendo numeri o scheda_1 (ci sono 10 categorie in archivio) ma mi viene questo errore:
Fatal error: Call to a member function RecordCount() on a non-object in /products.php on line **82
**ora ho chiesto i dati per entrare nel pannello di contro dell'hosting per vedere nel db come li cataloga...
-
pubblchiamo solo la categoria selezionata?In teoria si... ovviamente senza gli estremi del problema, dare una soluzione esatta è difficile.
Cosa c'è alla riga 82 di products.php?
-
[php] if ( $rs->RecordCount() == 0 [/php]alla riga 82 di products.php c'è questo....
-
Prova a postare com'è fatto il database e un record di dati, vediamo di venirne a capo...:D
-
Ok ho avuto quello che volevo:
-- -- Struttura della tabella `files_categorie` -- CREATE TABLE `files_categorie` ( `ID_categoria` int(10) NOT NULL auto_increment, `categoria` varchar(150) NOT NULL default '', `in_homepage` tinyint(1) default '1', PRIMARY KEY (`ID_categoria`) ) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ; -- -- Dump dei dati per la tabella `files_categorie` -- INSERT INTO `files_categorie` (`ID_categoria`, `categoria`, `in_homepage`) VALUES (9, 'Dairy foodstuff', 1), (10, 'Sweets', 1), (11, 'Canned foodstuff', 1), (12, 'Pasta & Rice', 1), (13, 'Vegetables & Seafood in oil', 1), (14, 'Coffee & Coffee machines', 1), (15, 'Truffles', 1), (16, 'Fruits', 1), (17, 'Pork Salami range', 1), (18, 'Balsamic vinegar', 1); ```quindi si parte da 9 ? mmm... ma in hompage son tutte 1? :o
-
in_homepage ha il sapore di un flag... la selezione la devi effettuare sul campo ID_categoria. Prova a mettere:
WHERE NE.ID_categoria=9
sperando di ottenere Dairy foodstuff.
-
ehh no ho già provato a mettere i numeri dal 9 in su...
-
e cosa ti restituisce mettendo 9?
-
Fatal error: Call to a member function RecordCount() on a non-object in /products.php on line 82 ``` sempre questo
-
Leggendo la query nel primissimo post di questo thred, si può notare che i file pdf sono archiviati nella tabella files mentre in files_categorie c'è il tipo di file associato ad ogni categoria.
Pertanto sarebbe utile vedere un record di files non di files_categorie...
-
Allora dopo aver divorato una guida sulla programmazione php e dopo aver letto tutti gli script per fare il paging da una lista file dal db mysql ho cercato in tutti i modi ma ne sono venuto a capo solo staticamente...
ho incluso la clausola LIMIT e ho creato una seconda pagina products.php
ovvero:
nella pagina products.php ci sarà questo:
[php] $sql = "SELECT *
FROM files NE
LEFT JOIN files_categorie NC
ON NE.ID_categoria = NC.ID_categoria
ORDER BY categoria, data DESC
LIMIT 0, 9";[/php]e nella pagina products2.php ci sarà questo:
[php] $sql = "SELECT *
FROM files NE
LEFT JOIN files_categorie NC
ON NE.ID_categoria = NC.ID_categoria
ORDER BY categoria, data DESC
LIMIT 10, 18";[/php]e inserido i link manualmente a fondo lista.
Però ormai è una questione personale implementare il paging a questo scriptxxx
Intanto ti lascio questo per la tabella files:CREATE TABLE `files` ( `ID_file` int(10) unsigned NOT NULL auto_increment, `titolo` varchar(150) collate latin1_bin NOT NULL default '', `descrizione` text collate latin1_bin, `slug` varchar(150) collate latin1_bin default NULL, `data` date default NULL, `ID_categoria` int(10) NOT NULL default '0', `nome_file_effettivo` varchar(200) collate latin1_bin NOT NULL default '', `nome_file` varchar(200) collate latin1_bin NOT NULL default '', PRIMARY KEY (`ID_file`) ) ENGINE=MyISAM AUTO_INCREMENT=31 DEFAULT CHARSET=latin1 COLLATE=latin1_bin AUTO_INCREMENT=31 ; -- -- Dump dei dati per la tabella `files` -- INSERT INTO `files` (`ID_file`, `titolo`, `descrizione`, `slug`, `data`, `ID_categoria`, `nome_file_effettivo`, `nome_file`) VALUES (14, 0x224c6174204272692220636865657365, '', 0x5f4c61745f4272695f5f636865657365, '2007-09-07', 9, 0x4c61745f4272695f6269732e32303037313030325f3137333130352e706466, 0x4c617420427269206269732e706466), ```Giuro che se dovessi farlo da zero riuscire ad occhi chiusi :lol:ma implementarlo a questo strano e ripeto strano script mi stà risultando un pò difficile :cry: (contando la mia poca esperienza) in futuro mi ricorderò di questa situazione...:D
-
Cosa contiene il controllo if che inizia alla riga 82?
lasciando
WHERE NE.ID_categoria=9
prova a commentarlo/eliminarlo del tutto!Giuro che se dovessi farlo da zero riuscire ad occhi chiusi :ehehq:ma implementarlo a questo strano e ripeto strano script mi stà risultando un pò difficile (contando la mia poca esperienza) in futuro mi ricorderò di questa situazione...:D
E' un classico, mettere le mani su script complessi fatti da altri è notoriamente moooolto più difficile... :bho:
...ma più istruttivo!
-
82 if ( $rs->RecordCount() == 0 )
Ho certo questa funzione da tutte le parti da quanto ho capito e letto che "restituisce, all?interno di una variabile intera, il numero di record presenti in una tabella."
quindi non posso cencellarlo.. e se provo a mettere:
**WHERE NE.ID_categoria=9
**mi dà errore...Fatal error: Call to a member function RecordCount() on a non-object in /products.php on line **82
xx
**
-
la dovresti avere all'interno dei file inclusi:
function RecordCount()
comunque ti chiedevo di eliminare tutto il cilco if
if ( $rs->RecordCount() == 0 )
e riga/righe seguenti e vedere cosa restituisce