• User Newbie

    modificare dati in un file.TXT tramite form

    Sto creando uno script per l'aggiunta delle news e tramite form riesco a scrivere su un file.txt tutto quello che voglio e fino a li non ho problemi. Sul pannello di controllo, vorrei mettere un link per modificare le nwes inserite (in caso di errori grammaticali e/o di concetto ecc ecc)
    Pensavo quindi di far apparire le mie news direttamente all'interno di altri form. Ottengo questo con il file modifica.php

    <?php

    if (!$apri = fopen("../news/file.txt","a+")){
    echo "Non posso aprire il file";
    }else{

    while(!feof($apri)){
    $leggo["titolo"][] = fgets($apri,255);
    $leggo["anteprima"][] = fgets($apri,255);
    $leggo["articolo"][] = fgets($apri,255);
    $leggo["immagine"][] = fgets($apri,255);
    }
    $numero=count($leggo["titolo"])-1;

    if($_GET['number']>$numero || $_GET['number']<0)
    {
    exit(" ERROR number not valid !");
    }
    else
    {
    $n=$_GET['number'];
    }
    echo "Ecco l'annuncio che vuoi modificare<br>";
    }
    echo '<form method=get action="edit.php">';
    echo '<table><tr><td>TITOLO:</td><td><input type="text" name="titolo" value="'.$leggo["titolo"].'"></td></tr>';
    echo '<tr><td>Anteprima:</td><td><input type="text" name="anteprima" value="'.$leggo["anteprima"].'"></td></tr>';
    echo '<tr><td>Articolo:</td><td><textarea name="articolo" rows="10" cols="40">' .$leggo["articolo"].'</textarea></td></tr>';
    echo '<tr><td>immagine:</td><td><input type="text" name="immagine" value="'.$leggo["immagine"].'"></td></tr></table>';
    echo '<input type="submit" value="Invia">';
    echo '<input type="reset" value="Cancella">';
    echo '</FORM>';

    fclose($apri);
    ?>

    Fin qui TUTTO OK!!!

    Il file edit.php dovrebbe analizzarmi i dati, e quindi, sostituirmi quelli che c'erano precedentemente. ma così non fa. Ve lo posto.

    <?php
    echo "<center>";
    echo "Ciao ecco i risultati del tuo inserimento:";
    $errore= false;

    If((!$_GET['titolo']) || (!$_GET['anteprima']) || (!$_GET['articolo']) || (!$_GET['immagine'])) {
    #controllo che nessun campo sia vuoto
    $errore=true;
    echo "Non hai compilato tutti i campi <a href="uno.html">torna indietro</a>";
    exit;
    }
    else {
    $_GET['titolo'] = stripslashes($_GET['titolo']);
    $_GET['anteprima'] = stripslashes($_GET['anteprima']);
    $_GET['articolo'] = stripslashes($_GET['articolo']);
    $_GET['titolo'] = str_replace("\n", "<br>", $_GET['titolo']);
    $_GET['anteprima'] = str_replace("\n", "<br>", $_GET['anteprima']);
    $_GET['articolo'] = str_replace("\n", "<br>", $_GET['articolo']);
    }
    che il file sia accessibile
    if (!$apri = fopen ("../news/file.txt","r+")) {
    $errore=true;
    echo "non posso aprire il file";
    }else{
    $apriw = fopen ("../news/file.txt","r+");

    e sul file scrivo titolo e vado a capo, anteprima e vado a capo

    articolo e a capo e il nome dell'immagine

    fputs($apriw,$_GET['titolo']."\n");
    fputs($apriw,$_GET['anteprima']."\n");
    fputs($apriw,$_GET['articolo']."\n");
    fputs($apriw,$_GET['immagine']."\n");
    #chiudo il file
    fclose($apriw);
    }
    ($errore){
    echo"<br> Riinseriscili per favore<br>";
    }
    else{
    echo "<br> <a href="../news/news.php">leggi gli annunci</a>";
    }
    ?>

    Per il file news.php non ho problemi (serve solo ad aprire il file in lettura e mettere tutte le info inserite come dico io)

    COME FACCIO CON IL FILE EDIT.PHP?


  • Super User

    devi prendere ogni news, passarla al file con il form di modifica e quando salvi riordinare il file con tutte le informazioni.

    personalmente la vedo come una complicazione notevole. Dando per scontato che la soluzione principe è l'uso di un database e se non l'hai scelta avrai i tuoi motivi, per la gestione di questo genere di informazioni io farei un file .txt per ogni news.
    Quando devi fare l'elenco delle news leggi semplicemente l'elenco dei file presenti nella cartella dove li avrai salvati tutti, quando devi modificarne uno passi semplicemente il nome del file da modificare.
    Così mi sembra ancora fattibile, come dici tu imho è una complicazione inutile.


  • User Newbie

    Io invece mi chiedevo se non ci fosse un mofo per poter dire in PHP,

    -prendi quella determinata stringa che trovi sul file txt
    -cancellala
    -mettici quest'altra

    e il gioco è fatto (così almeno spero)


  • User Attivo

    Se, e solo se, vuoi sostituire un pezzo di file con un altro di uguale lunghezza puoi usare fseek per posizionarti e fwrite per sovrascrivere.


  • User Newbie

    e se la lunghezza fosse diversa? Io non posso dire di togliere un frammento delimitato da due simboli (nel mio caso io ho |bla_e_bla|) e mettercene un altro (|bla_bla_bla_e_bla|)?


  • User Attivo

    No.
    Se proprio devi fare su file fai come ti ha consigliato Tymba, un file per ogni news.
    Se proprio proprio vuoi (per esercizio, più che altro) fare quello che vuoi tu devi:

    aprire il file in lettura
    mettere in un buffer la parte fino al record che vuoi modificare
    mettere in un buffer la parte successiva al record che vuoi modificare
    aprire il file in scrittura
    scrivere il primo buffer
    scrivere il nuovo record
    scrivere il secondo buffer