• User

    PHP senza DB: problemi di formattazione testo. Come faccio?

    Ciao.
    Avrei bisogno una mano per:
    fare un sito web in PHP senza DB dove il cilente può inserire facilmente le notizie che vuole.

    Ora vi spiego quello che ho fatto:

    • ho installato FCKEditor (un editor dall'interfaccia simile a word) che rilascia la news
    • ho inserito uno script che salva la news in un file .txt, ma il testo viene salvato in HTML puro, ovvero contiene tutte le tag e i simboli &%...

    Come faccio a prendere le news inserite nel file .txt e mostrarle nella home page del sito formattate correttamente e senza codici HTML?

    Grazie


  • User Attivo

    Beh, in genere un editor di testo ti salva il coice html esattamente come lo vedi mentre scrivi la news, quindi basterebbe prendere il contenuto puro del file .txt e scriverlo nella pagina html.
    Se vuoi eliminare i tag html, php ha una funziona "striphtmltags", ce ti restituisce il testo senza i tag html, oppure con dei tag che tu scegli di lasciare al testo.

    Comunque non vedo l'utilità di eliminare la formattazione che ti restituisce l'editor di testo...


  • User

    @momino said:


    Il fatto che importare il codice dal .txt mi mostra comunque le tag ne testo... non mi renderizza la pagina in html...


  • User Attivo

    Prova ad applicare queste 2 funzioni php al testo importato dal file di testo:

    [php]$testo = str_replace("<","<",$testo);
    $testo = str_replace(">",">",$testo);[/php]Serve a sostituirti i simboli che identificano le tags.
    Prova un pò.


  • User

    @momino said:

    Prova ad applicare queste 2 funzioni php al testo importato dal file di testo:

    [php]$testo = str_replace("<","<",$testo);
    $testo = str_replace(">",">",$testo);[/php]Serve a sostituirti i simboli che identificano le tags.
    Prova un pò.

    Ho inserito il tuo codice e funziona perfettamente.
    Lo stesso problema è apparso ora con gli spazi, così ho aggiunto questa riga:
    [php]$postedValue = str_replace(" "," ",$postedValue);[/php]ma sembra non funzionare, come mai?
    Inoltre, è possibile associare ad ogni news inserita un ID in modo da mostrare nella home page solo le utlime tre news?
    Grazie ancora!


  • User Attivo

    Non capisco il problema degli spazi, non dovrebbe esserci bisogno di conversione perchè non sono elementi sensibili alla sintassi html.
    La funziona che hai scritto tu è corretta, probabilmente non trova " " da sostituire, prova a postare un pezzo di questo testo e spiegaci meglio l'errore degli spazi.

    Per mostrare le ultime 3 news non c'entra un id, anche se è sempre bene associare un record ad un id univoco, ma puoi usare questa query SQL:

    "SELECT * FROM news ORDER BY data DESC LIMIT 0,3"
    

    così ordini prima le news in base alla data in ordine decrescente, quindi la data più grande indica quella più recente, e poi ne prendi solo i primi 3 risultati.


  • User

    Mi stampa gli spazi così:
    [PHP]     ciao[/PHP]

    Ma la query non posso usarla senza avere un DB... no?


  • User Attivo

    Hai perfettamenta ragione, scusami, lavoriamo senza database 🙂
    Prova a usare questa funzione:
    [PHP]$testo = str_replace("&","&",$testo);[/PHP]
    probabilmente la scrittura sul file di testo ha codificato anche la "&" che in html indica l'inizio di un carattere speciale.


  • User

    @momino said:

    Hai perfettamenta ragione, scusami, lavoriamo senza database 🙂
    Prova a usare questa funzione:
    [php]$testo = str_replace("&","&",$testo);[/php]probabilmente la scrittura sul file di testo ha codificato anche la "&" che in html indica l'inizio di un carattere speciale.

    Sei un genio! Funziona! Grazie! :smile5:

    Ma per quanto riguarda il dare una ID ad ogni news per poi importare solo le utlime tre nella home page è possibile?


  • User Attivo

    Certo che è possibile, basta strutturare il file di testo come se fosse un database: mi spiego, quando salvi il testo della news, puoi scegliere un carattere separatore tra i "campi", ed uno che indica la fine del "record", in modo da scrivere la sequenza:

    "id+separatore+testo+separatore+data+fine_record"
    

    Se decidi di adottare questa struttura faccelo sapere, possiamo continuare insieme lo sviluppo della soluzione!

    p.s. ovviamente il "separatore" non deve comparire nè nel testo, nè nell'id, nè nella data, nè nel "fine_record"


  • User

    E' proprio quello che vorrei.
    Mi daresti una mano a creare qualcosa del genere? :smile5:
    Poi ti pago da bere :tongueout:


  • User Attivo

    Allora, prima di mettere codice in ballo, ragioniamo sul da farsi.
    Procediamo per passi:
    [CENTER]-Creare un id univoco
    [LEFT]in pratica ti servirà per identificare in ogni momento e in ogni situazione il tuo contenuto, così da poterlo cancellare, modificare o mostrare facendo riferimento solo a quell'id.
    [/LEFT]
    [/CENTER]
    Senza troppi fronzoli, si taglierebbe la testa al toro creando un altro file di testo con dentro l'id da dare al nuovo contenuto che andrai a inserire nel file di testo, senza andarci a impegolare in algoritmi che estraggono il massimo da un campo di un array, per esempio...
    Quindi creare un file "id.txt" in cui la prima volta ci sarà "1" e ogni volta che inserisci un contenuto nel tuo file di testo, incrementerai il numero contenuto in "id.txt".
    [CENTER]
    -Stabilire dei separatori

    [/CENTER]
    questi ti serviranno per identificare dove finisce un campo e dove ne inizia un altro. Ovviamente i separatori devono essere dei caratteri "impossibili" da trovare nei campi, come "°ç§_^#*" o stringhe di questo tipo.
    Naturalmente rendi la cosa il più semplice possibile, scegliendo un carattere che sicuramente non userai mai altrove.
    Il consiglio è di usare che un separatore che indichi la fine di una righa, in modo da riuscire ad identificare un solo elemento per volta, elaborarlo e poi procedere al successivo.

    Sicuramente saprai come ottenere il valora UNIX timestamp tramite php, e ti consiglio di usare quello per identificare la data di creazione del tuo contenuto, così da poterli anche ordinare per data e mostrare i primi 3, come da te richiesto.

    E' certo che questo sistema è espandibile, aumentando il numero di campi e aggiungendo proprietà al tuo contenuto, così da renderlo ancora più simile ad una vera e propria tabella di un database.

    Spero sia un buon inizio, sono qui per qualsiasi domanda!