• User

    Problema form php...ricevo una mail vuota

    Avrei bisogno di aiuto se possibile....ho creato un form sul mio sito con relativa pagina .php per l'invio,fino qui tutto ok,la mail viene spedita ma una volta arrivata e aperta i campi richiesti sono tutti vuoti,ho gia provato una decina di volte a compilare tutti i campi ma il risultato e' sempre uguale...una mail con tutti i campi vuoti...cosa sbaglio? 😞


  • User

    Eh, se non posti il tuo script non ci è possibile trovare l'errore..


  • User

    Scusami e' vero...

    codice php

    <?php
    /* INVIO SEMPLICE */
    $destinatario = "miamail";
    $oggetto = "Email inviata dal sito";
    $messaggio = "Citta: $Citta2\n";
    $messaggio .= "Mare: $Mare\n";
    $messaggio .= "Montagna: $Montagna\n";
    $messaggio .= "Lago: $Lago\n";
    $messaggio .= "Citta: $Citta\n";
    $messaggio .= "Provincia: $Provincia\n";
    $messaggio .= "Nome H: $NomeH\n";
    $messaggio .= "Categoria: $Categoria\n";
    $messaggio .= "Periodo offerta: $Periodo\n";
    $messaggio .= "Da euro: $Da\n";
    $messaggio .= "Sito internet: $Sito\n";
    $messaggio .= "Email: $Email\n";
    $messaggio .= "Nome Responsabile: $Nome\n";

    $da = $email;
    $intestazioni = "From: $da";
    mail($destinatario,$oggetto,$messaggio,$intestazioni);
    ?>

    questo invece il form html

    <form action="invia.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
    <fieldset>
    <legend>Info</legend>
    <h3>Compila tutti i dati </h3>
    <p>Posizione
    --->
    <input type="radio" name="radio" id="Citta2" value="Citta2" tabindex="10" />
    <label for="Citta2">Città </label>
    <input type="radio" name="radio" id="Mare" value="Mare" tabindex="20" />
    <label for="Mare">Mare</label>
    <input type="radio" name="radio" id="Montagna" value="Montagna" tabindex="30" />
    <label for="Montagna">Montagna</label>
    <input type="radio" name="radio" id="Lago" value="Lago" tabindex="40" />
    <label for="Lago">Lago</label>
    </p>

    <p>
    <label for="Citta"> Città </label>
    <input type="text" name="Citta" id="Citta" tabindex="50" />
    </p>

    <p>
    <label for="Provincia">Provincia</label>
    <input type="text" name="Provincia" id="Provincia" tabindex="60" />
    </p>

    <p>
      <label for="NomeH">Nome H</label>
      <input type="text" name="NomeH" id="NomeH" tabindex="70" />
      </p>
      <p>
      <label for="Categoria">Categoria</label>
      <select name="Categoria" size="1" id="Categoria" accesskey="1" tabindex="2">
        <option value="2">2</option>
        <option value="2.5">2.5</option>
        <option value="3">3</option>
        <option value="3.5">3.5</option>
        <option value="4">4</option>
        <option value="4.5">4.5</option>
        <option value="5">5</option>
      </select>
    </p>
    <p>
      <label for="Periodo">Periodo offerta dal/al</label>
      <input type="text" name="Periodo" id="Periodo" tabindex="80" />
      <label for="Da">Da â?¬/notte</label>
      <input type="text" name="Da" id="Da"tabindex="90" />
    </p>
    <p>
      <label for="Sito">Sito internet Hotel</label>
      <input type="text" name="Sito" id="Sito" tabindex="100" /> 
      <label for="Email">Email</label>
      <input type="text" name="Email" id="Email" tabindex="1100" />
    </p>
    <p>
      <label for="Nome"> Nome Responsabile</label>
      <input type="text" name="Nome" id="Nome" tabindex="120" />
    </p>
    
    
    <p>&nbsp;</p>
    <p>
      <label for="Invia"></label>
      <input type="submit" name="Invia" id="Invia" value="Invia" tabindex="130" />
    </p>
    

    </fieldset>
    </form>


  • User

    Proprio al volo (non ho manco letto tutto il post) di chiedo di controllare se veramente hai la variabile $intestazioni "spezzata" in 2.

    mail($destinatario,$oggetto,$messaggio,$intestazio ni);


  • User

    no,non e' spezzata...avro' combinato io qualcosa nel copia incolla....la mail arriva ma con tutti i campi vuoti.grazie 🙂


  • User

    Ok, mi ci volevano 3 secondi in più per svelare l'arcano (che tanto arcano poi non è!).

    Quando passi una variabile da un form con method="post", nella pagina php di destinazione (in questo caso invia.php) le variabili hanno il nome preceduto da $_POST['value'].

    Praticamente i tuoi dati del form fanno parte dell'array $_POST che viene passato a invia.php

    Così per esempio il valore relativo a:

    <input type="radio" name="radio" id="Citta2" value="Citta2" tabindex="10" />in invia.php sarà espresso dalla variabile

    $_POST['Citta2'] e non semplicemente $Citta2

    Per far funzionare il tutto basta assegnare il valore alle variabili, all'inizio dello script php, così:

    $Citta2 = $_POST['Citta2'];

    Attenzione pero' che uno script così è un invito a nozze per hackers e compagnia bella!
    Dovresti filtrare ogni valore in entrata sui tuoi scripts PHP, controllando il tipo di variabile ma ancora meglio usando sempre espressioni regolari!

    aggiungo:
    quando le cose non funzionano fai sempre un rapido debug preventivo. Se la mail arriva vuota, probabilmente le variabili sono vuote.
    Controlla che le variabili abbiano dei valori con un:

    echo $nome_variabile;
    die;


  • User

    grazie 1000!sei stato gentilissimo!!
    PS.che rischi corro se questi hacker decidono di prendermi di mira?


  • User

    Bhe i rischi che corri sono proporzionali alla complessità del tuo sito e a la quantità e qualità di informazioni che vi sono presenti.

    Se non filtri la tua variabile post, chiunque può "iniettare" del codice all'interno del tuo server.

    Per questo è sempre buona norma usare lo stripslashes se non magic_quotes non è attivo, o filtrare con eregi e l'espressione regolare che ti interessa (es. solo lettere e numeri).

    Per una discussione più approfondita su questo argomento sono sicuro che qualche moderatore appena vedrà il thread ti saprà consigliare la sezione adatta del forum.

    La sicurezza in PHP è una questione di cruciale importanza, che ogni programmatore deve tenere in considerazione prima di scrivere qualsiasi righetta di codice.


  • User

    ma e' un lavoro grosso da fare nel mio caso ,filtrare le variabili?intendo dire e' complesso perche sono alle prime armi...grazie ancora 😉


  • User

    Ho provato cosi...ma non funziona e ho provato anche togliendo $Citta2= lasciando solo $_POST['Citta2']; ...la mail arriva compilata ma con tutti i campi attaccati e non si capisce niente,praticamente la mail che arriva non ha tutti i campi divisi ma e' una frase unica,non legge i campi penso.

    <?php
    /* INVIO SEMPLICE */
    $destinatario = "mia mail";
    $oggetto = "Email inviata dal sito";
    $Citta2 = $_POST['Citta2'];
    $Mare = $_POST['Mare'];
    $Montagna = $_POST['Montagna'];
    $Lago = $_POST['Lago'];
    $Citta = $_POST['Citta'];
    $Provincia = $_POST['Provincia'];
    $NomeH = $_POST['NomeH'];
    $Categoria = $_POST['Categoria'];
    $Periodo = $_POST['Periodo'];
    $Da = $_POST['Da'];
    $Sito = $_POST['Sito'];
    $Email = $_POST['Email'];
    $Nome = $_POST['Nome'];

    $da = $email;
    $intestazioni = "From: $da";
    mail($destinatario,$oggetto,$messaggio,$intestazioni);
    ?>


  • User

    Ragazzi ce nessuno che mi puo aiutare?graziee


  • User

    @gf233 said:

    Ho provato cosi...ma non funziona e ho provato anche togliendo $Citta2= lasciando solo $_POST['Citta2']; ...la mail arriva compilata ma con tutti i campi attaccati e non si capisce niente,praticamente la mail che arriva non ha tutti i campi divisi ma e' una frase unica,non legge i campi penso.

    <?php
    /* INVIO SEMPLICE */
    $destinatario = "mia mail";
    $oggetto = "Email inviata dal sito";
    $Citta2 = $_POST['Citta2'];
    $Mare = $_POST['Mare'];
    $Montagna = $_POST['Montagna'];
    $Lago = $_POST['Lago'];
    $Citta = $_POST['Citta'];
    $Provincia = $_POST['Provincia'];
    $NomeH = $_POST['NomeH'];
    $Categoria = $_POST['Categoria'];
    $Periodo = $_POST['Periodo'];
    $Da = $_POST['Da'];
    $Sito = $_POST['Sito'];
    $Email = $_POST['Email'];
    $Nome = $_POST['Nome'];

    $da = $email;
    $intestazioni = "From: $da";
    mail($destinatario,$oggetto,$messaggio,$intestazioni);
    ?>

    Bhe la devi impaginare..

    Se non vuoi fare una email HTML devi usare \n per una nuova linea e/o \t per una tabulazione.


  • User Attivo

    Ti compilo solo la prima riga per avere un minimo di sicurezza, poi le altre le fai da solo.
    [PHP]$messaggio = "Citta: ".htmlentities($_POST['Citta2'])."\n";[/PHP]


  • User

    perfetto,grazie 1000 ragazzi!!!!!!!!!!!!!!!!!!!!!!


  • User Newbie

    Salve a tutti sono nuovo del forum e soprattutto di linguaggio php. Leggendo questa discussione ho notato che il form in questione è molto simile al mio, il mio è ancora più semplice. Nonostante abbia seguito i consigli citati quando mi invia la mail, invece di tutti i campi:nome,città,email e testo del messaggio, mi arriva solo il testo del messaggio..Dove sbaglio?

    Vi posto il codice:

    Html

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Documento senza titolo</title>
    <style type="text/css">
    <!--
    #form1 {
    width: 500px;
    margin-left: 150px;
    margin-top: 50px;
    }
    fieldset {
    margin-left: 10px;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 14px;
    background-color: #09F;
    color: #FFF;
    padding: 20px;
    }
    fieldset legend {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 14px;
    text-transform: uppercase;
    }
    fieldset #submit {
    margin-left: 400px;
    padding: 0px;
    }
    fieldset #invia {
    margin-left: 400px;
    }
    -->
    </style>
    </head>
    <body>
    <form action="invia.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
    <fieldset>
    <legend>Informazione di registrazione</legend>
    <p>
    <label for="nome">Nome</label>
    <input type="text" name="nome" id="nome" tabindex="10" />
    </p>
    <p>
    <label for="citta">Città</label>
    <input type="text" name="citta" id="citta" tabindex="20" />
    </p>
    <p>
    <label for="email">Email</label>
    <input type="text" name="email" id="email" tabindex="30" />
    </p>
    <p> </p>
    </fieldset>
    <fieldset>
    <legend></legend>
    <legend>IL tuo Messaggio</legend>
    <p>
    <label>
    <textarea name="testo" cols="50" rows="5" id="testo"></textarea>
    </label>
    </p>
    </p>
    <input type="submit" name="invia" id="invia" value="Invia" />

    </p>
    </fieldset>
    </form>
    </body>
    </html>

    PHP

    <?php

    $destinatario = "[email protected]";
    $oggetto = "email";

    $messaggio = "nome: ".htmlentities($_POST['nome']);
    $messaggio = "citta: ".htmlentities($_POST['citta']);
    $messaggio = "Email: ".htmlentities($_POST['email']);
    $messaggio = "testo: ".htmlentities($_POST['testo']);

    $da = $email ;
    $intestazioni = "From: $da";

    mail($destinatario,$oggetto,$messaggio,$intestazioni);

    ?>

    Grazie mille per l'attenzione(se ci sarà :1:

    Saluti


  • User Attivo

    Devi modificare le quattro righe dove assegni i valori al messaggio in questo modo:
    [php]$messaggio = "nome: ".htmlentities($_POST['nome'])."\n";
    $messaggio .= "citta: ".htmlentities($_POST['citta'])."\n";
    $messaggio .= "Email: ".htmlentities($_POST['email'])."\n";
    $messaggio .= "testo: ".htmlentities($_POST['testo']);[/php]

    In questo modo concateni i vari valori e aggiungi anche un "a capo".


  • User Newbie

    Grazie mille per la risposta...funziona tutto adesso...
    Per caso sai anche se esiste qualcosa di facile facile per rendere obbligatori nome e email per esempio? Cioè che se non mettono quelli la mail non viene inviata?

    Grazie ancora per l'attenzione e la disponibilità..

    Saluti


  • User Attivo

    Ecco come potresti fare per controllare che siano stati inseriti il nome e l'e-mail:
    [php]if (isset($_POST['nome']) && is_string($_POST['nome']) && trim($_POST['nome']) != '')
    && isset($_POST['email']) && is_string($_POST['email']) && trim($_POST['email']) != '')) {
    //Codice per inviare l'e-mail
    } else {
    echo 'Devi compilare i campi nome e e-mail.';
    }[/php]


  • User

    Buongiorno, prima di scrivere al form ho provato e riprovato ma purtroppo non sono riuscito a capire che codice mi manca. praticamente ho copiato un form dal un sito, l'ho messo in ogni pagina del mio sito, ma non capisco che codice manca per fare in modo che tutti i dati vengano inviati al " mio" indirizzo mail. vi scrivo il codice che ho messo in tutte le pagine <h4>RICHIESTE INFO</h4>
    <form id="form_prenotazione" name="form_prenotazione" method="post" action="prenotazione-villaggi-vieste.html" onsubmit="return validateFormPrenotazione();">

    <input name="nomecognome" type="text" id="nomecognome" value="nominativo" onfocus="this.value=''" />
    <input name="email" type="text" id="email" value="e-mail" onfocus="this.value=''" />

    <textarea name="messaggio">Note</textarea>

    <input type="checkbox" name="checkbox" value="checkbox" />
    <a href="#" onclick="window.open('privacy.html','','scrollbars=yes,width=500,height=500,location =1'); return false;">privacy</a>

    <input type="submit" name="Submit_prenotazione" value="RICHIEDI ORA" class="submitbutton" />

    </form> ho provato a inserire questo codice all'inizio della pagina prenotazione-villaggi-vieste.html . <?
    $MailToAddress = "...........";
    $MailFromAddress = $Email;
    $MailSubject = "Utente che chiede info dal mio sito";
    if (!$MailFromAddress) {
    $MailFromAddress = "Tuo nome";
    }
    $Header = "Utente che desidera informazioni su...";
    $Footer = "_______________________________________";
    ?>
    ma niente .. attendo un vostro aiuto.. vi ringrazio anticipatamente Marco


  • Super User

    Ciao Marco,

    Per mandare una email bisogna usare la funzione mail() che tu non stai usando.

    Come al solito gli esempi migliori sono sul manuale di PHP, in questo caso ce ne sono addirittura quattro:

    php.net/manual/en/function.mail.php