When I try to send a form with some files using Uniform, I always get an error message that the file format is not correct, even if the file format is right.
This is the controller code:
<?php
use Uniform\Form;
return function ($kirby) {
$form = new Form([
'bewerbungals' => [
'rules' => ['required'],
'message' => 'Geben Sie die Stelle ein, für die Sie sich bewerben',
],
'name' => [
'rules' => ['required'],
'message' => 'Geben Sie Ihren Namen ein',
],
'strasse' => [
'rules' => ['required'],
'message' => 'Geben Sie Ihre Strasse und Hausnummer ein',
],
'plzort' => [
'rules' => ['required'],
'message' => 'Geben Sie Ihren Wohnort und Ihre Postleitzahl ein',
],
'telefon' => [
'rules' => ['required'],
'message' => 'Geben Sie Ihre Telefonnummer ein',
],
'fax' => [],
'email' => [
'rules' => ['required', 'email'],
'message' => 'Geben Sie Ihre Emailadresse ein',
],
'filefield1' => [
'rules' => [
'required',
'file',
'mime' => ['application/pdf'],
'filesize' => 3000,
],
'message' => [
'Please choose a file.',
'Bitte senden Sie ausschliesslich Dateien.',
'Bitte senden Sie ausschliesslich PDF, Word und Jpeg-Dateien.',
'Die gesendeten Dateien müssen kleiner als 3MB sein.',
],
],
'filefield2' => [
'rules' => [
'required',
'file',
'mime' => ['application/pdf'],
'filesize' => 3000,
],
'message' => [
'Please choose a file.',
'Bitte senden Sie ausschliesslich Dateien.',
'Bitte senden Sie ausschliesslich PDF, Word und Jpeg-Dateien.',
'Die gesendeten Dateien müssen kleiner als 3MB sein.',
],
],
'filefield3' => [
'rules' => [
'required',
'file',
'mime' => ['application/pdf'],
'filesize' => 3000,
],
'message' => [
'Please choose a file.',
'Bitte senden Sie ausschliesslich Dateien.',
'Bitte senden Sie ausschliesslich PDF, Word und Jpeg-Dateien.',
'Die gesendeten Dateien müssen kleiner als 3MB sein.',
],
],
'datenschutz' => [
'rules' => ['required'],
'message' => 'Markieren Sie die Checkbox für die Datenschutzerklärung',
],
]);
// get the uploads
$upload1 = $kirby->request()->files()->get('filefield1');
$upload2 = $kirby->request()->files()->get('filefield2');
$upload3 = $kirby->request()->files()->get('filefield3');
$uploads = array($upload1, $upload2, $upload3);
// loop through uploads and check if they are valid
if ($kirby->request()->is('POST')) {
foreach ($uploads as $upload) {
// if no file is uploaded (its not required)
if ($upload['error'] === 4) {
// do nothing
} else {
$name = $upload['tmp_name'];
$tmpName = pathinfo($name);
// sanitize the original filename
$filename = $tmpName['dirname']. '/'. F::safeName($upload['name']);
if (rename($upload['tmp_name'], $filename)) {
$name = $filename;
}
// add the files to the attachments array
$attachments[] = $name;
}
};
$form->emailAction([
'template' => 'email',
'to' => 'guy@t-online.de',
'from' => 'bewerbung@job.de',
'subject' => 'Neue Bewerbung von {{email}}',
'attachments' => $attachments,
]);
};
return compact('form');
};
Strangely enough, if I send the form without a file, I get the second error message (‘Bitte senden Sie ausschliesslich Dateien.’). Shouldn’t that be the first one in this case (for ‘required’)?
What could be the reason for this?