• User

    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....:vai:
    Grazie in anticipo :figo:


  • User Attivo

    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!
    :ciauz:


  • User

    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...


  • User Attivo

    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?
    :ciauz:


  • User

    Prima cosa Mi scuso per i link diretti.. 🙂
    Comunque per me sbattere la testa è una cosa mi aiuta molto e poi pratica in tutto...:vaiii:
    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....


  • User Attivo

    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.


  • User

    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...


  • User Attivo

    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?


  • User

    [php] if ( $rs->RecordCount() == 0 [/php]alla riga 82 di products.php c'è questo....


  • User Attivo

    Prova a postare com'è fatto il database e un record di dati, vediamo di venirne a capo...:D


  • User

    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

  • User Attivo

    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.


  • User

    ehh no ho già provato a mettere i numeri dal 9 in su... :mmm:


  • User Attivo

    e cosa ti restituisce mettendo 9?


  • User
    Fatal error:  Call to a member function RecordCount() on a non-object in /products.php on line 82
    ``` sempre questo

  • User Attivo

    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...
    :ciauz:


  • User

    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 script❌x❌x❌x
    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

  • User Attivo

    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!


  • User

    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
    ❌x❌x
    **


  • User Attivo

    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