Visualizzazione risultati 1 fino 5 di 5

Discussione: [PHP] problema fopen() r+

  1. #1
    Guest

    Predefinito [PHP] problema fopen() r+

    Ciao a tutti, dopo un bel pezzo che non mi faccio vivo qua torno a scrivere con un piccolo dilemma (per me ovviamente )

    In pratica ho utilizzato la funzione fopen("","r+"); per scrivere in un database (*.txt) di testo dove il mio scopo è (attraverso un apposito form) scrivere devi nuovi messaggi sopra quelli "vecchi".
    La mia pratica si ferma a metà in quanto r+ mi cancella parte del vecchio messaggio

    Ora vi posto un pò di codice
    Codice PHP:
    ...

    if (!
    $p_file = fopen("database.txt","r+")) {
    echo
    "Spiacente, ma non hai i permessi per aprire il database";
    }
    if(
    $nick=="") {
    echo
    "Inserisci un <b>nome</b> o <b>nickname</b>";
    }
    else {
    $risp = stripslashes(stripslashes($risp));
    require_once(
    "code_html.php");


    fputs($p_file,"<p class=\"evidenzia\"><i>" . $data . "</i>");
    fputs($p_file,"<b>" . $nick . "</b></p>");
    fputs($p_file,$write);
    fputs($p_file,$risp=fBBCode($risp));
    fclose($p_file);
    }

    ...
    al posto di fwrite() ho voluto usare fputs() che è la stessa cosa, va bene?

    Ah, il testo che si dovrebbe scrivere nel database è composto in parte anche da HTML, forse è per questo che il risultato va per metà a buon fine? Se si, come ovviare il problema???

    Grazie per il vostro aiuto

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,262

    Predefinito

    quando apri un file con r+, ti posizioni all'inizio del file, e da li sovrascrivi, carattere per carattere. Se il primo messaggio nel file era lungo 50 caratteri, e quello con cui vuoi aggiornarlo è lungo 55, sforerai di 5 caratteri "sopra" la riga successiva, mangiandotene l'inizio (ed in effetti, anche il ritorno a capo, qiundi finisci per unire due righe)

  3. #3
    Guest

    Predefinito

    grazie dreadnaut, non lo avevo proprio capito :)
    Quindi diciamo che l'unico che "mantiene intatto" il database è il valore a o a+ in quanto scrive sotto il contenuto già presente :P

    Ma allora come posso ovviare il problema? Cioè come posso lasciare invariati i precedenti contenuti e scriverne dei nuovi nella riga sopra?

    grazie ancora

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,262

    Predefinito

    in questo caso purtroppo ti toccherebbe riscrivere tutto il file, eliminando il primo pezzo.

    Se la cosa è per te troppo dispendiosa, ripensa un attimo a quello che vuoi fare, e prova a riprogettare il sistema in modo che il contenuto posso finire in fondo.

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    in questo caso purtroppo ti toccherebbe riscrivere tutto il file, eliminando il primo pezzo.
    ti dispiacerebbe farmi un esempio?
    qualsiasi cosa basta che la capisco

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Se la cosa è per te troppo dispendiosa, ripensa un attimo a quello che vuoi fare, e prova a riprogettare il sistema in modo che il contenuto posso finire in fondo.
    beh il contenuto potrebbe aggiornarsi a fondo pagina però poi un utente ogni volta deve andare a fare lo scroll della pagina e... che seccatura!

    Grazie dreadnaut sei stato gentilissimo!

Regole di scrittura

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