Игнорировать пустые поля формы при отправке переполнения стека

Я довольно новичок в PHP, поэтому я понимаю достаточно, чтобы запутаться, но недостаточно, чтобы сделать что-то продуктивное. У меня есть форма регистрации, которая позволяет пользователю добавить до пяти студентов. Поля формы для каждого учащегося обернуты в их собственный класс div (.student1,, student2, .student3, .student4 и .student5). Я пытаюсь помешать PHP-коду отправлять данные, если все поля в обернутых классах div оставлены пустыми.

Пример 1: если пользователь заполняет информацию для двух учащихся (.student1 и .student2), отправляйте по электронной почте только этим двум учащимся и запрещайте отправку остальных трех.
Пример 2: Если пользователь заполняет только частичную информацию для учащегося, все равно отправьте ВСЕ поля для этого учащегося по электронной почте и игнорируйте других учеников, которые являются полностью пустыми.

Я был бы согласен с реализацией кода, который игнорировал ВСЕ пустые поля формы из всей формы, но я бы предпочел только применить правило ко всем полям в div. Это вообще возможно !?

Вот мой код:

<?php
/* Converts the multiple checkboxs arrays into strings. */
if($_SERVER["REQUEST_METHOD"] == "POST")     {
foreach($_POST as $key => $val) {
if(is_array($_POST[$key])) $_POST[$key] = implode('<br>', $_POST[$key]);
}
}
?>

<?php

