ciao,
ho cercato su Html.it, ma non ho trovato nulla, sto cercando una guida che spieghi come scrivere attraverso un form dei file.txt che poi spieghi anche come leggerli da un' altra pag... mi sapete consigliare qualche guida?
ciao,
ho cercato su Html.it, ma non ho trovato nulla, sto cercando una guida che spieghi come scrivere attraverso un form dei file.txt che poi spieghi anche come leggerli da un' altra pag... mi sapete consigliare qualche guida?
Ti scrivo di seguito una lista delle funzioni php che potrebbero esserti utili:
fopen() che serve per aprire il file.
fwrite() per scrivere nel file (se hai scelto le modalità di scrittura in fopen())
fread() per leggere tot bytes del file
file_get_contents() per inserire il contenuto dell'intero file in una stringa
file() restituisce un array i cui elementi sono le righe del file
explode() per dividere una stringa in diverse parti secondo il carattere delimitatore (puoi usare questa funzione per ogni riga del file (file()), con un ciclo)
Sempre riguardo la suddivisione della riga anche join() o implode() potrebbero ritornare utili.
Altre che potrebbero esserti utili al momento non me ne vengono in mente...
Per il passaggio dei dati dal form per l'inserimento vedi qui (php.net - in inglese), o qui (html.it - in italiano), dove puoi trovare info utili sulle variabili superglobali $_GET e $_POST
ho cresato un file.txt e volevo provare a farlo leggere ma mi da pag bianca:
Bom ho capito che cosi apre solo il file, ma anche cois mi da pag bianca:
Codice PHP:
<?php
$filename = "file.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>
Ultima modifica di Jacki2 : 17-08-2007 alle ore 14.50.42
La lettura funziona correttamente, la pagina è bianca perchè non stampi il contenuto del file.
Dovresti fare cosi:
oppure:Codice PHP:
$handle = fopen("file.txt", "r");
echo fread($handle, filesize("file.txt"));
Codice PHP:
echo file_get_contents("file.txt");
ok, grazie adesso funziona!
Ma se voglio scrivere su questo file, ma scrivere attraverso un form, come posso implementarlo?
Codice PHP:
<?php
$filename = 'test.txt';
$somecontent = "Aggiunge questa riga al file\n";
// Verifica che il file esista e sia riscrivibile
if (is_writable($filename)) {
// In questo esempio apriamo $filename in append mode.
// Il puntatore del file è posizionato in fondo al file
// è qui che verrà posizionato $somecontent quando eseguiremo fwrite().
if (!$handle = fopen($filename, 'a')) {
echo "Non si riesce ad aprire il file ($filename)";
exit;
}
// Scrive $somecontent nel file aperto.
if (!fwrite($handle, $somecontent) ===FALSE) {
echo "Non si riesce a scrivere nel file ($filename)";
exit;
}
echo "Riuscito, scritto ($somecontent) nel file ($filename)";
fclose($handle);
} else {
echo "Il file $filename non è accessibile";
}
?>
Leggi al link alla guida che ti ho fornito sul passaggio di valori tramite GET e POST.
ci sono riuscito!!! adesso legge/scrive ne ho fatto uno che salva i testi con il il titolo.. cioe titolo.txt me lo salva in testi/titolo.txt... vorrei fare che il file che legge,legga piu file, cioe i nomi che vengono dati tramite il form... é possibile?
Grazie mille... Grazie a te sono riuscito!!!
ciaooo
mmh...non so se ho capito bene ciò che chiedi.
Comunque secondo la tua domanda (se ho capito) dovresti usare un nome diverso per ogni file, magari usando la funzione rand() per generare ogni volta un numero casuale.
Io adotterei un'altra soluzione invece:
Usi un file txt unico per tutti gli articoli.
In ogni riga metti titolo e articolo separandoli con un divisore ("|" ?), (se sei su AV, quindi su linux,usa "\n" per andare a capo in scrittura), adottando "a+" come metodo di apertura del file:
Poi fai così:articolo 1|testo articolo 1
articolo 2| testo articolo 2
Codice PHP:
<?
foreach(file("file.txt") as $riga){
$p=explode("|",$riga);
$titolo=$p['0'];
$testo=$p['1'];
echo "<br /><br />Titolo: ".$titolo."<br />Testo: ".$testo;
}
?>
scusa, vorrei capire come funziona il codice, cosi che apprendo il funzionamento, mi potresti spiegare come funziona?
PS: se lo capisco faccio grandi passi avanti,...
Detto in poche semplici parole:
foreach è un ciclo, ovvero serve per compiere una stessa operazione più volte.
Il primo argomento che viene passato alla suddetta funzione è un array i cui elementi sono le righe del file "file.txt" estratte tramite la funzione file.
Per ogni riga del file, foreach esegue le operazioni tra parentesi graffe e in ogni esecuzione $riga prende il valore dell'elemento che si legge.
explode divide poi ogni riga in più parti prendendo "|" come delimitatore.
$p è quindi un array di queste parti.
La prima parte della riga (ovvero l'elemento 0) contiene il titolo, quindi $titolo è appunto l'elemento 0 dell'array $p.
L'elemento 1 del suddetto array (ovvero il testo) viene invece assegnato a $testo.
Poi stampo i valori con echo, il segno . (punto) serve semplicemente per concatenare le stringhe.
Ciao!
ok,ho capito, provo a farlo, poi faccio sapere¨!! per ora grazie mille!!!
Edit:
avevo pensato di fare creare un elenco a parte con gli indirizzi dei testi per poi farli apire in un' altro moodo tutti insieme:
bom mi slava l' elenco correttamenete, pero nn so come fare per farli aprire tutti!!!Codice PHP:
$elenco = $titolo;
$scrivi2 = "testi/$titolo\n";
$apri2 = fopen("elenco.txt", "a+");
fwrite($apri2, $scrivi2);
fclose($apri2);
se mettessi un $handle = fopen("testi/$titolo.txt", "r"); quando scrive il txt forse me lo apre e legge a sua volta l' altro?Codice PHP:
<?php
$handle = fopen("elenco.txt", "r");
echo fread($handle, filesize("elenco.txt"));
?>
EDIT2: Ho usato rand() come mi avevi consigliato, ora con il nome del file txt viene -epoi un numero a caso (ho messo tra 0 e 3000)... ho messo una "-" cosi... per bellezza! :)
Ora devo solo riuscire a farli visualizzare tutti nella stessa pagina...!!!
il sistema che avevo proposto prima non funziona, perche mi prende quel pezzo che devo salvare nel file.txt come altro codice da eseguire!!! aspetto tuo consiglio.... grazie...
Ultima modifica di Jacki2 : 17-08-2007 alle ore 20.32.05
Non ho capito quasi nulla di quello che hai scritto, però forse vuoi leggere tutti i file contenuti nella cartella "testi"?
Codice PHP:
<?php
foreach (glob("testi/*.txt") as $filename) {
$handle = fopen($filename, "r");
echo fread($handle, filesize($filename));
}
?>
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
funziona, grazie mille!!!
Ora non mi resta che fare qualcosa di utile...
EDIT:
La validazione dei campi bisogna farla in javascript vero? tipo quella che non si puo scrivere html nel form?
O quella per evitare che ci siano campi vuoti!
Ultima modifica di Jacki2 : 18-08-2007 alle ore 09.45.45
Se fai la validazione solo con JavaScript, basta averlo disattivato per non effettuare i controlli. Devi fare i controlli con il PHP e, se vuoi fare qualcosa di più interattivo, utilizza anche JavaScript.
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
uhm.... tipo per mettere la massima lunghezza del titolo bisogna fare qualcosa del genere?:
Non ho trovato una bella guida....
EDIT: sono riuscito a trovare una strada da solo:
Ora nn so quanti errori ho fatto!!! ma funziona!Codice PHP:
If ($titolo < 0) {
echo 'Commento inserito con successo! <br><a href="leggi.php">Leggi i Commenti!</a>';
}
if ($titolo == 0) {
echo 'Titolo obbligatorio! <br><a href="form.php">Torna!</a>';
}
Ultima modifica di Jacki2 : 18-08-2007 alle ore 10.41.53
La lunghezza di una stringa la trovi con la funzione strlen.
Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
«Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen
un esempio sui controlli:
oppureCodice PHP:
if($titolo == "")
{
//Non è stato inserito il titolo
}
else
{
//ok
}
Codice PHP:
if(strlen($titolo) == 0)
{
//Non è stato inserito il titolo
}
else
{
//ok
}
io ho fatto cosi:
va bene? funziona funziona,...Codice PHP:
if ($titolo > NULL) {
$apri = fopen("testi/$nome.txt", "w");
fwrite($apri, $scrivi);
fclose($apri);
echo 'Commento inserito con successo! <br><a href="leggi.php">Leggi i Commenti!</a>';
}
if ($titolo == NULL) {
echo 'Titolo obbligatorio! <br><a href="form.php">Torna!</a>';
}
EDIT.
se voglio mettere sia $titolo che $testo,
come faccio a metterli entrambi qui: if ($titolo > NULL)???
Grazie...
Ultima modifica di Jacki2 : 18-08-2007 alle ore 12.53.58
ok...grazie...
per i campi obbligatori ho usato ||
Ho fatto anche che stampa la data!
ce un modo per fare che quando aggiungi dal form... si ordinano i commenti in base alla data, cioe l' ultimo va in cima?
Cioè vorresti ordinare i files nella directory testi in maniera decrescente secondo la data di creazione?
Allora prova così:
Se vuoi anche conoscere la data puoi usare filemtime() che restituisce il timestamp della creazione del file, poi potresti convertirlo in formato "normale" usando funzioni come date() o getdate().Codice PHP:
<?php
foreach (glob("testi/*.txt") as $filename) {
$ultimamod = filemtime($filename);
$f[$ultimamod] = $filename;
ksort($f);
$f = array_reverse($f, TRUE);}
foreach($f as $filename){
$handle = fopen($filename, "r");
echo fread($handle, filesize($filename)); }
?>
Ciao!
no, io ho una pag leggi.php vorrei che venissero fuori in ordine di data, cioe la data piu nuova in cima! con quel codice si puo?
EDIT: il codice che mi hai passato funziona! grazie...
Ultima modifica di Jacki2 : 18-08-2007 alle ore 17.21.44
Serve proprio a quello
Mostra il contenuto dei files nella cartella testi in ordine dal più nuovo al più vecchio.
ok, Grazie...
Ora, come si fa a fare visualizzare il link del file.txt che é stato preso?
Dopo o prima (a seconda di dove vuoi mostrare il link - sopra o sotto il testo) di:
metti:Codice PHP:
echo fread($handle, filesize($filename));
Codice PHP:
echo "<a href=\"".$filename."\">".$filename."</a>";
Ho provato a mettere un opzione di cancellazione:
$cancella = unlink($filename);
poi piu in sotto:
echo "<a href=\"".$cancella."\">".Cancella."</a>";
ma mi da degli errori!!!
cosa sbagliO?
Per cancellare un file devi creare una nuova pagina, dove passi il nome del file tramite get, e poi usi la funzione unlink() per cancellare il file...
Codice PHP:
<?php
foreach (glob("testi/*.txt") as $filename) {
$ultimamod = filemtime($filename);
$f[$ultimamod] = $filename;
ksort($f);
$f = array_reverse($f, TRUE);}
foreach($f as $filename){
$handle = fopen($filename, "r");
echo fread($handle, filesize($filename));
echo "<a href=\"?do=cancella&file=".$filename."\">Cancella</a>";
}
if(isset($_GET['do']) && $_GET['do']=="cancella" && !empty($_GET['file']))
{
if(file_exists($_GET['file']))
unlink($_GET[file]) OR exit("Errore nell'eliminazione del file ".$_GET['file']);
else
exit("Il file ".$_GET['file']. "per cui ha richiesto l'eliminazione non esiste!");
}
?>
come mai se riamane solo un mess... nn si puo cancellare?
In che senso non si può cancellare?
Che errore ricevi?
Come si chiama il file che cerchi di eliminare?