Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2019
    Messaggi
    30

    Ordinamento record in guestbook senza database

    Buonasera,


    Sto prnado ad integrare una sorte di guestbook, che poi non sarò tale ma servirà soltanto all'inserimento di notizie su uyna pagina di una intranet, che sfrutta un foglio txt invece di un database.


    Lo script che ho usato funzionba tutto, ma non riesco ad avre i record inseriti in con un ordine inverso a quello di inserimento, cioè i nuovi messaggi sopra e poi via discorrendo, ma mi vengono sempre elencati a partire dal primo.


    Credo di aver capito che il parametro che va influire su questo sia quello presente nella seguente riga


    $fp = fopen($file,"a");


    presente nella pagina che processa i messaggi inseriti, ma non riesco a venirne a capo.


    O potrebbe essere il modo in cui viene scritto il file txt che uso come db, che aggiunge le righe alla fine del file e magari potrebbe essere una soluzione quella di insierle all'inizio.


    Comunque per infoirmazione questi sono i due codici che utilizzo.


    Nella pagine index


    codice:
    <?php
    $file = "guestbook.txt";
    
    
    if (fopen($file, "r")) {
    $fil = "guestbook.txt";
    $fo = fopen ($fil, "r");
    $con = fread ($fo,filesize ($fil));
    fclose ($fo);
    echo "$con";
    } else {
    echo "<h3>Sorry there was an error please contact us now<h3>";
    }
    ?>
    in quella di inserimento dei messaggi


    codice:
    <form method="post" action="addguestbook.php">
    <div align="center"></div>
    <div align="center"></div>
    <div align="center" class="style1"></div>
    <div align="center"><span class="style1">Name:</span><br />
      <input name="name" type="text" size="30" maxlength="40" />
      <br />
    <br />
    <span class="style1">Message:</span><br />
    <textarea name="msg" cols="22" rows="6"></textarea>
    <br />
    <br />
    <input type="reset" value="Reset" />
    &nbsp;
    <input type="submit" value="Send" />
    </div>
    e questa è quella che mi processa i messaggi e mi reindirizza all'index


    codice:
    <?php
    $file           = "guestbook.txt";
    $name       = $_POST['name'];
    $msg        = $_POST['msg'];
    $msg  = stripslashes($msg);
    $name = stripslashes($name);
    $msg = str_replace ("<","&lt;",$msg);
    $msg = str_replace ("\n","<br>",$msg);
    $name = str_replace ("<","&lt;",$name);
    $name = str_replace ("\n","<br>",$name);
    
    
    if(empty($name) || empty($msg)) {
        echo "<h3>Sorry all fields are required</h3>";
    } else {
    
    
    $fp = fopen($file,"a");
    
    
    fwrite($fp, '
    <font size="3">
    <BR>
    <b>'.$name.'</b><BR>
    '.$msg.'<BR>
    ');
    
    
    fclose($fp);
    
    
    echo '<font size="3"><p align="center">Thank you '.$name.' for singing my guestbook</p></font>'; 
    }
    Grazie mille come sempre.

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Aprendo il file in modalità "append" (a) è ovvio che avrai i messaggi nuovi alla fine del file. E non puoi far altro, perchè oltre ad append hai solo la modalità "w", che sovrascrive il file.
    Se ti accontenti ordinarli da più nuovo al più vecchio devi
    1- Salvati i dati vecchi
    2- Salvare il messaggio nuovo e poi i dati vecchi.

    Se usi la file_get_contents/file_put_contents è più semplice:
    Codice PHP:
    index

    <?php
    $file 
    "guestbook.txt";

    ...
    echo 
    file_get_contents($file);
    ?>
    Salvataggio:
    Codice PHP:
    <?php

    $file 
    "guestbook.txt";
    $name = ...
    ....

    $data file_get_contents($file);
    $nuovo '<font size="3"><BR><b>'.$name.'</b><BR>'.$msg.'<BR>'
    file_put_contents($file$nuovo.$data);
    ...
    Se invece vuoi più flessibilità un semplice file di testo non basta più. O ti strutturi meglio il file e ci "giochi" lato php o usi ad esempio xml o ti appoggi ad un db vero e proprio

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2019
    Messaggi
    30
    Scusa, non riesco a capire, come potrei aggiungerlo al codice che ho postato io?
    Purtroppo mi occorre per forza di cose la scrittura su un file txt.

    Grazie!

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Esattamente come ti ho postato io
    index:
    Codice PHP:
    <?php
    $file 
    "guestbook.txt";

    $guestbook file_get_contents($file);

    if (
    $guestbook !== NULL) {
        echo 
    $guestbook;
    } else {
        echo 
    "<h3>Sorry there was an error please contact us now<h3>";
    }
    ?>
    Pagina salvataggio

    Codice PHP:
    <?php
    $file       
    "guestbook.txt";
    $name       $_POST['name'];
    $msg        $_POST['msg'];
    $msg  stripslashes($msg);
    $name stripslashes($name);
    $msg str_replace ("<","&lt;",$msg);
    $msg str_replace ("\n","<br>",$msg);
    $name str_replace ("<","&lt;",$name);
    $name str_replace ("\n","<br>",$name);


    if(empty(
    $name) || empty($msg)) {
        echo 
    "<h3>Sorry all fields are required</h3>";
    } else {
      
    $guestbook file_get_contents($file);
      
    $post ='
    <font size="3">
    <BR>
    <b>'
    .$name.'</b><BR>
    '
    .$msg.'<BR>';
      
    file_put_contents($file$post.$guestbook);
      echo 
    '<font size="3"><p align="center">Thank you '.$name.' for singing my guestbook</p></font>'
    }
    Le file_*_contents fanno la stessa cosa della fopen-read/write-close ... ma con una sola istruzione.

    In questo modo avrai gli ultimi inserimenti all'inizio del file.
    Come detto, se vuoi qualcosa di più flessibile, ti consiglio di usare un database o un file xml ...ma la cosa va "progettata" secondo le tue esigenze

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2019
    Messaggi
    30
    Ciao e grazie, funziona benissimo adesso.

    Ne approfitto meschinamente della gentilezza, se volessi anche limitare il numero di righe del txt visibili?

    Grazie!

  6. #6
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Per come è impostato il file, è difficile. Per semplificare le cose potresti mettere un separatore tra le varie righe:
    Salvataggio:
    Codice PHP:
    <?php
    $separator 
    '####';
    $file       "guestbook.txt";
    $name       $_POST['name'];
    $msg        $_POST['msg'];
    $msg  stripslashes($msg);
    $name stripslashes($name);
    $msg str_replace ("<","&lt;",$msg);
    $msg str_replace ("\n","<br>",$msg);
    $name str_replace ("<","&lt;",$name);
    $name str_replace ("\n","<br>",$name);


    if(empty(
    $name) || empty($msg)) {
        echo 
    "<h3>Sorry all fields are required</h3>";
    } else {
      
    $guestbook file_get_contents($file);
      
    $post ='<font size="3"><BR><b>'.$name.'</b><BR>'.$msg.'<BR>';
      
    file_put_contents($file$post.$separator.$guestbook);
      echo 
    '<font size="3"><p align="center">Thank you '.$name.' for singing my guestbook</p></font>'
    }
    index
    Codice PHP:
     <?php
    $file 
    "guestbook.txt";
    $separator '####';
    $max_visible 10;
    $guestbook file_get_contents($file);

    if (
    $guestbook !== NULL) {
        
    $all explode($separator$guestbook);
        
    $show array_slice($all0$max_visible);
        echo 
    implode(''$show);
    } else {
        echo 
    "<h3>Sorry there was an error please contact us now<h3>";
    }
    ?>

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 © 2024 vBulletin Solutions, Inc. All rights reserved.