if(isset($_POST['submit'])) {

/* POC Info */
$name = $_POST['name'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$location = $_POST['location'];
$referral = $_POST['referral'];

/* Student 1 */
$first1 = $_POST['1first'];
$last1 = $_POST['1last'];
$age1 = $_POST['1age'];
$program1 = $_POST['1program'];
$message1 = $_POST['1message'];
$interests1 = $_POST['1interests'];
/* Student 2 */
$first2 = $_POST['2first'];
$last2 = $_POST['2last'];
$age2 = $_POST['2age'];
$program2 = $_POST['2program'];
$message2 = $_POST['2message'];
$interests2 = $_POST['2interests'];
/* Student 3 */
$first3 = $_POST['3first'];
$last3 = $_POST['3last'];
$age3 = $_POST['3age'];
$program3 = $_POST['3program'];
$message3 = $_POST['3message'];
$interests3 = $_POST['3interests'];
/* Student 4 */
$first4 = $_POST['4first'];
$last4 = $_POST['4last'];
$age4 = $_POST['4age'];
$program4 = $_POST['4program'];
$message4 = $_POST['4message'];
$interests4 = $_POST['4interests'];
/* Student 5 */
$first5 = $_POST['5first'];
$last5 = $_POST['5last'];
$age5 = $_POST['5age'];
$program5 = $_POST['5program'];
$message5 = $_POST['5message'];
$interests5 = $_POST['5interests'];

/* Defines the reciever, sender, and email subject */
$to = "email@clientdomain.com";
$sender = $email;
$subject = "New sign-up request from $name";

/* Defines email headers (from, cc, bcc, reply to, etc) and ensures email body is displayed in HTML format */
$headers = "From: $sender\r\n" . "Reply-To: $sender\r\n" . "Content-type: text/html\r\n" . "X-     Mailer: PHP/" . phpversion();

/* Defines the content of the HTML in the email body */
$email_content = <<<EOD
<strong style="color: red;">Point of Contact</strong><br>
Name: $name <br>
Phone: $phone <br>
Email: $email <br>
Location: $location <br>
Referral: $referral <br><br>
<strong style="color: red;">First Student Information</strong><br>
Name: $first1 $last1 <br>
Age Group: $age1 <br>
Program: $program1 <br>
<strong>Interests and Goals</strong><br>
$interests1 <br>
<strong>Additional Information</strong><br>
$message1 <br><br>
<strong style="color: red;">Second Student Information</strong><br>
Name: $first2 $last2 <br>
Age Group: $age2 <br>
Program: $program2 <br>
<strong>Interests and Goals</strong><br>
$interests2 <br>
<strong>Additional Information</strong><br>
$message2 <br><br>
<strong style="color: red;">Third Student Information</strong><br>
Name: $first3 $last3 <br>
Age Group: $age3 <br>
Program: $program3 <br>
<strong>Interests and Goals</strong><br>
$interests3 <br>
<strong>Additional Information</strong><br>
$message3 <br><br>
<strong style="color: red;">Fourth Student Information</strong><br>
Name: $first4 $last4 <br>
Age Group: $age4 <br>
Program: $program4 <br>
<strong>Interests and Goals</strong><br>
$interests4 <br>
<strong>Additional Information</strong><br>
$message4 <br><br>
<strong style="color: red;">Fifth Student Information</strong><br>
Name: $first5 $last5 <br>
Age Group: $age5 <br>
Program: $program5 <br>
<strong>Interests and Goals</strong><br>
$interests5 <br>
<strong>Additional Information</strong><br>
$message5 <br><br>
EOD;/* Successful pop up message */
echo
"<script>alert('Congratulations on taking your first step! A member of our team will get in touch     with you as soon as possible.');</script>
<script>window.location = 'http://www.clientdomain.com/success.html'</script>";

/* mail syntax is: reciever, subject, email content, and headers which are all defined above) */
mail($to, $subject, $email_content, $headers);} else {

/* Failed pop up message */
echo
"<script>alert('Sorry, there seems to be an error with your submission.');</script>
<script>window.location = 'http://www.clientdomain.com/fail.html</script>";
}

?>

0

Решение

Вы можете упростить многое из того, что у вас есть. Помните, держите это сухим (не повторяйте себя).
Кроме того, я проверяю пустые значения, чтобы вы не получали ошибок для неопределенных индексов, а также даю значение по умолчанию, если его там нет.
Кроме того, обрезка всего, чтобы вы не оставили кучу пробелов до / после чего-либо

Вместо создания 30 переменных (по 6 на каждого учащегося) создайте 1 массив, а затем выполните цикл по массиву позднее. Помогает сохранить его расширяемым в будущем, если вы хотите добавить больше полей или студентов в форму.

Единственный раз, когда информация ученика не добавляется в форму, это когда ВСЕ поля пусты. Если используется только 1, задайте значение по умолчанию для остальных, если они пусты.

<?php
if (isset($_POST['submit'])) {

/* POC Info */

$name=isset($_POST['name'])?trim($_POST['name']):null;
$name=empty($name)?'Default POC Name':$name;
$phone=isset($_POST['phone'])?trim($_POST['phone']):null;
$phone=empty($phone)?'Default POC Phone':$phone;
$email=isset($_POST['email'])?trim($_POST['email']):null;
$email=empty($email)?'Default POC Email':$email;
$location=isset($_POST['location'])?trim($_POST['location']):null;
$location=empty($location)?'Default POC Location':$location;
$referral=isset($_POST['referral'])?trim($_POST['referral']):null;
$referral=empty($referral)?'Default POC referral':$referral;

$students=array();
for ($i=0; $i<=5; $i++) {
$first=trim($_POST[$i.'first']);
$last=trim($_POST[$i.'last']);
$age=intval($_POST[$i.'age']);
$program=trim($_POST[$i.'program']);
$interests=trim($_POST[$i.'interests']);
$message=trim($_POST[$i.'message']);

if (empty($first)&&empty($last)&&empty($age)&&empty($program)&&empty($message)&&empty($interests)) continue;
$students[]=array(
'first'=>empty($first)?'unknown':$first,
'last'=>empty($last)?'unknown':$last,
'age'=>empty($age)?'unknown':$age,
'program'=>empty($program)?'unknown':$program,
'message'=>empty($message)?'unknown':$message,
'interests'=>empty($interests)?'unknown':$interests,
);
}

/* Defines the reciever, sender, and email subject */
$to="email@clientdomain.com";
$sender=$email;
$subject="New sign-up request from $name";

/* Defines email headers (from, cc, bcc, reply to, etc) and ensures email body is displayed in     HTML format */
$headers="From: $sender\r\n"."Reply-To: $sender\r\n"."Content-type: text/html\r\n"."X-     Mailer: PHP/".phpversion();

/* Defines the content of the HTML in the email body */
$email_content=<<<EOD
<strong style="color: red;">Point of Contact</strong><br>
Name: $name <br>
Phone: $phone <br>
Email: $email <br>
Location: $location <br>
Referral: $referral <br><br>
EOD;
$student_num=0;
foreach ($students as $student) {
$email_content.='
<strong style="color: red;">Student '.++$student_num.' Information</strong><br>
Name: '.$student['first'].$student['last'].'<br>
Age Group: '.$student['age'].'<br>
Program: '.$student['program'].'<br>
<strong>Interests and Goals</strong><br>
'.$student['interests'].' <br>
<strong>Additional Information</strong><br>
'.$student['message'].' <br><br>
';
}
?>
1

Другие решения

Как вы уже описали тип «модели», теперь вы должны реализовать его на более низком уровне.

Сначала разделите поля на группы обязательных и дополнительных полей.
Поскольку вы хотите отправить электронное письмо, по крайней мере, поле почты является обязательным. Остальное зависит от тебя.

После этого вы должны внедрить логику в php, которая проверяет, не являются ли обязательные поля не пустыми. Если это так, вы можете отправить письмо с полученной вами информацией (возможно, для этого потребуется еще одна незаполненная проверка).
В противном случае вы отклоните запрос и распечатаете свое сообщение.

Вы можете сделать это на стороне клиента и на стороне сервера. На стороне клиента вы должны добавить атрибут HTML5 required к полям ввода. Но на это нельзя положиться. Это просто сохраняет некоторые запросы. На стороне сервера вы должны проверить все Обязательные поля перед отправкой почты.

Когда вы предоставите больше информации, мы можем дать вам дополнительные советы о том, как реализовать логику в php.

0

Вы можете просто проверить, например, заполнена ли фамилия и включить html-код или нет, например, так: точка перед = важна, она добавляется к строке:

$email_content = <<<EOD
<strong style="color: red;">Point of Contact</strong><br>
Name: $name <br>
Phone: $phone <br>
Email: $email <br>
<br>
Location: $location <br>
Referral: $referral <br><br>
<strong style="color: red;">First Student Information</strong><br>
EOD;

if(!empty($last1)) {
$email_content .= <<<EOD
Name: $first1 $last1 <br>
Age Group: $age1 <br>
Program: $program1 <br>
<strong>Interests and Goals</strong><br>...
EOD;

}
...
0