У меня есть веб-сайт на базе WordPress, который включает в себя бронирование <form>
на «Шаблон страницы».
Поскольку я незнаком с PHP, я не совсем уверен, где именно я иду не так.
Мне нужно включить некоторые checkboxes
за услуги, предлагаемые на сайте в <form>
и иметь следующий файл для работы:
<?php
/*
* Template Name: Booking Page
*/
?>
<?php
// Sanitize data, or initialize if they don't exist.
$clientname = isset($_POST['ci_name']) ? esc_html(trim($_POST['ci_name'])) : '';
$email = isset($_POST['ci_email']) ? esc_html(trim($_POST['ci_email'])) : '';
$services = isset($_POST['services']) ? esc_html(trim(implode(",", $_POST['services']))) : ''; // My Edit
$message = isset($_POST['ci_comments']) ? sanitize_text_field(stripslashes($_POST['ci_comments'])) : '';
$errorString = '';
$emailSent = false;
if(isset($_POST['send_booking']))
{
// We are here because the form was submitted. Let's validate!
if(empty($clientname) or mb_strlen($clientname) < 2)
$errorString .= '<li><i class="fa fa-times"></i> '.__('Your name is required.', 'ci_theme').'</li>';
if(empty($email) or !is_email($email))
$errorString .= '<li><i class="fa fa-times"></i> '.__('A valid email is required.', 'ci_theme').'</li>';
// Services is optional, so, no check. // My Edit
// Message is optional, so, no check.
// Alright, lets send the email already!
if(empty($errorString))
{
$mailbody = __("Name:", 'ci_theme') . " " . $clientname . "\n";
$mailbody .= __("Email:", 'ci_theme') . " " . $email . "\n";
$mailbody .= __("Services Selected:", 'ci_theme') . " " . $services . "\n"; // My Edit
$mailbody .= __("Message:", 'ci_theme') . " " . $message . "\n";
// If you want to receive the email using the address of the sender, comment the next $emailSent = ... line
// and uncomment the one after it.
// Keep in mind the following comment from the wp_mail() function source:
/* If we don't have an email from the input headers default to wordpress@$sitename
* Some hosts will block outgoing mail from this address if it doesn't exist but
* there's no easy alternative. Defaulting to admin_email might appear to be another
* option but some hosts may refuse to relay mail from an unknown domain. See
* http://trac.wordpress.org/ticket/5007.
*/
$emailSent = wp_mail(ci_setting('booking_form_email'), get_option('blogname').' - '. __('Booking form', 'ci_theme'), $mailbody);
//$emailSent = wp_mail(ci_setting('contact_form_email'), get_option('blogname').' - '. __('Contact form', 'ci_theme'), $mailbody, 'From: "'.$clientname.'" <'.$email.'>');
}
}
?>
<?php get_header(); ?>
<main id="main">
<div class="container">
<div class="row">
<div class="col-lg-10 col-lg-offset-1">
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h2 class="page-title"><?php the_title(); ?></h2>
<div class="row">
<div class="col-sm-8">
<article <?php post_class('entry'); ?>>
<?php if(!empty($errorString)): ?>
<ul id="formerrors">
<?php echo $errorString; ?>
</ul>
<?php endif; ?>
<?php if($emailSent===true): ?>
<p id="formsuccess"><i class="fa fa-check"></i> <?php _e('Your booking request has been sent. We will contact you as soon as possible.', 'ci_theme'); ?></p>
<?php elseif($emailSent===false and isset($_POST['send_booking']) and $errorString==''): ?>
<p id="sendfail"><?php _e('There was a problem while sending the email. Please try again later.', 'ci_theme'); ?></p>
<?php endif; ?><?php the_content(); ?>
<?php if( !isset($_POST['send_booking']) or (isset($_POST['send_booking']) and !empty($errorString)) ): ?>
<form class="booking" action="<?php the_permalink(); ?>" method="post">
<div class="row">
<div class="col-md-6">
<input type="text" name="ci_name" id="ci_name" placeholder="<?php _e('your name', 'ci_theme'); ?>" value="<?php echo esc_attr($clientname); ?>">
</div>
<div class="col-md-6">
<input type="email" name="ci_email" id="ci_email" class="datepicker" placeholder="<?php _e('Your Email', 'ci_theme'); ?>" value="<?php echo esc_attr($email); ?>">
</div>
</div><!-- My Edits -->
<div class="row">
<div class="col-md-12">
<hr />
<p>Please tick any of the following services if you would like to include them in your package:</p>
</div>
<div class="col-md-6">
<p><input type="checkbox" name="services[]" <?php checked($services, 'Reiki'); ?> value="Reiki"> Reiki</p>
<p><input type="checkbox" name="services[]" <?php checked($services, 'Private Personal Training'); ?> value="Private Personal Training"> Private Personal Training</p>
<p><input type="checkbox" name="services[]" <?php checked($services, 'Walking'); ?> value="Walking"> Walking</p>
<p><input type="checkbox" name="services[]" <?php checked($services, 'Boot Camp'); ?> value="Boot Camp"> Boot Camp</p>
</div>
<div class="col-md-6">
<p><input type="checkbox" name="services[]" <?php checked($services, 'Relaxation Massage'); ?> value="Relaxation Massage"> Relaxation Massage</p>
<p><input type="checkbox" name="services[]" <?php checked($services, 'Meditation Circle'); ?> value="Meditation Circle"> Meditation Circle</p>
<p><input type="checkbox" name="services[]" <?php checked($services, 'Colour Workshop'); ?> value="Colour Workshop"> Colour Workshop</p>
</div>
</div>
<!-- End My Edits -->
<div class="row">
<div class="col-md-12">
<textarea name="ci_comments" id="ci_comments" cols="30" rows="10" placeholder="<?php _e('Message', 'ci_theme'); ?>"></textarea>
<button type="submit" name="send_booking"><?php _e('Submit', 'ci_theme'); ?></button>
</div>
</div>
</form>
<?php endif; ?>
</article>
</div>
<?php endwhile; endif; ?>
<?php get_sidebar(); ?>
</div>
</div>
</div>
</div>
</main>
<?php get_footer(); ?>
В приведенном выше коде я разместил HTML-разметку для флажков, и она выглядит примерно так же на внешней стороне веб-сайта:
Тем не менее, он не включает информацию о флажках в электронное письмо, которое отправляется. Письмо об этом просто гласит Services Selected:
без названий сервисов отмеченных галочкой:
Мои правки, которые можно найти в приведенном выше коде:
Санируйте:
$services = isset($_POST['services']) ? esc_html(trim(implode(",", $_POST['services']))) : '';
Сообщение для отправки:
$mailbody .= __("Services Selected:", 'ci_theme') . " " . $services . "\n";
Флажки:
<input type="checkbox" name="services[]" <?php checked($services, 'Relaxation Massage'); ?> value="Relaxation Massage"> Relaxation Massage
Как мне внедрить, продезинфицировать, отправить и получить результаты checkboxes
с использованием <form>
У меня сейчас есть?
Любая помощь будет принята с благодарностью,
Благодарю.
Вы не сохранили значение в вашем $service
переменная.
Просто вставьте этот код
$clientname = isset($_POST['ci_name']) ? esc_html(trim($_POST['ci_name'])) : '';
$email = isset($_POST['ci_email']) ? esc_html(trim($_POST['ci_email'])) : '';
$services = isset($_POST['services']) ? esc_html(trim(implode(",", $_POST['services']))) : ''; // My Edit
$message = isset($_POST['ci_comments']) ? sanitize_text_field(stripslashes($_POST['ci_comments'])) : '';
$errorString = '';
$emailSent = false;
if(isset($_POST['send_booking']))
{
print_r($_POST);exit; // You can see here your post variable value in array.
}
Вместо
$services = isset($_POST['services']); // My Edit
Подробнее о троичном операторе: http://php.net/ma…operators.comparison.php
Других решений пока нет …