Я веб-разработчик, пытающийся пробиться через форму PHP для внештатного клиента. Это довольно обширная форма заявления о приеме на работу, которую клиент попросил включить две загрузки файлов: изображение (jpg, png) и резюме (pdf, doc). Эти файлы будут прикрепить к письму содержащий форму ответов. Загрузка файлов в папку на сервере постоянно не требуется.
Поскольку я совершенно неадекватен PHP, я прибег к сайту под названием Formbakery сгенерировать упомянутую форму для меня, и это здорово — за исключением того, что она не включает возможности загрузки файлов.
Я пробовал несколько различных ресурсов для загрузки файлов php и вложения электронной почты, в том числе этот урок а также этот ответ, однако проблема в том, что я просто не знаю, как включить это в код, который у меня уже есть. Я надеюсь, что кто-то может помочь мне с сочетанием различных элементов. Если многократная загрузка файла — это слишком много, то даже резюме для резюме будет огромной помощью.
PHP для отправки формы
<?php
// get value from array
function array_get(array $array, $key, $default = null)
{
return (array_key_exists($key, $array)) ? $array[$key] : $default;
}
// get string value from array
function array_get_string(array $array, $key, $default = '', $trim = true)
{
$val = array_get($array, $key);
if (is_string($val)) {
return ($trim) ? trim($val) : $val;
}
return $default;
}
// takes a form array and validates it
function validateForm(array $form)
{
// array of error messages
$errors = array();
// for each field in the form
foreach ($form as $field)
{
// if the field doesnt require any validation, skip it
if (!isset($field['validation'])) continue;
// for each validation type
foreach ($field['validation'] as $validate)
{
// if the field is empty, there is nothing to check
if (trim($field['value']) === '') break;
switch($validate)
{
case 'email':
if(!filter_var($field['value'], FILTER_VALIDATE_EMAIL)) {
$errors[] = '"' . $field['value'] . '" is an invalid email address.';
}
break;
case 'number':
if(!preg_match('/^[0-9 ]+$/', $field['value'])) {
$errors[] = '"' . $field['value'] . '" is an invalid number.';
}
break;
case 'alpha':
if(!preg_match('/^[a-zA-Z ]+$/', $field['value'])) {
$errors[] = '"' . $field['value'] . '" contains invalid characters. This field only accepts letters and spaces.';
}
break;
}
}
// if field is required and empty
if (isset($field['required']) && trim($field['value']) === '') {
// overwrite errors with only the required error message
$errors[] = '"' . $field['name'] . '" is a required field.';
}
}
// return an array of errors
return $errors;
}
// define form
$FORM = array(
'position-applied-for' => array(
'name' => 'Position applied for',
),
// CONTINUE ARRAY ITEMS
);
// populate form values from POST
foreach ($FORM as $field_name => &$field_data) {
$value_type = gettype($_POST[$field_name]);
if ($value_type == 'string')
{
// get the string value from POST data
$field_data['value'] = array_get_string($_POST, $field_name);
}
elseif ($value_type == 'array')
{
// these are multiple checkbox values
// we need to concat them into a string
$concat = '';
foreach (array_get($_POST, $field_name) as $item) {
$concat .= $item . '; ';
}
$field_data['value'] = $concat;
}
}
// unset referenced variable to avoid quirks
unset($field_data);
$AJAX = array_get_string($_POST, 'request_method') === 'ajax';
$ERRORS = validateForm($FORM);
$SUCCESS = count($ERRORS) ? false : true;
// send email
if ($SUCCESS)
{
// Full Name: $fullname \nEmail Address: $emailaddress
$formcontent = '';
$emailtemplate = "INSERT EMAIL TEMPLATE HTML";
foreach ($FORM as $field_name => $field_data) {
$formcontent .= $field_data['name'] . ': ' . $field_data['value'] . " \n";
}
$formcontent = wordwrap($formcontent, 70, "\n", true);
$recipient = 'EMAIL@hotmail.com';
$subject = 'Creed Coffee Application Form';
$mailheader = "From: applications@creed.coffee \r\nContent-Type: text/html;";
mail($recipient, $subject, $emailtemplate, $mailheader);
}
?>
<?php if ($AJAX): ?>
<?php if ($SUCCESS): ?>
PASS
<?php else: ?>
FAIL
<?php endif; ?>
<?php else: ?>
Do a redirect
<?php endif; ?>
Это сопровождается jQuery для проверки и т. Д. Я понимаю, что это большая просьба, и я не ожидаю, что кто-то потратит время, чтобы написать все это для меня, но я был бы очень признателен, если бы кто-то мог даже указать мне в правильное направление или дать мне достаточно указателей, чтобы бороться с этим вперед!
Задача ещё не решена.
Других решений пока нет …