Hey I am still using the previous version of Kirby. I have two forms, one of the quote page, and another on the home page. they both collect different sets of data. The one on the quote page works fine but the one on the homepage does not work. The form on the homepage submits without any errors and the page refreshes so I cannot work out where the issue is. I have labelled all files like this:
- Controllers > home.php, quote.php.
- Templates > email > email.php
- Plugins > mail-form-data > mail-form-data.php
I would like to point out home.php form contains 3 input fields only all of which share the same value as quote.php.
I will share some code for context:
email.php
Hello,
Name: <?= $sender ?>,
Phone: <?= $phone ?>,
Email: <?= $email ?>,
Service: <?= $service ?>,
Pickup: <?= $pick ?>,
Dropoff: <?= $drop ?>,
Property: <?= $property ?>
Rooms: <?= $rooms ?>
Packaging: <?= $package ?>
Parking: <?= $park ?>
Items: <?= $items ?>
home.php
<?php if($success): ?>
<div class="alert success">
<p><?= $success ?></p>
</div>
<?php else: ?>
<?php if (isset($alert['error'])): ?>
<div class="error-message">
<p>
<?= $alert['error'] ?>
</p>
</div>
<?php endif ?>
<form method="post" action="<?= $page->url() ?>">
<div class="hero-form blue-block col-md-12 col-sm-12">
<div class="hero-form-block">
<h3 class="gold-text pre-header fade-in-g">
Pickup Location
</h3>
<div class="honeypot">
<label for="website">Website <abbr title="required">*</abbr></label>
<input type="website" id="website" name="website" tabindex="-1">
</div>
<div class="field">
<input type="text" id="pick" name="pick" value="<?= $data['pick'] ?? '' ?>" placeholder="Enter the postcode of the collection" required>
<?= isset($alert['pick']) ? '<span class="alert error">' . html($alert['pick']) . '</span>' : '' ?>
</div>
</div>
<div class="hero-form-block">
<h3 class="gold-text pre-header fade-in-g">
Dropoff Location
</h3>
<div class="field">
<input type="text" id="drop" name="drop" value="<?= $data['drop'] ?? '' ?>" placeholder="Enter the postcode of the dropoff" required>
<?= isset($alert['drop']) ? '<span class="alert error">' . html($alert['drop']) . '</span>' : '' ?>
</div>
</div>
<div class="hero-form-block">
<h3 class="gold-text pre-header fade-in-g">
Phone Number
</h3>
<div class="field">
<input type="text" id="phone" name="phone" value="<?= $data['phone'] ?? '' ?>" placeholder="Enter your phone number now!" required>
<?= isset($alert['phone']) ? '<span class="alert error">' . html($alert['phone']) . '</span>' : '' ?>
</div>
</div>
<div class="hero-form-block">
<input class="button-1 fade-in same-page ease button-link" type="submit" name="submit" value="REQUEST A CALLBACK">
</div>
</div>
</form>
<?php endif ?>
quote.php
<?php if($success): ?>
<div class="alert success">
<p><?= $success ?></p>
</div>
<?php else: ?>
<?php if (isset($alert['error'])): ?>
<div class="error-message">
<p>
<?= $alert['error'] ?>
</p>
</div>
<?php endif ?>
<form method="post" action="<?= $page->url() ?>">
<div class="col-md-12">
<div class="honeypot">
<label for="website">Website <abbr title="required">*</abbr></label>
<input type="website" id="website" name="website" tabindex="-1">
</div>
<div class="field input-50 first-50">
<input type="text" id="name" name="name" value="<?= $data['name'] ?? '' ?>" placeholder="Full Name" required>
<?= isset($alert['name']) ? '<span class="alert error">' . html($alert['name']) . '</span>' : '' ?>
</div>
<div class="field input-50">
<input type="text" id="phone" name="phone" value="<?= $data['phone'] ?? '' ?>" placeholder="Phone" required>
<?= isset($alert['phone']) ? '<span class="alert error">' . html($alert['phone']) . '</span>' : '' ?>
</div>
<div class="field input-50 first-50">
<input type="email" id="email" name="email" value="<?= $data['email'] ?? '' ?>" placeholder="Email" required>
<?= isset($alert['email']) ? '<span class="alert error">' . html($alert['email']) . '</span>' : '' ?>
</div>
<div class="field input-50 ">
<select id="cars" id="service" name="service" value="<?= $data['service'] ?? '' ?>" placeholder="Select a service" required>
<option value="Serices" selected>Choose a service</option>
<option value="House">House</option>
<option value="Flat">Flat</option>
<option value="Office">Office Move</option>
<option value="Storage">Storage Run</option>
<option value="Courier">Courier</option>
</select>
<?= isset($alert['service']) ? '<span class="alert error">' . html($alert['service']) . '</span>' : '' ?>
</div>
<div class="field input-50 first-50">
<input type="text" id="pick" name="pick" value="<?= $data['pick'] ?? '' ?>" placeholder="Pick-up post code" required>
<?= isset($alert['pick']) ? '<span class="alert error">' . html($alert['pick']) . '</span>' : '' ?>
</div>
<div class="field input-50">
<input type="text" id="drop" name="drop" value="<?= $data['drop'] ?? '' ?>" placeholder="Drop-off post code" required>
<?= isset($alert['drop']) ? '<span class="alert error">' . html($alert['drop']) . '</span>' : '' ?>
</div>
<div class="field input-50 first-50">
<input type="text" id="property" name="property" value="<?= $data['property'] ?? '' ?>" placeholder="Floor and Lift?" required>
<?= isset($alert['property']) ? '<span class="alert error">' . html($alert['property']) . '</span>' : '' ?>
</div>
<div class="field input-50 ">
<input type="text" id="rooms" name="rooms" value="<?= $data['rooms'] ?? '' ?>" placeholder="No. of rooms" required>
<?= isset($alert['rooms']) ? '<span class="alert error">' . html($alert['rooms']) . '</span>' : '' ?>
</div>
<div class="field input-50 first-50">
<input type="text" id="package" name="package" value="<?= $data['package'] ?? '' ?>" placeholder="Do you need packaging" required>
<?= isset($alert['package']) ? '<span class="alert error">' . html($alert['package']) . '</span>' : '' ?>
</div>
<div class="field input-50">
<input type="text" id="park" name="park" value="<?= $data['park'] ?? '' ?>" placeholder="Is there parking?" required>
<?= isset($alert['park']) ? '<span class="alert error">' . html($alert['park']) . '</span>' : '' ?>
</div>
<div class="field">
<textarea id="text" name="items" placeholder="What items are you moving? e.g Washing Machine, Double Sofa..." required><?= $data['items']?? '' ?></textarea>
<?= isset($alert['items']) ? '<span class="alert error">' . html($alert['items']) . '</span>' : '' ?>
</div>
<input class="button-1 fade-in same-page ease" type="submit" name="submit" value="REQUEST A QUOTE">
</div>
</form>
<?php endif ?>
mail-form-data.php
<?php
function mailFormData($data) {
// $data (array) contains the form's sent data
$name = $data['name'];
$phone = $data['phone'];
$email = $data['email'];
$service = $data['service'];
$pick = $data['pick'];
$drop = $data['drop'];
$property = $data['property'];
$rooms = $data['rooms'];
$package = $data['package'];
$park = $data['park'];
$items = $data['items'];
// perform form data validation - we can use Kirby's validators,
// available via "v":
$errors = array();
if(empty(trim($name))){ $errors[] = 'name'; }
if(!v::email($data['email'])) { $errors[] = 'email'; }
if(!empty($website)){ $errors[] = 'website'; }
$result = array();
$result['errors'] = $errors;
// if we have validation errors, we can stop and return them:
if(!empty($errors)){
$result['success'] = false;
$result['msg'] = 'Validation Failed';
return $result;
}
// if we have no errors, we can go ahead and build an email message.
// $to, $from and $subject can be hard-coded here, or can alternatively
// be retrieved from values entered by the user in a page:
$to = 'hello@mango-media.eu';
$from = $email;
$subject = 'Message From Your Website';
$body = <<<BODY
From: {$name}
--------------------------------------------------------
Email: {$email}
--------------------------------------------------------
Phone: {$phone}
--------------------------------------------------------
Service: {$service}
--------------------------------------------------------
Pickup: {$pick}
--------------------------------------------------------
Dropoff: {$drop}
--------------------------------------------------------
Property: {$property}
--------------------------------------------------------
Rooms: {$rooms}
--------------------------------------------------------
Packaging: {$package}
--------------------------------------------------------
Parking: {$park}
--------------------------------------------------------
Items: {$items}
--------------------------------------------------------
BODY;
// now, let's try sending the email:
$email = email(array('to' => $to,'from' => $from,'subject' => $subject,'body' => $body));
if($email->send()){
// email was sent successfully
$result['success'] = true;
$result['msg'] = "Email sent successfully.";
} else {
// email delivery was not successful - report error
$result['success'] = false;
$result['msg'] = 'Email Delivery Failed: ' . $email->error()->message();
}
return $result;
}