如何将表单下拉选框选中值通过POST方法发送至邮箱
问题核心原因
- PHP侧获取下拉框值的逻辑被包裹在
if(isset($_POST['send']))判断中,而你用AJAX提交表单时并未传递send参数,导致下拉框值未被正确赋值,无法带入邮件内容。 - 代码中存在大量无用的冗余变量,既影响排查也无实际作用。
- JS提交时多传了不存在的
value字段,属于无效参数。
具体修改方案
1. 修改PHP代码
首先删除所有冗余变量,修改下拉框值的获取逻辑:
<?php if(!$_POST) exit; // 邮箱验证函数保留不动 function isEmail($email) { return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email)); } if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n"); // 原有业务字段保留 $name = $_POST['name']; $email = $_POST['email']; $comments = $_POST['comments']; $dod = $_POST['dod']; $yourname = $_POST['yourname']; $tel = $_POST['tel']; $caddy = $_POST['caddy']; $cpost = $_POST['cpost']; $daddy = $_POST['daddy']; $dpost = $_POST['dpost']; $dofd = $_POST['dofd']; // 删除原来的$Car、$Small等所有无用变量,直接获取下拉框值 $vehicles = isset($_POST['vehicles']) ? htmlspecialchars(trim($_POST['vehicles'])) : '未选择车型'; // 删掉原来包裹$value赋值的if(isset($_POST['send']))逻辑、以及判断vehicles等于motor输出的冗余代码 // 后面的表单验证、邮箱配置逻辑保留不动,仅修改邮件内容部分 $e_content = " Company: $name Name of Person: $yourname Contacts email: $email Contacts Telephone Number: $tel Desired Collection Date: $dod Drop Off Deadline: $dofd Collection Address: $caddy Collection Post Code: $cpost Destination Address: $daddy Destination Post Code: $dpost Addtional Information: $comments 选择的车型:$vehicles " . PHP_EOL . PHP_EOL; // 后面发邮件的逻辑全部保留不动即可 ?>
2. 修改JS代码
删除提交参数里多余的value字段,没有对应表单元素不需要传递:
//Contact $('#working_form').submit(function() { var action = $(this).attr('action'); $("#message").slideUp(750, function() { $('#message').hide(); $('#submit') .before('<img src="" class="gif_loader" />') .attr('disabled', 'disabled'); $.post(action, { name: $('#name').val(), email: $('#email').val(), comments: $('#comments').val(), dod: $('#dod').val(), dofd: $('#dofd').val(), yourname: $('#yourname').val(), cpost: $('#cpost').val(), caddy: $('#caddy').val(), tel: $('#tel').val(), daddy: $('#daddy').val(), dpost: $('#dpost').val(), vehicles: $('#vehicles').val() // 删掉原来的value: $('#value').val()参数 }, function(data) { document.getElementById('message').innerHTML = data; $('#message').slideDown('slow'); $('#cform img.gif_loader').fadeOut('slow', function() { $(this).remove() }); $('#submit').removeAttr('disabled'); if (data.match('success') != null) $('#cform').slideUp('slow'); } ); }); return false; });
3. 检查确认点
确保你的外层表单标签的id是working_form,和JS中的提交事件选择器对应,否则提交逻辑不会触发。
内容的提问来源于stack exchange,提问作者Enonimy
相关产品推荐
相关产品推荐

