Visualizzazione risultati 1 fino 13 di 13

Discussione: Aiuto paginazione documento xml in php

  1. #1
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito Aiuto paginazione documento xml in php

    Salve,

    Sto facendo un sistema di paginazione per un Guestbook che archivia i dati in un documento xml, fino ad ora ho realizzato questo codice ( ho preso spunto da uno script su html.it ):
    Codice PHP:
    <?php
    echo "<ul id=\"s-nav\">";
    echo
    "<li onclick=\"document.location.href = 'index.php?page=newcomment';\">Firma il guesbook</li>";
    echo
    "</ul>";

    echo
    "<div id=\"content1\">";

    // Percorso archivio
    $filename = "Guestbook/message.xml";

    // Messaggi totoli
    $msg_tot = simplexml_load_file($filename);
    $msg_tot = count($msg_tot->msg);

    // Risutati per pagina
    $per_page = 4;

    // Numero totali di pagine
    $tot_pages = ceil($msg_tot / $per_page);

    // Pagina corrente
    $current_page = (!$_GET["n"]) ? 1 : (int)$_GET["n"];

    // Primo elemento in pagina
    $primo = ($current_page - 1) * $per_page;

    include(
    "paginazione.php");

    $dom = new DOMdocument("1.0", "ISO-8859-1");
    $dom->load($filename);
    $dom->formatOutput = true;
    $root = $dom->documentElement;
    $out = $root->getElementsByTagName("msg");

    for (
    $i = $primo; $i < $primo + $per_page; $i++)
    {
    // Estraggo il nodo <autore>
    $autore = $out($i)->getElementsByTagName("autore");
    $autore = $autore->item(0)->nodeValue;

    // Estraggo il nodo <data>
    $data = $out($i)->getElementsByTagName("data");
    $data = $data->item(0)->nodeValue;

    // Estraggo il nodo <ora>
    $ora = $out($i)->getElementsByTagName("ora");
    $ora = $ora->item(0)->nodeValue;

    // Estraggo il nodo <testo>
    $testo = $out($i)->getElementsByTagName("testo");
    $testo = $testo->item(0)->nodeValue;
    ?>
    <div class="panels">
    <div class="panels-title">
    <img src="image/lettera.gif" alt="post" /> Pubblicato da <strong><?php echo utf8_encode($autore); ?></strong> - <?php echo $data; ?>, <?php echo $ora; ?>
    </div>
    <div>
    <?php
    echo utf8_encode(nl2br($testo));
    ?>
    </div>
    </div>
    Non posto la pagina paginazione.php visto che non mi produce errore, e premetto anche che, in precedenza lo script mi funzionava, ma solamente ora mi restituisce queste due errori.
    Codice:
    Notice: Undefined index: n in /membri/sevenjeak/guestbook.php on line 22
    
    Fatal error: Function name must be a string in /membri/sevenjeak/guestbook.php on line 38
    Credo di aver modificato qualcosa per sbaglio.

    Cmq di cosa si tratta?
    Ultima modifica di sevenjeak : 31-03-2010 alle ore 19.38.08

    Sevenjeak
    Software developer and much more

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Sostituisci:
    Codice PHP:
    $current_page = (!$_GET["n"]) ? 1 : (int)$_GET["n"];
    In:
    Codice PHP:
    $current_page = !isset($_GET["n"]) ? 1 : (int)$_GET["n"];
    Poi:
    Codice PHP:
    $autore = $out($i)->getElementsByTagName("autore");
    In:
    Codice PHP:
    $autore = $out->item($i)->getElementsByTagName("autore");

  3. #3
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Il codice non da problemi, ma avendo 6 elementi in archivio, cioè 2 pagine, la seconda pagina mi viene visualizzata correttamente per poi ridarmi l'errore di prima, questo:
    Codice:
    Fatal error: Call to a member function getElementsByTagName() on a non-object in /membri/sevenjeak/Pc_tools_v1.0/guestbook.php on line 38

    Sevenjeak
    Software developer and much more

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Ok, devi controllare se quell'elemento esiste veramente:
    Codice PHP:
    for ($i = $primo; $i < $primo + $per_page; $i++)
    {
    if(!isset(
    $out->item($i))
    continue;
    // l'elemento non esiste, lo salto

    // Estraggo il nodo <autore>
    $autore = $out->item($i)->getElementsByTagName("autore");
    $autore = $autore->item(0)->nodeValue;

  5. #5
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Credo che nella tua if manchi una parentesi, cmq ora lo script non me lo visualizza, mi da semplicemente questo errore:
    Codice:
    Fatal error: Can't use method return value in write context in /membri/sevenjeak/Pc_tools_v1.0/guestbook.php on line 37
    Credo che non esiste, o mi sbaglio?
    Ultima modifica di sevenjeak : 01-04-2010 alle ore 00.05.44

    Sevenjeak
    Software developer and much more

  6. #6
    Guest

    Predefinito

    guarda se all'interno del xml c'è qualche errore .

  7. #7
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Come già detto nel primo post in precedenza lo script mi andava, ed il file xml non lo neanche toccato, vista che andava, ora non so come mai non mi funziona più, cmq ho controllato, nell'xml non c'è nessun errore
    Ultima modifica di sevenjeak : 01-04-2010 alle ore 11.22.32

    Sevenjeak
    Software developer and much more

  8. #8
    Guest

    Predefinito

    me la potresti fare vedere la sorgente php ora con tutte le modifiche che hai fatto?

  9. #9
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Ora il mio codice è questo:
    Codice PHP:
    <?php
    echo "<ul id=\"s-nav\">";
    echo
    "<li onclick=\"document.location.href = 'index.php?page=newcomment';\">Firma il guesbook</li>";
    echo
    "</ul>";

    echo
    "<div id=\"content1\">";

    // Percorso archivio
    $filename = "Guestbook/message.xml";

    // Messaggi totoli
    $msg_tot = simplexml_load_file($filename);
    $msg_tot = count($msg_tot->msg);

    // Risutati per pagina
    $per_page = 4;

    // Numero totali di pagine
    $tot_pages = ceil($msg_tot / $per_page);

    // Pagina corrente
    $current_page = !isset($_GET["n"]) ? 1 : (int)$_GET["n"];

    // Primo elemento in pagina
    $primo = ($current_page - 1) * $per_page;

    include(
    "Inc/paginazione.php");

    $dom = new DOMdocument("1.0", "ISO-8859-1");
    $dom->load($filename);
    $dom->formatOutput = true;
    $root = $dom->documentElement;
    $out = $root->getElementsByTagName("msg");

    for (
    $i = $primo; $i < $primo + $per_page; $i++)
    {
    if (!isset(
    $out->item($i))) {
    continue;
    }
    // Estraggo il nodo <autore>
    $autore = $out->item($i)->getElementsByTagName("autore");
    $autore = $autore->item(0)->nodeValue;

    // Estraggo il nodo <data>
    $data = $out->item($i)->getElementsByTagName("data");
    $data = $data->item(0)->nodeValue;

    // Estraggo il nodo <ora>
    $ora = $out->item($i)->getElementsByTagName("ora");
    $ora = $ora->item(0)->nodeValue;

    // Estraggo il nodo <testo>
    $testo = $out->item($i)->getElementsByTagName("testo");
    $testo = $testo->item(0)->nodeValue;
    ?>
    <div class="panels">
    <div class="panels-title">
    <img src="image/lettera.gif" alt="post" /> Pubblicato da <strong><?php echo utf8_encode($autore); ?></strong> - <?php echo $data; ?>, <?php echo $ora; ?>
    </div>
    <div>
    <?php
    echo utf8_encode(nl2br($testo));
    ?>
    </div>
    </div>
    <?php
    }
    ?>
    <div class="panels-normal">
    <?php
    echo "</div>";
    ?>
    </div>
    <br clear="all" />
    Rivedendo il codice credo che il problema sia nella condizione del for, nella seconda pagina, gli chiedo di eseguirmi il codice fino a quando $i < 5 + 4, ma quando $i arriva a 3, nella seconda pagina non trova nessun eremento, forse e per quel motivo che mi dice che l'elemento non esiste? se è veramente questo il problema come potrei modificare la condizione?

    P.S.: Se il problema è nella condizione potrei semplicemente utilizzare l'istruzione break per uscire dal ciclo, ma in alternativa come potrei modificare la condizione?
    Ultima modifica di sevenjeak : 01-04-2010 alle ore 11.41.10

    Sevenjeak
    Software developer and much more

  10. #10
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Allora prova così:
    Codice PHP:
    if(!$out->item($i))
    Se sei sicuro che oltre non ci sono altri elementi, puoi usare break.

  11. #11
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Infatti ora cosi funzione.

    Per evitare l'utilizzo del break o pensato solo ora di modificare il for cosi:
    Codice PHP:
    for ($i = $primo; $out->item($i); $i++)
    Cosi funziona perfettamente, ma secondo voi, funzionerà anche quando le pagina saranno più di due?

    Sevenjeak
    Software developer and much more

  12. #12
    Guest

    Predefinito

    a me funziona , però sarebbe sicuramente migliore fare pure una prova inserendo più nodi .

    Prova e fammi sapere

  13. #13
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Provando lo script modificando la condizione non funziona, invece, come diceva javascripter funziona con la condizione if, ora rimane solamente una cosa, come potrei sostituire la condizione in modo che funzioni senza utilizzare il break?

    Sevenjeak
    Software developer and much more

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •