Visualizzazione risultati 1 fino 7 di 7
Like Tree1Likes
  • 1 Post By mzanella

Discussione: Inserimento di una variabile all'interno di una stringa tramite form [PHP] Code

  1. #1
    Guest

    Exclamation Inserimento di una variabile all'interno di una stringa tramite form [PHP] Code

    Salve ragazzi!
    stavo cercando di creare un file in php che mi crea una pagina html tramite un semplice bottone. Ho cercato poi di integrare un form html che mi restituisca due variabili, ovvero il nome del file e il testo della pagina, solo che mi da determinati errori inserendo le variabili che ho preso tramite il metodo POST dal form all'interno della stringa codice che sarebbe il testo del mio file html. O meglio : non mi da errori di codice ma andando a cliccare su Crea mi porta sul file php, che però una volta schiacciato il bottone 'crea pagina' non mi crea alcun file.
    Ecco il codice :

    nuovo_progetto.html :
    Codice HTML:
    <form action="nuovo_progetto.php" method="post">
    <label>Nome file :
    <input type="text" name="namefile" /></label><br>
    <label> Testo :
    <input type="text" name="text" /></label><br>
    <input type="submit" value="Crea">
    </form>
    nuovo_progetto.php :
    Codice PHP:
    <?php
    $namefile
    = $_POST['namefile'];
    $text = $_POST['text'];
    if (isset(
    $_POST["crea"])) {
    $file = "$namefile[namefile].html";

    $codice = "
    <html>
    <head><title>
    $namefile[namefile] </titile>
    </head>
    <boby>
    $text[text] </body>
    </html>
    "
    ;

    $fo = fopen($file, "w");
    fwrite($fo, $codice);
    fclose($fo);
    }
    ?>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
    <input type="submit" name="crea" value="Crea Pagina"/>
    </form>
    qualcuno saprebbe darmi una mano? Avevo anche pensato di scrivere il tutto in un solo file, solo che non so come procedere, premetto che sono quasi alle prime armi con il PHP. Grazie mille in anticipo, sarei felice se sapreste darmi una mano

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Posto che il file nuovo_progetto.html è corretto così com'è, ci sono diverse aspetti migliorabili in nuovo_progetto.php.

    Innanzitutto, il secondo form è completamente inutile: indica alla pagina stessa di attivare la creazione, ma non le passa i dati necessari per farlo. Idealmente dovrebbe ripassare gli stessi dati che ha ricevuto dal primo form, ma questo è appunto un "rimbalzo" inutile. È molto più pratico fare in modo che sia nuovo_progetto.php a creare direttamente la pagina (a meno che tu non ritenga di avere motivi particolari per agire diversamente).

    La logica è quindi:
    • controlla se tutti i dati necessari (namefile e text) sono stati ricevuti (altrimenti mostra un messaggio d'errore e termina)
    • elabora i dati ricevuti e genera il codice HTML di cui hai bisogno
    • salva il codice nel file di destinazione (non c'è bisogno di usare funzioni di basso livello come fwrite, file_put_contents è più pratico in questo contesto)

    il che si traduce in
    Codice PHP:
    // Mostra un messaggio d'errore se mancano dei dati
    if (!isset($_POST['namefile'], $_POST['text'])) {
    die(
    "Mancano alcuni dati");
    }

    // Elabora i dati ricevuti
    $namefile = $_POST['namefile'];
    $text = $_POST['text'];

    $path = $nomefile . ".html";
    $code = "
    <html>
    <head>
    <title>
    $namefile</titile>
    </head>
    <boby>
    $text
    </body>
    </html>
    "
    ;

    // Genera il file HTML
    file_put_contents($path, $code);
    Attenzione però: permettere di creare file HTML in questo modo indiscriminato è piuttosto pericoloso. Cosa succederebbe se venisse indicato, come nome del file, "nuovo_progetto" o il nome di un'altra pagina del sito? Il tuo file HTML verrebbe cancellato e sostituito da quello così creato.
    Inoltre è molto facile inserire del codice JavaScript, aprendo tutta un'altra serie di vulnerabilità.
    noiliceali likes this.

  3. #3
    Guest

    Predefinito

    Ciao, scusami se ti rispondo solo ora ma non ho avuto tempo per collegarmi ad altervista.
    Comunque anche con il tuo codice purtroppo il problema persiste, clicco su 'Crea' nel primo form e mi manda al codice php da te scritto che non mi genera la pagina
    Comunque avevo già pensato a quelle cose e trovato una soluzione, ti ringrazio per il tuo aiuto sei stato gentilissimo! Se riesci a trovarmi una soluzione anche a quest'altro problema mi fai un piacere enorme

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Abilita il report degli errori inserendo
    Codice PHP:
    error_reporting(E_ALL);
    all'inizio della pagina con lo script, in modo che sia più chiaro cosa stia succedendo.

  5. #5
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    C'è una svista in tutti e due i codici (HTML e PHP)
    Codice HTML:
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta name="generator" content="AlterVista - Editor HTML"/>
      <title>spazio utenti</title>
    </head>
    <body>
    <form action="nuovo_progetto.php" method="post">
    <label>Nome file :
    <input type="text" name="namefile" /></label><br>
    <label> Testo :
    <input type="text" name="text" /></label><br>
    <input type="submit" value="Crea">
    
    </form>
    </body>
    </html>
    Codice PHP:
    <?php
    header
    ('Content-type: text/html; charset=utf-8');
    // Mostra un messaggio d'errore se mancano dei dati
    if(!isset($_POST['namefile'], $_POST['text'])) {
    die(
    "<html>
    <head>
    <title>errore dati</title>
    </head>
    <body>Mancano alcuni dati</body>
    </html>"
    );
    }
    // Elabora i dati ricevuti
    $esito = "file non creato";
    $namefile = $_POST['namefile'];
    $text = $_POST['text'];
    $path = $namefile.".html";
    $code = "<html>
    <head>
    <title>
    {$namefile}</title>
    </head>
    <body>
    {$text}</body>
    </html>"
    ;
    // Genera il file HTML
    if(file_put_contents($path, $code) != 0) {
    $esito = "file creato";
    }
    echo
    "<html>
    <head>
    <title>View result</title>
    </head>
    <body><pre>
    {$esito}
    {$path}
    "
    .htmlentities($code, ENT_COMPAT, "UTF-8")."</pre></body>
    </html>"
    ;
    ?>

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Non si tratta di sviste.
    L'HTML mostrato è solo quello interessato dal problema, dunque è normale che non ci fossero i tag da te indicati.
    Lo stesso discorso per lo script PHP: la parte proposta è quella responsabile della creazione del file secondo le indicazioni date, se questo dovrà poi essere seguito da una stampa a video non è pertinente. Se l'autore volesse, ad esempio, lavorare in maniera asincrona con AJAX sarebbe tutto da rimuovere.

  7. #7
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Scusami per non essermi espresso meglio.. Non esiste un tag "boby" e una variabile di nome $nomefile...

Regole di scrittura

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