Visualizzazione risultati 1 fino 19 di 19

Discussione: Prelevare dati e salvarli in una pagina HTML

  1. #1
    spacetosocial non è connesso Neofita
    Data registrazione
    25-02-2011
    Messaggi
    10

    Question Prelevare dati e salvarli in una pagina HTML

    Buonasera a tutti, ho creato una piccola pagina HTML, nella quale c'è un form. Vorrei sapere come posso salvare i dati inseriti dagli utenti nel form in una pagina HTML tramite PHP.
    Codice HTML:
    <HTML>
    <HEAD>
    <form action="get.php">
    <table class="codese">
    <tr><th colspan="2" style="text-align: center;">Spotted</th></tr>
    <tr><td colspan="2"><span class="sizedue">Tutti i messaggi verranno ovviamente pubblicati anonimamente.<br>Inviate il vostro messaggio adesso!</span></td></tr>
    <tr><td colspan="2">&nbsp;</td></tr>
    <td><textarea name="commento" rows="15" cols="50"></textarea></td></tr>
    <BR>
    <tr><td><input type="submit" value="Invia Dati"><input type=reset value="Reset!" />
    </table>
    </form>
    Grazie
    Ultima modifica di spacetosocial : 06-04-2013 alle ore 18.46.55

  2. #2
    Guest

    Predefinito

    Vediamo se ho capito bene:
    Hai un form dove un utente inserisce un messaggio e vorresti che questo sia pubblicato direttamente in una pagina a scelta? :)

  3. #3
    spacetosocial non è connesso Neofita
    Data registrazione
    25-02-2011
    Messaggi
    10

    Predefinito

    Esatto, in modo tale che questa pagina possa essere letta da tutti :) Ho provato questo .php ma mi restituisce errore quando lo eseguo:

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

    // 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["messaggio"]) . " " .

    // chiude il file
    fclose($fp);
    ?>

    <font size="5">Fatto</font>
    Ultima modifica di spacetosocial : 06-04-2013 alle ore 19.10.06

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Visualizzi un messaggio di errore perché il codice è scritto male. Nella riga in cui chiami la funzione fputs manca una parentesi chiusa, e c'è un operatore di concatenazione di stringhe di troppo.
    Comunque potresti più semplicemente usare la sola funzione file_put_contents.

  5. #5
    spacetosocial non è connesso Neofita
    Data registrazione
    25-02-2011
    Messaggi
    10

    Predefinito

    Grazie, alla fine sono riuscito a fare questo lavoro, ma c'è solo un problema, ogni nuovo messaggio che viene lasciato, si visualizza nella pagina HTML uno dietro l'altro, insomma tutto attaccato e non in colonna. So come andare a capo con la funzione <BR> ma non so come agire sul file che crea.

    Codice PHP:
    <?php
    $db
    = "spotted.html"; // in questo file verranno salvati i dati.

    $fp = fopen($db, "a+");
    fwrite($fp, $_POST["commento"] . "\n"); // salvo i dati nel file
    fclose($fp);
    ?>

    <font size="5">Fatto</font><BR><a href="spotted.html">GUARDA TUTTI GLI SPOTTED!</a>

  6. #6
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Potresti usare banalmente la funzione nl2br, che converte le nuove righe in tag br, ma non è il massimo come codice prodotto. Dovresti anche evitare l'uso dell'elemento font, e usare piuttosto i fogli di stile.

  7. #7
    spacetosocial non è connesso Neofita
    Data registrazione
    25-02-2011
    Messaggi
    10

    Predefinito

    Ho un po' provato ad usare la funzione nl2br ma senza risultati. Scusa per il disturbo, ma sono nuovissimo di queste cose ;)

  8. #8
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Quando hai problemi scrivi sempre il codice, così ti possiamo indicare quali sono i problemi e come risolverli.

  9. #9
    spacetosocial non è connesso Neofita
    Data registrazione
    25-02-2011
    Messaggi
    10

    Predefinito

    So che avrò scritto una cavolata assurda, ma non ci sto capendo più nulla O.o
    Codice PHP:
    <?php
    $db
    = "spotted.html"; // in questo file verranno salvati i dati.

    $fp = fopen($db, "a+");
    fwrite($fp, $_POST["commento"] . "\n"); // salvo i dati nel file
    fclose($fp);
    nl2br($fp);
    ?>

    <font size="5">Fatto</font>
    <br>
    <a href="spotted.html">GUARDA TUTTI GLI SPOTTED!</a>

  10. #10
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    In teoria sarebbe meglio fornire la pagina HTML ben scritta, con gli elementi html, head, body e così via, non con il solo testo e qualche tag br. Potresti leggere il contenuto del file (con file_get_contents e convertire la stringa restituita da questa funzione con nl2br) e includerlo direttamente nella pagina principale, così risparmi anche all'utente qualche click, no?

  11. #11
    spacetosocial non è connesso Neofita
    Data registrazione
    25-02-2011
    Messaggi
    10

    Predefinito

    Sto cercando di sistemare tutto, ma ancora non funziona:

    Codice PHP:
    <!DOCTYPE html>
    <html>
    <head>
    <title>Spotted</title>
    </head>

    <body>
    <?php
    $db
    = "spotted.html"; // in questo file verranno salvati i dati.

    $fp = fopen($db, "a+");
    fwrite($fp, $_POST["commento"] . "\n"); // salvo i dati nel file
    $spotted = file_get_contents('/get.php');
    echo
    nl2br($spotted);
    fclose($fp);
    ?>

    <font size="5">Fatto</font>
    <br>
    <a href="spotted.html">GUARDA TUTTI GLI SPOTTED!</a>
    </body>

    </html>

  12. #12
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Ecco, così il codice va già meglio, hai anche messo la dichiarazione di DOCTYPE!
    Però, perché vai a leggere il contenuto del file get.php? Leggi il file spotted.html!
    Anche se a questo punto però fai prima a salvare direttamente il commento con il br appresso, anziché metterlo ogni volta che lo leggi.
    Codice PHP:
    <!DOCTYPE html>
    <html>
    <head>
    <title>Spotted</title>
    </head>
    <body>
    <?php
    $db
    = "spotted.html"; // in questo file verranno salvati i dati.

    file_put_contents($db, $_POST['commento'] . '\n', FILE_APPEND); // salvo i dati nel file
    $spotted = file_get_contents($db);
    echo
    nl2br($spotted);
    ?>

    <p><strong>Fatto!</strong></p>
    <p><a href="spotted.html">GUARDA TUTTI GLI SPOTTED!</a></p>
    </body>
    </html>
    Oppure con l'ottimizzazione che ti suggerivo prima:
    Codice PHP:
    <!DOCTYPE html>
    <html>
    <head>
    <title>Spotted</title>
    </head>
    <body>
    <?php
    $db
    = "spotted.html"; // in questo file verranno salvati i dati.

    file_put_contents($db, $_POST['commento'] . '<br />', FILE_APPEND); // salvo i dati nel file
    echo file_get_contents($db);
    ?>

    <p><strong>Fatto!</strong></p>
    <p><a href="spotted.html">GUARDA TUTTI GLI SPOTTED!</a></p>
    </body>
    </html>
    Anche se sarebbe molto meglio evitare il br ed usare qualcosa di più semantico, come una lista (è di fatto una lista di commenti, no?).

  13. #13
    spacetosocial non è connesso Neofita
    Data registrazione
    25-02-2011
    Messaggi
    10

    Predefinito

    Grazie Mille così funziona! Si è una lista di commenti comunque :)

  14. #14
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Funzionare funziona, però è vulnerabile all'iniezione di codice HTML all'interno della pagina. Per capire cosa ciò comporta ti ho preparato una piccola dimostrazione, spero non te la prenda.

  15. #15
    spacetosocial non è connesso Neofita
    Data registrazione
    25-02-2011
    Messaggi
    10

    Predefinito

    Si ho visto, tranquillo che non me la prendo.
    Si può prevenire un attacco del genere?
    Ultima modifica di spacetosocial : 06-04-2013 alle ore 22.35.05

  16. #16
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    L'indirizzo del tuo sito è deducibile dal tuo nome utente (ed è anche presente nel tuo profilo utente, come impostazione predefinita).
    Per evitare che un malintenzionato possa includere del codice arbitrario all'interno delle tue pagine è sufficiente usare la funzione htmlspecialchars per rendere innocui i caratteri speciali. Usala nel momento in cui vai a scrivere nel file spotted.html.

  17. #17
    spacetosocial non è connesso Neofita
    Data registrazione
    25-02-2011
    Messaggi
    10

    Predefinito

    Ho provato in questo modo, ma non funziona :(

    Codice PHP:
    <!DOCTYPE html>
    <html>
    <head>
    <title>Spotted</title>
    </head>
    <body>
    <?php
    $db
    = "spotted.html"; // in questo file verranno salvati i dati.

    file_put_contents($db, $_POST['commento'] . '<br />', FILE_APPEND); // salvo i dati nel file
    echo htmlspecialchars($db,ENT_COMPAT,ISO-8859-1);
    echo
    file_get_contents($db);
    ?>

    <p><strong>Fatto!</strong></p>
    <p><a href="spotted.html">GUARDA TUTTI GLI SPOTTED!</a></p>
    </body>
    </html>

  18. #18
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Così stai solo stampando il valore della variabile $db, devi invece effettuare la conversione del testo inserito dall'utente quando vai a scrivere nel file, così:
    Codice PHP:
    file_put_contents($db, htmlspecialchars($_POST['commento']) . '<br />', FILE_APPEND);

  19. #19
    spacetosocial non è connesso Neofita
    Data registrazione
    25-02-2011
    Messaggi
    10

    Predefinito

    Grazie mille! Mi sei stato di grandissimo aiuto :)

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
  •