• User Newbie

    Errore invio form

    Buongiorno a tutti, ho creato un form per iscrizione a delle news.
    Questo il file php

    <?php
    // Recupero i valori inseriti nel form
    $email = $_POST['email'];
    $url = $_POST['url'];
    
    $delay = "6";
    $url = "http://www.sitoprova.it";
    
    // verifico che tutti i campi siano stati compilati
    if (!$email) {
      echo 'Tutti i campi del modulo sono obbligatori!';    
    }
    
    // verifico se un indirizzo email è valido
    elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      echo 'Indirizzo email non corretto';
    }else{
     
    // compilo un messaggio combinando i dati recuperati dal form
    $testo = "Email: " . $email . "\n"              
           . "Gradirei iscrivermi alla vostra newsletter. Distinti saluti. " . $msg;
           
           
    // uso la funzione mail di PHP per inviare questi dati al mio indirizzo di posta
    mail('[email protected]', 'Iscrizione newsletter sitoprova', $testo);
    
    // Mostro un messaggio di conferma all'utente
    print "<body>
    <table align='center' bordercolor='#ec7632'>
      <tr>
        <td>
    <div align='center'><font face='Roboto+Condensed, Verdana, Arial, Helvetica, sans-serif'>
    Grazie per esserti iscritto alla nostra newsletter</font><br><br>
    Ti terremo aggiornato sulle iniziative e gli eventi.<br><br>		
    Per tornare all'Home attendi 6 secondi o <a href='http://www.sitoprova.it'>Clicca qui</a></font></div></td>
    <meta http-equiv='refresh' content='$delay;  url=$url'>
    </tr>
    </table>
    </body>";
    }
    ?>
    

    Se provo ad inviarlo tramite pagina, mi ritorna il seguente errore:

    errore.jpeg

    Cosa sbaglio?
    Grazie per la vostra pazienza e il vostro aiuto


    mirkomassarutto overclokk 2 Risposte
  • User Attivo

    @darkbox Perdonami ma dove è l'errore? mi pare una comunicazione corretta ed è quella che scrivi nell'HTML


    D 1 Risposta
  • User Newbie

    @mirkomassarutto Il form, non invia mail e la pagina rimane bloccata in quella posizione. Inoltre mi appaiono quei simbolini a sinistra della pagina (vedi immagine)


    mirkomassarutto 1 Risposta
  • User Attivo

    @darkbox i "simbolini" sono evidentemente un errore nello script.. controlla i tag..per il resto dovrei vedere meglio cosa fai..
    la prima domanda è se i dati li ricevi..


    D 1 Risposta
  • User Newbie

    @mirkomassarutto no non ricevo nessun dato. Per i simbolini ho già controllato ma mi sembra tutto ok, sto diventando matto con questo problema, ma come dicevo sora sono autodidatta e alle prime armi è quindi tutto un pò complicato.
    Chiedo: potrebbe essere un problema del server (Register.it) su dove è appoggiato il sito?


    g.lanzi 1 Risposta
  • Moderatore

    Ciao @darkbox,
    Prova a usare un echo invece che un print nel mostrare il messaggio di conferma, e metti la stringa tra parentesi.

    I caratteri in fondo sembrano essere gli ultimi dello script.

    In locale lo script a me funziona.

    Considera comunque che:

    1. Gli attributi align e bordercolor usati nel tag table e in div sono deprecated, dovresti usare CSS per queste cose
    2. Il tag font non è supportato in HTML5

    D 1 Risposta
  • User Newbie

    @g-lanzi Ho appena provato ad inviare il form attraverso un'altro server (Aruba) e il problema non si presenta, tutto ok. A questo punto penso sia un problema collegato al server dove è appoggiato il web. Proverò a chiedere assistenza a loro.
    Grazie


  • Moderatore

    @darkbox

    Alcune note:

    Se a fine script non c'è altro, ovvero sei a fine pagina e non ci sono tag HTML non terminare lo script con ?> che è il tag di chiusura di PHP e si può omettere se appunto non c'è bisogno di aggungere altro.

    // verifico che tutti i campi siano stati compilati
    if (!$email) {
      echo 'Tutti i campi del modulo sono obbligatori!';    
    }
    

    Queste validazioni falle in javascript perché miglori la UX dell'utente, se un campo è sbagliato devi aggiungere una nota subito prima che venga inviato il form, facendole in PHP il feedback ce l'hai solo dopo il submit e non prima.

    Quel form non è per nulla sicuro, never trust user input, se è tutto li lo script allora sanitizza subito:

    $email = \filter_var( $_POST['email'], FILTER_SANITIZE_EMAIL );
    $url = \filter_var( $_POST['url'], FILTER_SANITIZE_URL );
    

    Poi $msg non è definita

    Poi si potrebbe continuare migliorando quello script e renderlo più leggibile per esempio evitando tutti gli else che complicano la lettura e introducendo string template e printf(), però prima vediamo di farlo funzionare.