Modificare dati in file TXT tramite form

Salve... sono nuovo di qui però il vostro forum mi sembra molto ben fatto

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 pannello di controllo 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 forme ottengo questo con il file modifica.php

[tt]<?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"][$n].'"></td></tr>';

echo '<tr><td>Anteprima:</td><td><input type="text" name="anteprima" value="'.$leggo["anteprima"][$n].'"></td></tr>';

echo '<tr><td>Articolo:</td><td><textarea name="articolo" rows="10" cols="40">' .$leggo["articolo"][$n].'</textarea></td></tr>';

echo '<tr><td>immagine:</td><td><input type="text" name="immagine" value="'.$leggo["immagine"][$n].'"></td></tr></table>';

echo '<input type="submit" value="Invia">';

echo '<input type="reset" value="Cancella">';

echo '</FORM>';

fclose($apri);

?>[/tt]

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.

[tt]<?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']);

}

#controllo 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>";

}

?>[/tt]

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?

inviato 10 anni fa
pinoppi
X 0 X

Mancano informazioni im portanti, esattamente cosa non va? Che errori? Come dovrebbe agire?

E' la logica del file edit.php che non va.

Allora, vedo che:

1 - controlla che i dati siano tutti inseriti ( e dovresti aggiungere una trim secondo me )

2 - controlla di poter aprire il file

3 - tenta di scrivere direttamente all'inizio del file.

Dovresti, per renderla più semplice anche se un po' più lunga:

3 - apri in lettura il file news.txt e in scrittura un tmp.txt

4 - leggere 1 news

5 - controllare se è quella modificata, se sì scrivi quella modificata in tmp.txt, se no scrivi quella letta

6 - ritorna al 4 fino alla fie del file

7 - chiudi i file

8 - elimina news.txt e rinomina tmp.txt in news.txt

Così avrai le news nello stesso ordine e con la news modificata.

risposto 10 anni fa
LonelyWolf
X 0 X

Uhmmmmm... ora ci provo. Ma così facendo però, se io volessi modificare una news che si trova in mezzo al mio file txt, non mi perdo tutti i dati che stanno prima o dopo (a seconda di come apro il file)

risposto 10 anni fa
pinoppi
X 0 X

Aggiungo una cosa, quando carichi la news per modificarla in modifica.php, perchè carichi in memoria l'intero file? non è più veloce confrontare al volo il n° e caricare solo quella?

risposto 10 anni fa
LonelyWolf
X 0 X

Caro lonelywolf e come lo faccio? Non mastico così bene il php, per me è stato già un mezzo successo ottenere che le news si visualizzano... ora però mi piacerebbe completare sto script con un modo per modificarle

risposto 10 anni fa
pinoppi
X 0 X

Dunque, da modifica.php:

while(!feof($apri)){ //fino alla fine del file
$leggo["titolo"][] = fgets($apri,255); //leggi riga titolo
$leggo["anteprima"][] = fgets($apri,255);//leggi riga anteprima
$leggo["articolo"][] = fgets($apri,255);//leggi riga articolo
$leggo["immagine"][] = fgets($apri,255);//leggi riga immagine
}

E tutto viene messo in un array a due dimensioni che si chiama $leggo, quindi alla fine avrai in memoria l'intero file.

if($_GET['number']>$numero || $_GET['number']<0)

Questo mi dice che per sapere quale news devi modificare passi un numero, come è associato questo numero alla news?

Se è solo l'ordine (o posizione) della news, cioè la prima ha 1 la seconda 2 e via, ti basta effettuare $_GET['number']-1 letture dal file e alla $_GET['number'] memorizzarla nella variabile e poi chiudere il file.

A dire il vero potresti fare una lettura di (255 x 4) x ($_GET['number']-1) e poi la lettura "normale" per recuperare i dati della news giusta.

In questo modo risparmi:

1 - memoria se il file diventa immenso

2 - tempo: arrivi alla fine del file solo se devi modificare l'ultima news

risposto 10 anni fa
LonelyWolf
X 0 X

Dimenticavo, quello di cui sto parlando io cmq non è PHP o C o html o altro linguaggio, semplicemente della logica dello script.

Una volta che riesci a seguire la logica giusta poi la puoi implementare nel linguaggio che vuoi (a patto di conoscerlo, ma è un'altro discorso) ;)

risposto 10 anni fa
LonelyWolf
X 0 X

può anche semplicemente aprire il file con ... file() così si trova già ogni riga del file in un array.

risposto 10 anni fa
Marco Grazia
X 0 X

Sì, ma si trova comunque ad avere tutto il file in memoria e deve fare una ricerca lo stesso.

risposto 10 anni fa
LonelyWolf
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda