Я пытаюсь добавить выбранный элемент html в форму, которая будет отправлена вместе с электронной почтой. Я хотел бы знать, как правильно получить значение из списка выбора и передать его на PHP. Я не смог правильно понять это. Буду признателен за любую помощь. Ниже мой код …
function _(id){ return document.getElementById(id); } function submitForm(){ _("contact-submit").disabled = true; _("status").innerHTML = 'please wait ...'; var formdata = new FormData(); formdata.append( "n", _("n").value ); formdata.append( "e", _("e").value ); formdata.append( "t", _("t").value ); formdata.append( "w", _("w").value ); formdata.append( "m", _("m").value ); var ajax = new XMLHttpRequest(); ajax.open( "POST", "contact.php" ); ajax.onreadystatechange = function() { if(ajax.readyState == 4 && ajax.status == 200) { if(ajax.responseText == "success"){ _("contact-form").innerHTML = '<h2 class="tnx">Thanks '+_("n").value+', we will be in touch soon!</h2>'; } else { _("status").innerHTML = ajax.responseText; _("contact-submit").disabled = false; } } } ajax.send( formdata ); }
HTML
<div class="cat-select"> <label class="cat-selects" for="subject"><span>Area of Interest</span> <select name="subject" class="select-field" id="s"> <option value="General Inquiry">General Inquiry</option> <option value="Elderly Care">Elderly Care</option> <option value="Child Care">Child Care</option> </select> </label> </div>
PHP
<?php if( isset($_POST['n']) && isset($_POST['e']) && isset($_POST['t']) && isset($_POST['w']) && isset($_POST['m']) ){ $n = $_POST['n']; // HINT: use preg_replace() to filter the data $e = $_POST['e']; $t = $_POST['t']; $w = $_POST['w']; $m = nl2br($_POST['m']); $to = "hello@gmail.com"; $from = $e; $subject = 'Contact Form Message'; $message = '<b>Name:</b> '.$n.' <br><b>Email:</b> '.$e.' <p>'.$s.' '.$m.'</p>'; $headers = "From: $from\n"; $headers .= "MIME-Version: 1.0\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\n"; if( mail($to, $subject, $message, $headers) ){ echo "success"; } else { echo "The server failed to send the message. Please try again later."; } } ?>
id
вашего элемента <select>
имеет значение «s», но ваш Javascript не ссылается на него нигде. Предполагая, что ваша функция _()
относится к id
, вам нужно будет добавить следующую строку с аналогичными строками.
formdata.append( "s", _("s").value );
Это должно сделать $_POST['s']
доступным для вас на стороне PHP.
Не забудьте сделать что-то, чтобы избежать всех полей, отправленных через эту форму, а не только текстовые входы и текстовые поля, чтобы избежать попыток использовать сайт или получателя сообщения.