Visualizzazione risultati 1 fino 27 di 27

Discussione: [PHP] problemi aggiunta dati in un file di testo

  1. #1
    Guest

    Predefinito [PHP] problemi aggiunta dati in un file di testo

    Ho la necessità di aggiungere dei dati tramite form in un file di testo, scrivendo all'inizio e non perdendo i dati che ho già nel file.

    Dato che non esiste un metodo di scrittura come questo, ho pensato di far leggere il file com'è ad una variabile, memorizzarne il contenuto, e riscrivere il file prima inserendo la variabile con il testo derivante dal form, poi scrivendo la variabile contenente il testo del file txt appena salvato in essa, quindi ho proceduto così:

    Codice PHP:
    <?php
    $scrivi
    =fopen("post/post.txt","w+");
    $leggi=fread($scrivi,filesize("post/post.txt"));
    fwrite($scrivi, "<b>".$_GET['nome']."</b><br><br>".$_GET['testo']."<br>".$leggi);
    ?>
    Però quando salvo per la seconda volta, mi elimina tutto il testo e rimangono solo i tag html...

    Come posso rimediare?

  2. #2
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Il problema è:
    Codice PHP:
    fopen("post/post.txt","w+");
    Dovresti mettere a o a+, w+ "Apre in lettura e scrittura; posiziona il puntatore all'inizio del file e tronce il file alla lunghezza zero. Se il file non esiste, tenta di crearlo." mentre a+ "Apre in lettura e scrittura; posiziona il puntatore alla fine del file. Se il file non esiste, tenta di crearlo."

    » Fonte php.net
    Apprezzi l'aiuto? Offrimi un caffè!

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da miki92 Visualizza messaggio
    Il problema è:
    Codice PHP:
    fopen("post/post.txt","w+");
    Dovresti mettere a o a+, w+ "Apre in lettura e scrittura; posiziona il puntatore all'inizio del file e tronce il file alla lunghezza zero. Se il file non esiste, tenta di crearlo." mentre a+ "Apre in lettura e scrittura; posiziona il puntatore alla fine del file. Se il file non esiste, tenta di crearlo."

    » Fonte php.net
    quindi non c'è o modo di non cancellare i dati e scrivere all'inizio del file?

  4. #4
    Guest

    Predefinito

    In teoria potresti aprire il file, salvare tutto il contenuto in una variabile, scrivere dentro la tua riga che vuoi far comparire per prima e accodargli il resto.

    La cosa più semplice però resterebbe invertire l'array appena aprto il file, così da avere tutti i dati dall'ultimo al primo (quindi dall'ultimo aggiunto) ^_^

  5. #5
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Citazione Originalmente inviato da NokiaN70 Visualizza messaggio
    quindi non c'è o modo di non cancellare i dati e scrivere all'inizio del file?
    a+ non cancella il contenuto del file di testo ma aggiunge il nuovo testo alla fine del contenuto del txt se vuoi farlo all'inizio devi creare tu qualche strategia.

    » Info su fopen e i parametri
    Ultima modifica di miki92 : 04-11-2008 alle ore 22.23.30
    Apprezzi l'aiuto? Offrimi un caffè!

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da comunitavirtuali Visualizza messaggio
    In teoria potresti aprire il file, salvare tutto il contenuto in una variabile, scrivere dentro la tua riga che vuoi far comparire per prima e accodargli il resto.

    La cosa più semplice però resterebbe invertire l'array appena aprto il file, così da avere tutti i dati dall'ultimo al primo (quindi dall'ultimo aggiunto) ^_^
    Eh appunto è come avevo detto, ho cercato di fare proprio questo con il codice del primo post, ma non funziona...

    Mentre per il fatto di invertire l'array, non saprei proprio come fare
    Ultima modifica di NokiaN70 : 04-11-2008 alle ore 22.25.27

  7. #7
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    NokiaN70 per divertirmi un po' ho creato questo:

    Codice PHP:
    <?php

    $file
    = "nomefile.txt"; // Nome del file che contiene già il testo
    $tmp = "tmp.txt"; // Un file temporaneo nella quale memorizzare del testo (successivamente viene cancellato)

    $ex = file_get_contents($file);
    $ft = (tmp,"w+"); // Creo il file temporaneo
    fwrite($ft,$ex); // Creo un backup dei dati temporaneo
    close($ft);
    unlink($file); // Cancello temporaneamete il file originale

    $f = fopen($file,"w+"); // Creo il file originale

    $rd = file_get_contents($ft);

    $testocompleto = $testo_inizio."<br />".$rd; // Testo all'inzio + quello già esistente nel file txt

    fwrite($f,$testocompleto); // Aggiungo il testo
    fclose($f);
    unlink($ft); // Cancello il file temporaneo

    ?>
    Che dovrebbe fare ciò che vuoi e cioè: apre il file dove già c'è il contenuto, lo sposta in un file temporaneo dopodichè elimina il file con il testo originale.

    Successivamente crea il file con il testo vecchio + quello nuovo aggiungendo all'inizio del testo quello nuovo...quindi verrà TESTO NUOVO+TESTO VECCHIO ed infine eliminerà il file temporaneo mantenendo solo quello originale con il testo come tu lo volevi.

    ATTENZIONE: Lo script NON è stato testato, quindi fai prima una prova con dati non importanti.
    Ultima modifica di miki92 : 04-11-2008 alle ore 22.32.37
    Apprezzi l'aiuto? Offrimi un caffè!

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da NokiaN70 Visualizza messaggio
    Eh appunto è come avevo detto, ho cercato di fare proprio questo con il codice del primo post, ma non funziona...

    Mentre per il fatto di invertire l'array, non saprei proprio come fare
    array_reverse:
    Codice PHP:
    $var = array_reverse( file("FILE.txt") )
    :) questo intendo

    ps.: ho usato file perchè:
    file();
    La funzione file("nome_file.txt") restituisce un array con gli elementi uguali ad ogni riga del file di testo.
    Possiamo capire quento sia importante questa funzione. Unita alle altre funzioni array è possibile manipolare un file di testo quasi come un database.
    e poi un foreach per scorrere tutte le righe, in quel caso invertite ^^
    Ultima modifica di comunitavirtuali : 04-11-2008 alle ore 23.59.54

  9. #9
    Guest

    Predefinito

    Grazie 1000 ragazzi

    Ed invece per leggere una determinata riga di un file di testo come posso fare? Avevo trovato un modo ma era decisamente troppo lungo...

    Grazie!

  10. #10
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Per "leggere una determinata riga" cosa intendi di preciso?
    Apprezzi l'aiuto? Offrimi un caffè!

  11. #11
    Guest

    Predefinito

    Citazione Originalmente inviato da miki92 Visualizza messaggio
    Per "leggere una determinata riga" cosa intendi di preciso?
    Tipo, ho un file di testo con scritto:

    ________________________
    Nome: blablabla
    Cognome: blablabla2
    Indirizzo blablabla3
    ________________________

    Do il comando "scrivimi la seconda riga", e mi scrive "Cognome: blablabla2"

    EDIT: comunque ora non mi legge più i file di testo O.o

    Ho in a.txt la scritta "ciao", e scrivo in un file nella stessa cartella questo codice:

    Codice PHP:
    $var=fopen("nome_file.txt","r");
    $var2=fread($var,filesize("nome_file.txt"));
    echo
    $var;
    echo
    $var2;
    E se carico la pagina mi scrive: Resource id #3

    Cosa sbaglio??
    Ultima modifica di NokiaN70 : 05-11-2008 alle ore 16.31.23

  12. #12
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Per leggere il codice da un file puoi utilizzare (al posto di tutto quel codice li) semplicemente file_get_contents()
    Apprezzi l'aiuto? Offrimi un caffè!

  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da miki92 Visualizza messaggio
    Per leggere il codice da un file puoi utilizzare (al posto di tutto quel codice li) semplicemente file_get_contents()
    Quindi così:

    $var=file_get_contents('a.txt');

    Bene, quindi posso memorizzare il file in $var, aprire il file a.txt con il metodo "w+" il file e scrivere la nuova stringa, chiudo il file, lo riapro in "a+" e scrivo la variabile $var...no?
    Ultima modifica di NokiaN70 : 05-11-2008 alle ore 17.24.10

  14. #14
    Guest

    Predefinito

    Bhe per leggere una determinata riga di un file te lo hanno detto prima.

    Con la funzione file() ti crei l'array e poi vai a stampare $var[numeroriga-1];

    Esempio:

    Codice PHP:
    <?
    $file
    ="somefile.txt";
    $arr=file($file);
    echo(
    $file[1]); //stampa la seconda riga del file
    Ultima modifica di Xenom89 : 05-11-2008 alle ore 18.06.52

  15. #15
    Guest

    Predefinito

    Citazione Originalmente inviato da Xenom89 Visualizza messaggio
    Bhe per leggere una determinata riga di un file te lo hanno detto prima.

    Con la funzione file() ti crei l'array e poi vai a stampare $var[numeroriga-1];

    Esempio:

    Codice PHP:
    <?
    $file
    ="somefile.txt";
    $arr=file($file);
    echo(
    $file[1]); //stampa la seconda riga del file
    Si si questo l'avevo capito, grazie

    Quello che non riesco a fare è scrivere nel file di testo prima il testo aggiunto e poi il testo che già era presente nel file...
    Avevo provato con:

    Codice PHP:
    $old=file_get_contents('a.txt');
    $file=fopen("a.txt","w+");
    fwrite($file, $_GET['nome']);
    fclose($file);
    $file=fopen("a.txt","a+");
    fwrite($file, $old);
    fclose($file);
    $write=file_get_contents('a.txt');
    echo
    $write;
    Ma niente da fare

  16. #16
    Guest

    Predefinito

    potresti provare così:
    Codice PHP:
    <?php
    $dascrivere
    = "quellochedeviscrivere";
    $file = "filedascrivere.txt";
    $old = file_get_contents($file);
    $fh = fopen($file,"w+");
    fwrite($fh,$dascrivere."\n".$old);
    fclose($fh);
    $new = file_get_contents($file);
    echo
    $new;
    ?>

  17. #17
    Guest

    Predefinito

    Citazione Originalmente inviato da NetSkin Visualizza messaggio
    potresti provare così:
    Codice PHP:
    <?php
    $dascrivere
    = "quellochedeviscrivere";
    $file = "filedascrivere.txt";
    $old = file_get_contents($file);
    $fh = fopen($file,"w+");
    fwrite($fh,$dascrivere."\n".$old);
    fclose($fh);
    $new = file_get_contents($file);
    echo
    $new;
    ?>
    Grazie! Mmh...quel "\n" cosa fa di bello?

    EDIT:
    nella riga fwrite($fh,$dascrivere."\n".$old); ho bisogno di far andare a capo tra $dascrivere e $old, come faccio?
    Ultima modifica di NokiaN70 : 05-11-2008 alle ore 19.25.48

  18. #18
    Guest

    Predefinito

    new line :P

    praticamente crea una nuova linea (in spiccioli va a capo ^^)
    Ultima modifica di comunitavirtuali : 05-11-2008 alle ore 19.25.54

  19. #19
    Guest

    Predefinito

    Citazione Originalmente inviato da comunitavirtuali Visualizza messaggio
    new line :P

    praticamente crea una nuova linea (in spiccioli va a capo ^^)
    Come non detto, mi hai anticipato...Comunque sia allora non funziona perchè mi scrive tutto nella stessa riga

    EDIT: no no funziona correttamente, è l'echo che mi da tutto nella stessa riga

    Grazie a tutti!
    Ultima modifica di NokiaN70 : 05-11-2008 alle ore 19.29.58

  20. #20
    Guest

    Predefinito

    W+: Per scrittura e lettura (I dati già scritti andranno persi e se il file non esiste sarà creato. Scrive all'inizio del file).
    A+ Per aggiungere e lettura (I dati saranno aggiunti in coda a quelli già scritti, se il file non esiste sarà creato.)

    Ora mi è venuto in mente che puoi provare ad usare:
    R+ Per lettura e scrittura (scrive all'inizio del file).

  21. #21
    Guest

    Predefinito

    Citazione Originalmente inviato da Xenom89 Visualizza messaggio
    Bhe per leggere una determinata riga di un file te lo hanno detto prima.

    Con la funzione file() ti crei l'array e poi vai a stampare $var[numeroriga-1];

    Esempio:

    Codice PHP:
    <?
    $file
    ="somefile.txt";
    $arr=file($file);
    echo(
    $file[1]); //stampa la seconda riga del file
    Volevo dire che il codice in realtà è questo:

    Codice PHP:
    <?php
    $file
    ="nomefile.txt";
    $arr=file($file);
    echo(
    $arr[1]);
    echo(
    $arr[..]);
    ?>
    Avevi scambiato $arr con $file

  22. #22
    Guest

    Predefinito

    Citazione Originalmente inviato da NokiaN70 Visualizza messaggio
    Volevo dire che il codice in realtà è questo:

    Codice PHP:
    <?php
    $file
    ="nomefile.txt";
    $arr=file($file);
    echo(
    $arr[1]);
    echo(
    $arr[..]);
    ?>
    Avevi scambiato $arr con $file
    Emh si i soliti errorucci che ti fanno perdere 25 ore di vita. xD

  23. #23
    Guest

    Predefinito

    Alla fine ho aggiunto questi codici:

    Codice PHP:
    //scrivo gli ID
    $percorso=file_get_contents(config/percorso.txt);
    $url_da_scrivere=$_GET['id'].".html";
    $file_id = "id.txt";
    $vecchio_id = file_get_contents($file_id);
    $var_id = fopen($file_id,"w+");
    fwrite($var_id,$url_da_scrivere."\n".$vecchio_id);
    fclose($var_id);
    //Scrivo i nomi
    $testo_nome = $_GET['nome'];
    $file_nome = "nome.txt";
    $vecchio_nome = file_get_contents($file_nome);
    $var_nome = fopen($file_nome,"w+");
    fwrite($var_nome,$testo_nome."\n".$vecchio_nome);
    fclose($var_nome);
    Ma mi compone i file in modo strano, non un id o nome per riga, una volta salta 2 righe, altre volte 1, e non capisco il perchè...

  24. #24
    Guest

    Predefinito

    prova a fare così:
    Codice PHP:
    $percorso=file_get_contents(config/percorso.txt);
    $url_da_scrivere=$_GET['id'].".html";
    $file_id = "id.txt";
    $vecchio_id = file_get_contents($file_id);
    $var_id = fopen($file_id,"w+");
    $url_da_scrivere = str_replace("\n"," ",$url_da_scrivere);
    fwrite($var_id,$url_da_scrivere."\n".$vecchio_id);
    fclose($var_id);
    //Scrivo i nomi
    $testo_nome = $_GET['nome'];
    $file_nome = "nome.txt";
    $vecchio_nome = file_get_contents($file_nome);
    $var_nome = fopen($file_nome,"w+");
    $testo_nome = str_replace("\n"," ",$testo_nome);
    fwrite($var_nome,$testo_nome."\n".$vecchio_nome);
    fclose($var_nome);

  25. #25
    Guest

    Predefinito

    Citazione Originalmente inviato da NetSkin Visualizza messaggio
    prova a fare così:
    Codice PHP:
    $percorso=file_get_contents(config/percorso.txt);
    $url_da_scrivere=$_GET['id'].".html";
    $file_id = "id.txt";
    $vecchio_id = file_get_contents($file_id);
    $var_id = fopen($file_id,"w+");
    $url_da_scrivere = str_replace("\n"," ",$url_da_scrivere);
    fwrite($var_id,$url_da_scrivere."\n".$vecchio_id);
    fclose($var_id);
    //Scrivo i nomi
    $testo_nome = $_GET['nome'];
    $file_nome = "nome.txt";
    $vecchio_nome = file_get_contents($file_nome);
    $var_nome = fopen($file_nome,"w+");
    $testo_nome = str_replace("\n"," ",$testo_nome);
    fwrite($var_nome,$testo_nome."\n".$vecchio_nome);
    fclose($var_nome);
    Così facendo fa una riga, ne salta una, poi fa due righe corrette, ne salta una...In pratica non funzia troppo bene...Ma non capisco il perchè...

  26. #26
    Guest

    Predefinito

    fai uno echo delle variabili da scrivere e stampa il valore del vecchio contenuto.
    Così si vede cosa scrive e cosa legge..per capire meglio

    Ciao!

  27. #27
    dnacommunity non è connesso Neofita
    Data registrazione
    02-05-2008
    Messaggi
    3

    Predefinito

    /OT NetSkin sei un collega puteolano :D OT/

Regole di scrittura

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