Visualizzazione dei risultati da 1 a 8 su 8

Discussione: guestbook reverse msg

  1. #1

    guestbook reverse msg

    obiettivo: far apparire i messaggi dall'ultimo al primo.

    scrivo su un txt poi divido i msg leggendo l'elemento separatore, che nel mio caso è "§".

    non riesco a creare un array che legga la sequenza dei msg e li ordini al contrario (rsort)

    il mio script attuale fa apparire i messaggi dal primo all'ultimo:

    <?php
    print ("<form name=\"form1\" method=\"post\" action=\"guestbook.php\">
    <div align=\"center\"><table width =\"400\" border=\"0\" class=\"testo\" cellpadding=\"0\">
    <tr><td valign=\"top\">nome: </td>
    <td><input type=\"text\" name=\"nome\" size=\"25\"></td></tr>
    <tr><td valign=\"top\">testo: </td>
    <td><textarea name=\"dimmi\" cols=\"40\" rows=\"5\"></textarea></td></tr>
    <tr><td valign=\"top\"></td>
    <td><input name=\"invia\" type=\"submit\" value=\"scrivi\"></td></tr>
    </table></div>
    </form>");

    if (isset ($_POST['nome']) && isset ($_POST['dimmi'])) {

    $nome = $_POST['nome'];
    $dimmi = $_POST['dimmi'];

    $nome = stripslashes($nome);
    $dimmi = stripslashes($dimmi);

    if ($nome == "" || $dimmi == "") {
    print ("<div align=\"center\"><table width =\"400\" border=\"0\" class=\"testo\" cellpadding=\"0\">
    <tr><td>Inserisci nome e messaggio

    </td></tr>
    </table></div>");
    } else {

    $fd = fopen('public/guest.txt', 'a');

    $str = sprintf('%s: %s§', $nome, $dimmi);

    $scrivi = fwrite ($fd, $str);

    fclose ($fd);
    }
    }

    $fd = fopen ('public/guest.txt', 'r');
    $check = fread ($fd, 80000);
    $dividi = strtok ($check, "§");

    while ($dividi) {
    print ("<div align=\"center\"><table width =\"400\" border=\"0\" class=\"testo\" cellpadding=\"0\">
    <tr><td>$dividi

    </td></tr>
    </table></div>");
    $dividi = strtok ("§");
    }

    ?>

    qualcuno mi può aiutare???

    GRAZIE

    PS [ne approfitto anche per chiedervi come si fa nel momento in cui uno posta un messaggio a ricaricare la pagina con le variabili "vuote" in modo che se aggiorna la pagina non posta di nuovo lo stesso messaggio???] grazie ancora!

  2. #2
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    per la prima parte: se fosse in un db sarebbe moolto più semplice (per me)...

    per la seconda parte:

    dopo che hai inserito il messaggio nel .txt metti:

    codice:
    unset($_POST, $_GET)
    Cosi svuota le variabili.
    alcool: la causa e la soluzione di tutti i problemi

  3. #3
    Grazie Gumble!!!

    certo se fosse un db nn avrei problemi... ma ho uno spazio web senza db... perciò mi devo arrangiare con un txt... eheheh

  4. #4
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    eccoti qua.. per stampare i messaggi al contrario alla lettura li metto in un array. poi giro semplicemente l'array con la funzione array_reverse(); e infine stampo ogni elemento dell'array girato...

    spero ti aggradi:

    <?php
    print ("<form name=\"form1\" method=\"post\" action=\"guestbook.php\">
    <div align=\"center\"><table width =\"400\" border=\"0\" class=\"testo\" cellpadding=\"0\">
    <tr><td valign=\"top\">nome: </td>
    <td><input type=\"text\" name=\"nome\" size=\"25\"></td></tr>
    <tr><td valign=\"top\">testo: </td>
    <td><textarea name=\"dimmi\" cols=\"40\" rows=\"5\"></textarea></td></tr>
    <tr><td valign=\"top\"></td>
    <td><input name=\"invia\" type=\"submit\" value=\"scrivi\"></td></tr>
    </table></div>
    </form>");

    if (isset ($_POST['nome']) && isset ($_POST['dimmi'])) {

    $nome = $_POST['nome'];
    $dimmi = $_POST['dimmi'];

    $nome = stripslashes($nome);
    $dimmi = stripslashes($dimmi);

    if ($nome == "" || $dimmi == "") {
    print ("<div align=\"center\"><table width =\"400\" border=\"0\" class=\"testo\" cellpadding=\"0\">
    <tr><td>Inserisci nome e messaggio

    </td></tr>
    </table></div>");
    } else {

    $fd = fopen('public/guest.txt', 'a');

    $str = sprintf('%s: %s§', $nome, $dimmi);

    $scrivi = fwrite ($fd, $str);

    fclose ($fd);
    }
    }

    $fd = fopen ('public/guest.txt', 'r');
    $check = fread ($fd, 80000);
    $dividi = strtok ($check, "§");
    //definisco l'array vuoto e il contatore (solo per indicazione.. non é necessario)
    $aGuest = array();
    $id = 1;
    while ($dividi) {
    //inserisco il commento nell'array
    $aItem = array('id' => $id, 'testo' => $dividi);
    $aGuest[] = $aItem;
    $id++;
    $dividi = strtok ("§");
    }
    //giro l'array
    $aGuest_girato = array_reverse($aGuest);
    //stampo gli elementi al contrario
    foreach($aGuest_girato as $item) {
    echo $item['id'];
    echo "
    ";
    echo $item['testo'];
    echo "<hr>";
    }
    ?>
    alcool: la causa e la soluzione di tutti i problemi

  5. #5
    grazie gumble!
    ora provo e ti faccio sapere come finisce!!!!

  6. #6
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217
    posso dare un consiglio?
    xkè non inserisci i vari msg su righe differenti...

    così prendi il file con la funzione file che già ti mette tutti i singoli messaggi come elementi di un array... scorri tale array al contrario (anke semplicemente con una for) e solo allora ti analizzi i vari campi...

    altro metodo ancora potrebbe essere salvare un array su file:

    Codice PHP:
    <?
    return array(
     array(
    'nome del tizio','questo è il primo msg'),
     array(
    'nome del tizio','questo è il secondo msg'),
     array(
    'nome del tizio','questo è il terzo msg'),
    );

    ?>
    nella tua pagina di lettura lo spari in una variabile con require_once ed il gioco è fatto hai un array già popolato e correttamente parsato dei vari campi.. lo puoi trattare come un recordset.. come una chiamata al db in ciu ogni record qui è un array elemento di un array... non è difficile se ci si pensa

    ultimo suggerimento potresti salvare anke un timestamp ed usarlo come indice dell'array per l'ordinamento.. devi fare solo attenzione alle collisioni

    lungi dall'essere esaustivo, volevo solo proporre degli spunti..

    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  7. #7
    sei un mito!
    grazie 1000! ora funziona tutto!!!
    machas gracias!!!!!!

  8. #8
    grazie luke83... mi sa che tu sei un po' più avanti di me... ho dovuto leggere due volte per capire cosa dovevo fare! ehehe
    magari le tue proposte le userò quando avrò un pelo più di tempo perché ora mi serviva risolvere la cosa in fretta!!!
    thanx!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.