У меня есть несколько форм, используемых на моем сайте (Wordpress), которые используют PHP-файл в качестве «действия» в форме с использованием method = "post". Все прекрасно работает, однако я получаю большое количество пустых отправок форм, что происходит при непосредственном доступе к обработчику PHP (потому что моя проверка формы интерфейса обходится путем прямого доступа к файлу обработчика, а обработчик включает wp_mailфункция отправки электронной почты).
Я пытаюсь выяснить, как запретить прямой доступ к файлу обработчика, не нарушая форму путем запрета доступа к обработчику. Если это имеет смысл?
Форма
<form class="contact-form" action="<?=get_bloginfo('template_url') . '/path/to/my/handler-file.php' ?>" method="post" enctype="multipart/form-data">
<input type="text" id="first_name" name="first_name" placeholder="First name">
<label for="first_name">First name</label>
<input type="text" id="last_name" name="last_name" placeholder="Last name">
<label for="last_name">Last name</label>
<input type="email" id="email" name="email" placeholder="Your email">
<label for="email">Your email</label>
<button class="button" type="submit">Submit</button>
</form>
Обработчик
// Load WordPress Bootstrap
require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );
// To
$to = get_option('admin_email');
// Subject
$subject = 'Contact – ' . $_POST['first_name'] . ' ' . $_POST['last_name']; // Including name ensures new thread in their inbox
// Headers
$headers = array(
'Reply-To: ' . $_POST['first_name'] . ' ' . $_POST['last_name'] . ' <' . $_POST['email'] . '>'
);
// Data
$message = [];
$message['First name'] = $_POST['first_name'];
$message['Last name'] = $_POST['last_name'];
$message['Email'] = $_POST['email'];
// Blank var to hold data
$message_str = '';
// Push data to $message_str
foreach ($message as $label => $entry) {
$message_str .= "—\n" . $label . ":\n" . $entry . "\n\n";
}
wp_mail($to, $subject, $message_str, $headers);