• User Attivo

    Form contatti con controlli obbligatori...ma a volte arriva vuoto, Urgente !

    Buongiorno,
    ho un sito con un form di contatti, controllo campi obbligatorio e mi arriva tutto per email.
    Tutto ok, prima di andare online con il sito ho fatto mille test, ie, chrome, firefox, safari, pc, cellulare, ipad....
    E' un pò di tempo che mi arriva per email il form completamente vuoto.
    Di solito di notte, tipo l'altra notte alle 3 e questa notte alle 24:30.
    Grazie

    Questo è il codice:

    [PHP]<script type="text/javascript" src="js/contatti.js"></script>
    <form name="modulo_contatti" method="post" onsubmit="inviaModulo_contatti(); return false;">
    <table cellpadding="2" cellspacing="2" border="0">
    <tr>
    <td >Nome *</td>
    <td ><input name="nome" maxlength="255" value="" size="20" type="text"></td>
    </tr>
    <tr>
    <td >Oggetto *</td>
    <td ><input name="oggetto" maxlength="255" value="" size="20" type="text"></td>
    </tr>
    <tr>
    <td >E-Mail </td>
    <td ><input name="email" maxlength="255" value="" size="20" type="text"></td>
    </tr>
    <tr>
    <td>Messaggio:
    </td>
    <td><textarea cols="60" rows="5" name="messaggio" id="messaggio"></textarea></td>
    </tr>
    <tr>
    <td colspan="2" align="center"><input type="submit" value="Invia"></td>
    </tr>
    </table>
    </form>

    [/PHP]

    [PHP]function inviaModulo_contatti()
    {
    var Filtro = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-]{2,})+.)+([a-zA-Z0-9]{2,4})$/;

    var nome    = document.modulo_contatti.nome.value;
    var oggetto    = document.modulo_contatti.oggetto.value;
    var email = document.modulo_contatti.email.value;
    // var telefono = document.modulo_contatti.telefono.value;
    // var provincia = document.modulo_contatti.provincia.value;
    var messaggio = document.modulo_contatti.messaggio.value;
    
    
    if ((nome == "") || (nome == "undefined") ) 
    {
        alert("Inserisci il tuo nome.");
        document.modulo_contatti.nome.focus();
    return false;
    }
    
    if ((oggetto == "") || (oggetto == "undefined") ) 
    {
        alert("Inserisci oggetto.");
        document.modulo_contatti.oggetto.focus();
    return false;
    }
    
    if (!Filtro.test(email)) {
        alert("Indirizzo mail vuoto o non corretto.");
        document.modulo_contatti.email.focus();
        return false;
    }
    
    
    if ((messaggio == "") || (messaggio == "undefined") ) 
    {
        alert("Inserisci un messaggio.");
        document.modulo_contatti.messaggio.focus();
    return false;
    }
    
    //INVIA
    else {
        document.modulo_contatti.action = "invia_contatti.php";
        document.modulo_contatti.submit();
        return false;
    }
    

    }[/PHP]


  • User Attivo

    [PHP]<?php

    $nome = addslashes($_POST['nome']);
    $oggetto = addslashes($_POST['oggetto']);
    // $telefono = addslashes($_POST['telefono']);
    $email = addslashes($_POST['email']);
    // $provincia = addslashes($_POST['provincia']);
    $messaggio = addslashes($_POST['messaggio']);    
    

    {
    require("include/class.phpmailer.php");

    $nomeMail    = "Contatti dal sito: Sovana";
    $mess    =  "<html><head><script type="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script>
    

    </head><body>Informazioni dal sito:<br><b>Nome:</b> ".$nome."<br><b>Oggetto:</b> ".$oggetto."<br><b>Email:</b> ".$email."<br><b>Testo</b><br>".nl2br($messaggio)."<script type="text/javascript">if(!NREUMQ.f){NREUMQ.f=function(){NREUMQ.push(["load",new Date().getTime()]);var e=document.createElement("script");e.type="text/javascript";e.src=(("http:"===document.location.protocol)?"http:":"https:")+"//"+"d1ros97qkrwjf5.cloudfront.net/42/eum/rum.js";document.body.appendChild(e);if(NREUMQ.a)NREUMQ.a();};NREUMQ.a=window.onload;window.onload=NREUMQ.f;};NREUMQ.push(["nrfj","beacon-1.newrelic.com","1b473294f5","550561","M1QBYUMCDUAEWkRfWgoeNkdYTAVcF0xdGUMGQgZaHxMLQw==",0,38,new Date().getTime(),"","","","",""]);</script>
    </body></html>";

    $mailDiSistema = "[email protected]";
    $mail = new PHPMailer();
    $mail->CharSet = 'UTF-8';
    $mail->From = $mailDiSistema; // indirizzo da cui proviene la mail
    

    // $mail->From = $email; // indirizzo da cui proviene la mail
    $mail->FromName = $nomeMail;
    $mail->Sender = $mailDiSistema;
    // $mail->Sender = $email;
    $mail->AddAddress($email);
    $mail->AddBCC($mailDiSistema);
    $mail->WordWrap = 50; // word wrap a 50
    $mail->IsHTML(true); // formato della mail in HTML
    $mail->Subject = $oggetto;
    $mail->Body = stripslashes($mess); // $mess conterr il messaggio html
    $mail->AltBody = strip_tags($mess);
    $result = $mail->Send();

    if ($result)
        $messaggio = "Grazie per averci contattato vi risponderemo  appena possibile.<br><br>Per tornare in Home Page <a  href='link'>clicca qui</a>";
    else
        $messaggio = "Ci sono problemi nell'invio del messaggio; ci  scusiamo del disagio e la invitiamo a contattarci piu' tardi.";
    include("standard.php");
    

    }

    ?>[/PHP]

    poi ho il php mailer, che non posso postarlo perchè dice che è troppo lungo


  • User Attivo

    Ciao,

    ho dato un'occhiata veloce, poi dopo magari lo testo e ti so dire meglio, ma quello che mi viene da dire ad una prima occhiata è che il controllo di conformità dei valori lo fai attraverso il Javascript per evitare di fare il refresh della pagina, ma non usi il preventDefault(). Di conseguenza se qualcuno entra col Javascript disabilitato, quel form va in submit anche se vuoto perché non hai indicato al browser di NON eseguire gli eventi di default (in questo caso il submit) al click del mouse. In ogni caso è buona regola validare i dati anche lato PHP, il Javascript fa parte del browser quindi può essere aggirato.


  • User Attivo

    Capito grazie, quindi come dovrei modificare il codice?


  • User Attivo

    Rifai gli stessi controlli che fai da JS in PHP, in questo modo la routine si blocca e non manda la mail. Ti arrivano mail vuote perchè qualche bot manda chiama con post la tua pagina php. Fai anche un controllo del referer della pagina, in questo modo non possono fare chiamate dall'esterno (anche se riescono ad aggirare cmq questo controllo, però sempre meglio farlo).
    Gli script lato server vanno considerati come black box a se stanti, qualsiasi sia l'ingresso dei dati devi gestire correttamente la funzione.


  • User Attivo

    Il problema che non sono molto esperto....i codici li ho trovati già fatti


  • User Attivo

    $var; // Variabile in ingresso da php, tipo email, nome, etc
    if(strlen(trim($var)) < 1) {
    print "Nome non valido";
    return false;
    }

    In maniera molto molto basilare, questo dovrebbe bastarti...controllalo su ogni variabile in ingresso allo script php

    ciao!


  • User Attivo

    Ok grazie