- Home
- Categorie
- Coding e Sistemistica
- Coding
- modificare dati in un file.TXT tramite form
-
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?
-
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.
-
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'altrae il gioco è fatto (così almeno spero)
-
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.
-
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|)?
-
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