Visualizzazione risultati 1 fino 13 di 13
Like Tree1Likes
  • 1 Post By javascripter

Discussione: Dati form su file txt via PHP

  1. #1
    fgbect non è connesso Neofita
    Data registrazione
    15-04-2008
    Residenza
    Milano
    Messaggi
    27

    Question Dati form su file txt via PHP

    Salve, ho bisogno di inviare dei dati (4 stringhe) prelevati da un form ad una pagina in php che crei e tenga aggiornato l'elenco dei dati in una pagina txt.
    Ho provato innumerevoli soluzioni e nessuna ha funzionato, il form invia alla pagina php la richiesta e crea una pagina txt completamente bianca o tutt'al più php mi segnala un errore.

    Sarei grato se poteste darmi una dritta.

    nella pagina html il cuore del form è questo:

    ---------------------------------------------------------------------------------------------------------------------------------
    Codice HTML:
    <form name="modulo" action="http://www.[I][B].......(pagina omessa)[/B][/I]" method="post">
    <table>
    	<tr>
    		<td>voce1:</td><td><input type="text" name="voce1" size="35"></td>
    	</tr>
    	<tr>
    		<td>voce2:</td><td><input type="text" name="voce2" size="10"></td>
    	</tr>
    	<tr>
    		<td>voce3:</td><td><input type="text" name="voce3" size="10"></td>
    	</tr>
    	<tr>
    		<td>voce4:</td><td><input type="text" name="voce4" size="35"></td>
    	</tr>
    	<tr>
    		<td colspan="2" align="center"><input type="submit" value="Invia dati"></td>
    	</tr>
    </table>
    </form>
    ---------------------------------------------------------------------------------------------------------------------------------

    nel file php ho scritto così:


    ---------------------------------------------------------------------------------------------------------------------------------
    Codice PHP:
    <?php
    // nome del file in cui inserire i testi
    $file = "./filetesti.txt";

    // apre il file in modalità "append", se non esiste lo crea
    $fp = fopen($file, "a");

    // inserisce i valori ricevuti dal form in coda al file
    fputs($fp, htmlspecialchars($_POST["voce1"]) . " " . htmlspecialchars($_POST["voce2"]) . htmlspecialchars($_POST["voce3"]) . " " . htmlspecialchars($_POST["voce4"]) . "\r\n");

    // chiude il file
    fclose($fp);
    ?>
    <font size="5">Fatto</font>
    ---------------------------------------------------------------------------------------------------------------------------------

    la risposta è "Fatto", crea il file di testo ma è completamente bianco.

    Qualcuno mi può aiutare?

    Grazie

    Piccolo aggiornamento:
    La riga dove ho scritto in php """ $fp = fopen($file, "a"); """ l'ho modificata così: """ $fp = fopen($file, 'a'); """ ma ancora niente.
    Ultima modifica di javascripter : 02-07-2014 alle ore 08.53.47 Motivo: +[html],[php]

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    La funzione fputs (alias di fwrite) restituisce il numero di byte scritti sul file o FALSE in caso di insuccesso.
    La modifica di "a" in 'a' non fa alcuna differenza in php (in C la funzione prende chiaramente in input una stringa e non un carattere, ma lasciamo stare ).

    Per semplificare le operazioni sui file, php mette a disposizione file_put_contents e file_get_contents e ti consiglio di utilizzarle per via della loro semplicità.

    file_put_contents ha lo stesso valore di ritorno di fputs, di cui ho scritto all'inizio di questo post.
    Nel manuale di php (che ti ho linkato), trovi molti esempi sull'utilizzo.
    Ultima modifica di javascripter : 02-07-2014 alle ore 09.00.20

  3. #3
    fgbect non è connesso Neofita
    Data registrazione
    15-04-2008
    Residenza
    Milano
    Messaggi
    27

    Exclamation

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    La funzione fputs (alias di fwrite) restituisce il numero di byte scritti sul file o FALSE in caso di insuccesso.
    La modifica di "a" in 'a' non fa alcuna differenza in php (in C la funzione prende chiaramente in input una stringa e non un carattere, ma lasciamo stare ).

    Per semplificare le operazioni sui file, php mette a disposizione file_put_contents e file_get_contents e ti consiglio di utilizzarle per via della loro semplicità.

    file_put_contents ha lo stesso valore di ritorno di fputs, di cui ho scritto all'inizio di questo post.
    Nel manuale di php (che ti ho linkato), trovi molti esempi sull'utilizzo.
    GRAZIE, anche se non ho capito bene, la sintassi di php è ancora un po' ostica per me e comunque abbia scritto il codice la risposta è composta da soli messaggi di errore... sic.

    Grazie anche per lo spostamento del secondo messaggio, lo terrò in debita considerazione, pensavo che passato un certo numero di ore (in altri forum un'ora) non fosse più possibile modificare, ma non ho controllato, grazie ancora.

    Seppur parlo e leggo fluentemente in inglese, ho avuto qualche difficoltà a leggere la guida php, sarà il caldo. Ho cercato in giro su internet altre risorse sul php ma penso che mi ritirerò appena ho un attimo di tempo a cercare qualcosa in biblioteca... se puoi aiutarmi ancora te ne sarò ancora grato.

    fgb

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Prova questo ;)

    Codice PHP:
    <?php
    error_reporting
    (E_ALL);

    // file in cui scrivere
    $file = "filetesti.txt";

    /* contiene il testo da scrivere nel file: voce1 voce2 ... voce4
    * ferma l'esecuzione nel caso un campo voce i-esimo non sia definito
    */
    $contenuto = "";

    for(
    $i = 1; $i <= 4; $i++) {
    $voce = 'voce' . $i;
    isset(
    $_POST[$voce]) || die("Attenzione, il campo $voce non è stato inviato.");
    $contenuto .= htmlspecialchars($_POST[$voce]) . " ";
    }

    // concatena il carattere di line feed (ritorno a capo: \n)
    $contenuto .= PHP_EOL;

    // ora scrivi sul file, ma controlla se ci sono stati errori:
    if ( ($result = file_put_contents($file, $contenuto, FILE_APPEND | LOCK_EX)) === false ) {
    echo
    "Errore: impossibile scrivere sul file $file.";
    } else {
    echo
    "Successo. Scritti $result byte ( di " . strlen($contenuto) . " ).";
    }
    ?>
    fgbect likes this.

  5. #5
    fgbect non è connesso Neofita
    Data registrazione
    15-04-2008
    Residenza
    Milano
    Messaggi
    27

    Wink grazie

    grazie grazie grazie grazie grazie grazie
    grazie

    Adesso funziona, l'unico problema è che il form e il php devono essere residenti sullo stesso sistema, io avrei preferito operare con un form in locale che va a chiamare la pagina php in internet ma va bene anche così.

    Ancora... GRAZIE!

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,067

    Predefinito

    Citazione Originalmente inviato da fgbect Visualizza messaggio
    l'unico problema è che il form e il php devono essere residenti sullo stesso sistema, io avrei preferito operare con un form in locale che va a chiamare la pagina php in internet
    Non ho letto il codice, ma teoricamente dovrebbe funzionare ugualmente impostando una url di un sito, anche da locale.

    Ciao!

  7. #7
    fgbect non è connesso Neofita
    Data registrazione
    15-04-2008
    Residenza
    Milano
    Messaggi
    27

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Non ho letto il codice, ma teoricamente dovrebbe funzionare ugualmente impostando una url di un sito, anche da locale.

    Ciao!
    Lo immaginavo anch'io, ma non ha funzionato, comunque grazie.

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,067

    Predefinito

    Io non lo immagino, ma l'ho usato molte volte un form in locale che punta ad un sito esterno.

    Ciao!

  9. #9
    fgbect non è connesso Neofita
    Data registrazione
    15-04-2008
    Residenza
    Milano
    Messaggi
    27

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Io non lo immagino, ma l'ho usato molte volte un form in locale che punta ad un sito esterno.

    Ciao!
    Mi fa piacere, comunque sto sperimentando il PHP da poco, magari con il tempo riuscirò a fargli fare ciò che voglio.

    Ciao

  10. #10
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,067

    Predefinito

    Probabilmente stai sbagliando qualcosa. Puoi mostrare il form che usi in locale e la pagina PHP che riceve i dati sul server?

    Ciao!

  11. #11
    fgbect non è connesso Neofita
    Data registrazione
    15-04-2008
    Residenza
    Milano
    Messaggi
    27

    Question Problema risolto, rispondo alla curiosità e posto un SECONDO PROBLEMA!!!!!

    Codice HTML:
    <p class="ct">
    Benvenuto bla bla bla<br><br>
    <table>
    <tr>
    <td>
    <form action="http://sito/ve/xxxxx.txt" target="_top">
    
    <input type="submit"value="leggi il file ">
    </form>
    </td>
    
    <td>
    <form action="http://sito/ve/yyyy.txt" target="_top">
    
    <input type="submit"value="leggi il file">
    </form>
    </td>
    <td>
    <form action="http://fsito/ve/zzzzz.htm" target="_top">
    
    <input type="submit"value="Pagina">
    </form>
    </td>
    
    <td>
    <form action="http://paginalocale" target="_top"><input type="submit"value="Torna al cccc">
    
    </form>
    </td>
    </tr>
    </table>
    
    <hr color="blue">
    <p class="titolo1sinistro">titolo</p>
    <center>
    <form name="modulo" action="pagina.php" method="post">
    <table>
    	<tr>
    		<td>voce1:</td><td><select name="voce1">
    						<option selected> [I]ELENCO[/I] </option>
                            
    					</select>
    </td>
    	</tr>
    	<tr>
    		<td>voce2:</td><td><input type="text" name="voce2" size="10"maxlength"10" autocomplete="off"></td>
    	</tr>
    	<tr>
    		<td>voce3:</td><td><input type="text" name="voce3" size="10" maxlength="8" autocomplete="off"></td>
    	</tr>
    	<tr>
    		<td>voce4:</td><td>[I]VOCE4[/I]</td><td><input type="hidden" name="voce4" value="[I]VOCE4[/I]"></td>
    	</tr>
        
        	
    	<tr>
    		<td align="center">&nbsp;<td><input type="submit" value="Invia dati"></td>
    	</tr>
    </table>
    </form>
    <!-- ...continua -->
    E questo è in HTML
    ---------------------------------------------------------

    Codice PHP:
    <script language="JavaScript">
    <!--
    data = new Date();
    ora =data.getHours();
    minuti=data.getMinutes();
    secondi=data.getSeconds();
    mese = data.getMonth();
    date= data.getDate();
    year= data.getYear();
    if(minuti< 10)minuti="0"+minuti;
    if(secondi< 10)secondi="0"+secondi;
    if(year<1900)year=year+1900;
    if(ora<10)ora="0"+ora;
    if(mese == 0) mese = "Gennaio ";
    if(mese ==1) mese = "Febbraio ";
    if(mese ==2) mese = "Marzo ";
    if(mese ==3) mese = "Aprile ";
    if(mese ==4) mese = "Maggio ";
    if(mese ==5) mese = "Giugno ";
    if(mese ==6) mese = "Luglio ";
    if(mese ==7) mese = "Agosto ";
    if(mese ==8) mese = "Settembre ";
    if(mese ==9) mese = "Ottobre ";
    if(mese ==10) mese = "Novembre ";
    if(mese ==11) mese = "Dicembre";
    document.write("Inviato il "+date+" "+mese+" "+year+" - ora "+ora+":"+minuti+":"+secondi);
    //-->
    </script>
    <br>

    <?php
    error_reporting
    (E_ALL);

    // file in cui scrivere
    $file = "targhe.txt";

    /* contiene il testo da scrivere nel file: voce1 voce2 ... voce4
    * ferma l'esecuzione nel caso un campo voce i-esimo non sia definito
    */
    $contenuto = "";

    for(
    $i = 1; $i <= 4; $i++) {
    $voce = 'voce' . $i;
    isset(
    $_POST[$voce]) || die("Attenzione, il campo $voce non &egrave; stato inviato.");
    $contenuto .= htmlspecialchars($_POST[$voce]) . " \t ";
    }


    // concatena il carattere di line feed (ritorno a capo: \n)
    $contenuto .= PHP_EOL;

    // ora scrivi sul file, ma controlla se ci sono stati errori:
    if ( ($result = file_put_contents($file, $contenuto, FILE_APPEND | LOCK_EX)) === false ) {
    echo
    "Errore: impossibile scrivere sul file $file.";
    } else {
    echo
    "Successo. Scritti $result byte ( di " . strlen($contenuto) . " ). \r\n. Dati inviati: $contenuto";
    }
    ?>
    Questa invece è la pagina php sul sito
    ----------------------------------------------------

    funziona solo se le due pagine operano sul server, comunque questo problema è risolto in questo modo, ora avrei un secondo dilemma.

    Come vedete alla pagina php ho aggiunto uno script javascript che mostra nella risposta data e ora di invio del modulo, qualcuno può spiegarmi come posso inviare la medesima informazione sul file txt di destinazione? Magari come una voce5 che viaggia hidden?

    Grazie ancora a tutti.
    Ultima modifica di javascripter : 06-07-2014 alle ore 21.36.47 Motivo: +[html,php]

  12. #12
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    La prima cosa che ho notato è che al tag form non hai specificato l'attributo method. Dovresti esplicitamente impostarlo su POST. Potrebbe essere questo il problema.

    Per l'altra domanda, ti consiglio di aprire un nuovo topic nella sezione javascript.
    Tuttavia, puoi usare benissimo PHP per ottenere la data di invio. La funzione è questa: date.
    Così eviti javascript e la classe Date (il cui ogetto instanziato fornisce valori relativi all'orologio del client).

  13. #13
    fgbect non è connesso Neofita
    Data registrazione
    15-04-2008
    Residenza
    Milano
    Messaggi
    27

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    La prima cosa che ho notato è che al tag form non hai specificato l'attributo method. Dovresti esplicitamente impostarlo su POST. Potrebbe essere questo il problema.

    Per l'altra domanda, ti consiglio di aprire un nuovo topic nella sezione javascript.
    Tuttavia, puoi usare benissimo PHP per ottenere la data di invio. La funzione è questa: date.
    Così eviti javascript e la classe Date (il cui ogetto instanziato fornisce valori relativi all'orologio del client).

    Che dire, ancora GRAZIE, la stringa da usare è forse questa?

    string date ( string $format [, int $timestamp = time() ] )

    e dove la dovrei mettere, nella pagina htm o nella php?

    poi, scusa se insisto, quando parli dell'attributo method io ho scritto così:

    <form name="modulo" action="pagina.php" method="post">

    Saluti.

    AGGIORNAMENTO ULTIM'ORA

    CI SONO RIUSCITO!!!

    GRAZIE
    Ultima modifica di fgbect : 06-07-2014 alle ore 22.42.42

Tags for this Thread

Regole di scrittura

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