Около двух месяцев назад я обновил веб-сайт SilverStripe с 2.3.5 до 2.4.6. С момента обновления некоторые из форм на моем сайте не отправят все данные в функцию отправки (запись POST пуста), включая «системные» формы, такие как форма забытого пароля для раздела администратора (и я думаю, что даже поле пароля для формы входа администратора). То, что я нахожу странным, состоит в том, что у меня есть почти идентичная (но другая) форма кода с тем же полем, которая работает отлично, но даже копирование поля не работает.Форма SilverStripe не отправляет все данные?
Вот рабочая форма и ее представить код:
function ContactUsForm() {
// Create fields
$fields = new FieldSet(
new HeaderField('Send Us a Message:', '2'),
new TextField('NAME', 'Full Name:'),
new EmailField('EMAIL', 'E-mail Address:'),
new TextField('PHONE', 'Phone:'),
new TextField('COMPANYNAME', 'Company Name:'),
new TextareaField('MESSAGE', 'Message/Note:'),
new TextField('HUMAN', '1+1 =')
);
// Create actions
$actions = new FieldSet(
new FormAction('doContactUs', 'Submit')
);
return new Form($this, 'ContactUsForm', $fields, $actions);
}
function doContactUs($data, $form) {
$human = $data['HUMAN'];
if ($human == '2') {
$from = '[email protected]';
$to = '[email protected]';
$subject = 'General Contact Submission';
$body = $data['NAME'] . ' has submitted a General Inquiry, their info: ' . $data['NAME'] . ' | ' . $data['EMAIL'] . ' | ' . $data['PHONE'] . ' | ' . $data['COMPANYNAME'] . ' and they have included the following note (if they included a note): ' . $data['MESSAGE'];
$email = new Email($from, $to, $subject, $body);
$email->send();
Director::redirect('thankyou/');
} else {
$form->addErrorMessage('Message', 'Incorrect answer to the human check.','error');
return Director::redirectBack();
}
}
Вот форма, которая не работает, а его представить код:
function GenericContactForm() {
global $contactmessage;
// Create fields
$fields = new FieldSet(
new TextField('NAME', 'Full Name:'),
new EmailField('EMAIL', 'Email:'),
new TextField('TELEPHONE', 'Work Phone:'),
new ListboxField(
$name = "TYPEOFCONTACT",
$title = "Office Type:",
$source = array(
"Single Person Office" => "Single Person Office",
"Team Room" => "Team Room",
"Open Plan" => "Open Plan"
),
$value = 1
),
new TextField('HUMAN', '1+1 =')
);
// Create actions
$actions = new FieldSet(
new FormAction('doGenericContact', 'Submit')
);
return new Form($this, 'GenericContactForm', $fields, $actions);
}
function doGenericContact($data, $form) {
$human = $data['HUMAN'];
if ($human == '2') {
$from = $data['EMAIL'];
$to = '[email protected]';
$subject = 'Contact Request';
$body = 'The following individual has requested to be contacted: ' . $data['NAME'] . ' | ' . $data['EMAIL'] . ' | ' . $data['TELEPHONE'] . ' and they have made contact to inquire about the following: ' . $data['TYPEOFCONTACT'];
$email = new Email($from, $to, $subject, $body);
$email->send();
Director::redirect('/thankyou/');
} else {
$form->addErrorMessage('Message', "Incorrect answer to the human check. (Your answer: $human)", 'error');
return Director::redirectBack();
}
}
Я попытался удалить ListboxField, так как это единственная реальная разница, которую я нашел. Я также попытался проверить его локально, удалив все внутри «истинной» части оператора if в функции отправки, и он работает локально, но не на сервере, что заставляет меня думать, что это может быть конфликт между чем-то в SilverStripe и настройка сервера (у меня ограниченный доступ к серверу). Кроме того, эти формы работали до обновления.
Любые идеи о том, что вызывает это, и что я могу сделать, чтобы исправить это?
Редактировать - Дальнейшее устранение неполадок обнаружило, что в массиве сообщений нет неработающих форм.
Вы заявляете, что «некоторые из форм на моем сайте не отправят все данные». Просьба уточнить, в чем проблема. Являются ли формы не отправлением электронной почты или они отправляют электронную почту, но с отсутствующими данными поля? – ryanwachtl
@ryanwachtl - Это даже не относится к коду электронной почты, потому что он не проходит мимо проверки человека. «Человеческая» POST-переменная пуста. – Shauna
Я ничего не вижу в вашем коде, чтобы предотвратить работу формы. Попробуйте использовать 'Debug :: show ($ data)' in' doGenericContact() ', чтобы посмотреть, что отправляется из формы. После того, как вы подтвердите, что значение '$ data ['HUMAN']' имеет значение, убедитесь, что ваш почтовый сервер отправит электронные письма как поступающие из домена, отличного от вашего собственного. У меня есть ощущение, что проблема связана с настройкой электронной почты серверов, а не с SilverStripe. – ryanwachtl