在AJAX邮件表单中添加服务器端验证

时间:2021-12-01 作者:Silvia Malavasi

我正在构建一个表单,它接受字段值并通过wp\\U邮件将它们发送给帖子作者。这是可行的,但我想添加服务器端验证以提高安全性。我不知道在哪里添加我的验证!我想阻止wp\\u mail命令并发送特定的错误消息。这是我的密码。

HTML:

<form id="prod_form" action="" method="post">
       <div id="form_succ"></div>
       <div id="form_err"></div>

       <input type="hidden" name="action" value="form_submission">

       <label for="nome">Nome</label>
       <input type="text" id="nome" name="nome" placeholder="Nome">

       <label for="cognome">Cognome</label>
       <input type="text" id="cognome" name="cognome" placeholder="Cognome">

       <label for="email">Email*</label>
       <input type="email" id="email" name="email" placeholder="Email*">

       <label for="telefono">Telefono</label>
       <input type="tel" id="telefono" name="telefono" placeholder="Telefono">

       <label for="numero">Quantità*</label>
       <input type="number" id="numero" name="numero" placeholder="Quantità*">

       <label for="messaggio">Vuoi aggiungere un messaggio?</label>
       <textarea id="messaggio" name="messaggio" placeholder="Vuoi aggiungere un messaggio?"></textarea>

        <div id="prenota"><h4>Invia</h4></div>
        
        <p id="prod_mail"><?php echo get_the_author_meta( \'email\', $author_id );?></p>
</form>

在函数中。PHP:


function smail(){

    $nome = $_REQUEST[\'nome\'];
    $cognome = $_REQUEST[\'cognome\'];
    $email = $_REQUEST[\'email\'];
    $telefono = $_REQUEST[\'telefono\'];
    $numero = $_REQUEST[\'numero\'];
    $messaggio= $_REQUEST[\'messaggio\'];
    $prod_mail = $_REQUEST[\'prod_mail\'];
    $prodotto = $_REQUEST[\'prodotto\'];
    $confezione = $_REQUEST[\'confezione\'];
    $prezzo = $_REQUEST[\'prezzo\'];

    if($nome === \'\') {
        $nome = "<span style=\'color:#8c8c8c;\'>Nome non inserito</span>";
    };
    if($cognome === \'\') {
        $cognome = "<span style=\'color:#8c8c8c;\'>Cognome non inserito</span>";
    };
    if($telefono === \'\') {
        $telefono = "<span style=\'color:#8c8c8c;\'>Telefono non inserito</span>";
    };
    if($messaggio === \'\') {
        $messaggio = "<span style=\'color:#8c8c8c;\'>Nessun messaggio</span>";
    };

    $subject = "Ordine dal sito";
    $email_body = "<h3>Hai ricevuto un nuovo ordine</h3>
        <h4>Prodotto</h4>
        <p>Prodotto: " . $prodotto . "<br>
        Confezione: " . $confezione . "<br>
        Prezzo unitario: " . $prezzo . "<br>
        Quantità: " . $numero . "
        </p>

        <h4>Cliente</h4>
        <p>Nome: ". $nome . "<br>
        Cognome: " . $cognome . "<br>
        Email: " . $email . "<br>
        Telefono: " . $telefono . "
        </p>

        <p><strong>Messaggio</strong><br>
        " . $messaggio. "
        </p>

        <p>
        Contatta il cliente al suo indirizzo email per procedere con l\'ordine:<strong> <a href=\'mailto:" . $email . "\'>" . $email . "</a></strong>
        </p>";

        $to = $prod_mail;
        $headers = array(\'Content-Type: text/html; charset=UTF-8;\');

    wp_mail($to, $subject, $email_body, $headers);
    die();
}

add_action( \'wp_ajax_smail\', \'smail\' );
add_action( \'wp_ajax_nopriv_smail\', \'smail\' );

JS公司:


jQuery(function ($) {

$(\'#prenota\').bind(\'click\', function() {
    
        var nome = $("#nome").val();
        var cognome = $("#cognome").val();
        var email = $("#email").val();
        var telefono = $("#telefono").val();
        var numero = $("#numero").val();
        var messaggio = $("#messaggio").val();
        var prod_mail = $("#prod_mail").html();
        var prodotto = $("#prodotto").html();
        var confezione = $("#confezione").html();
        var prezzo = $("#prezzo").html();

        $.ajax({
            url: avars.ajaxurl,
            data: {
                action: \'smail\',
                \'nome\': nome,
                \'cognome\': cognome,
                \'email\': email,
                \'telefono\': telefono,
                \'numero\': numero,
                \'messaggio\': messaggio,
                \'prod_mail\': prod_mail,
                \'prodotto\': prodotto,
                \'confezione\': confezione,
                \'prezzo\': prezzo,
                },
            success: function() {
                $("#prod_form")[0].reset();
                $("#form_succ").html("<p>Ordine inviato! Il produttore ti contatterà per procedere all\'acquisto.</p>");
            }
        });

});

});

1 个回复
SO网友:Silvia Malavasi

已解决!只需在PHP中添加vaidation并简单地回显错误消息:

function smail(){

$nome = $_REQUEST[\'nome\'];
$cognome = $_REQUEST[\'cognome\'];
$email = $_REQUEST[\'email\'];
$telefono = $_REQUEST[\'telefono\'];
$numero = $_REQUEST[\'numero\'];
$messaggio= $_REQUEST[\'messaggio\'];
$prod_mail = $_REQUEST[\'prod_mail\'];
$prodotto = $_REQUEST[\'prodotto\'];
$confezione = $_REQUEST[\'confezione\'];
$prezzo = $_REQUEST[\'prezzo\'];

if($nome === \'\') {
    $nome = "<span style=\'color:#8c8c8c;\'>Nome non inserito</span>";
};
if($cognome === \'\') {
    $cognome = "<span style=\'color:#8c8c8c;\'>Cognome non inserito</span>";
};
if($telefono === \'\') {
    $telefono = "<span style=\'color:#8c8c8c;\'>Telefono non inserito</span>";
};
if($messaggio === \'\') {
    $messaggio = "<span style=\'color:#8c8c8c;\'>Nessun messaggio</span>";
};

$subject = "Ordine dal sito";
$email_body = "<h3>Hai ricevuto un nuovo ordine</h3>
    <p>
    Contatta il cliente al suo indirizzo email<br>per procedere con l\'ordine:<strong> <a href=\'mailto:" . $email . "\'>" . $email . "</a></strong>
    </p>
    <br>
    <h4>Prodotto</h4>
    <p>Prodotto: " . $prodotto . "<br>
    Confezione: " . $confezione . "<br>
    Prezzo unitario: " . $prezzo . "<br>
    Quantità: " . $numero . "
    </p>

    <h4>Cliente</h4>
    <p>Nome: ". $nome . "<br>
    Cognome: " . $cognome . "<br>
    Email: " . $email . "<br>
    Telefono: " . $telefono . "
    </p>

    <p><strong>Messaggio</strong><br>
    " . $messaggio. "
    </p><br><br>";

    $to = $prod_mail;
    $headers = array(\'Content-Type: text/html; charset=UTF-8;\');

if ((!empty($_REQUEST[\'nome\'])) && (!preg_match("/^[a-zA-Z-\' ]*$/",($_REQUEST[\'nome\'])))) {
    echo "<p>Sono ammessi solo caratteri nel campo nome.</p>";
    wp_die();     
}
if ((!empty($_REQUEST[\'cognome\'])) && (!preg_match("/^[a-zA-Z-\' ]*$/",($_REQUEST[\'cognome\'])))) {
    echo "<p>Sono ammessi solo caratteri nel campo cognome.</p>";
    wp_die();     
}
if (!filter_var(($_REQUEST[\'email\']), FILTER_VALIDATE_EMAIL)) {
    echo "<p>Inserisci un\'email valida.</p>";
    wp_die();
} 
if ((!empty($_REQUEST[\'telefono\'])) && (!preg_match("/^[0-9-+.\' ]*$/",($_REQUEST[\'telefono\'])))) {
    echo "<p>Caratteri non validi nel campo telefono.</p>";
    wp_die();     
}   
if (!preg_match("/^\\d+$/",($_REQUEST[\'numero\']))) {
    echo "<p>Inserisci la quantità.</p>";
    wp_die();
}   
if ((!empty($_REQUEST[\'messaggio\'])) && (!preg_match("/^[a-zA-Z-.,\' ]*$/",($_REQUEST[\'messaggio\'])))) {
    echo "<p>Caratteri non validi nel campo messaggio.</p>";
    wp_die();     
}
else {
    wp_mail($to, $subject, $email_body, $headers);
    echo \'ok\';
    wp_die();
};
}

add\\u action(\'wp\\u ajax\\u smail\',\'smail\');添加\\u操作(“wp\\u ajax\\u nopriv\\u smail”,“smail”);

相关推荐

在AJAX不起作用的情况下从SELECT表单传递值

我试图从一个选定的表单中传递一个变量,但无法使其工作-正确的方法是什么?控制台现在给我对象错误:statusText: "parsererror"Update:更改了json\\u编码并更新了脚本。我知道获取correct值,但if/else语句没有触发。Form<select id="dropdown_shop_order_language" name="wcml_shop_order_language">