Я добавляю некоторую новую проверку в текущую форму, у меня есть три отдельных массива, которые я построил для блоков выбора, и мне нужно быть уверенным, что пользователь делает хотя бы один из вариантов выбора. В этот момент, когда пользователь заполняет нашу форму, он отправляет и отправляет, но «Обязательный» отображается рядом с пустым полем выбора в форме, даже в уведомлении говорится, что оно было отправлено, и форма будет отправлена, даже если пользователь не сделал выбор. Я пытался найти решение везде, надеясь получить второй взгляд на эту проблему. Заранее спасибо за ваше время!
Поле выбора в форме —
<?php echo $monthMessage; ?>
<select name="mm" class="select-form-style">
<option>
- Select Month -
</option>
<?php
foreach ($months as $month) {
$selected = (!empty($mm) && $mm == $month) ? 'selected="selected"' : '';
?>
<option value="<?php echo $month;?>" <?php echo $selected;?>>
<?php echo $month;?>
</option>
<?php
}
?>
Проверка формы PHP
<?php #Registration
$months = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December');
$season = array('Fall 2014', 'Winter 2014', 'Spring 2015', 'Summer 2015');
$locations = array('Priest River', 'Sandpoint', 'Online');
function makeSafe($value) {
return stripslashes(trim($value));
}
//if the form was subitted
if (!empty($_POST['submit'])) {
//form submitted through post, do validation
$authorization = (!empty($_POST['authorization'])) ? makeSafe($_POST['authorization']) : '';
$signature = (!empty($_POST['signature'])) ? makeSafe($_POST['signature']) : '';
$cc = makeSafe($_POST['cc']);
$ll = makeSafe($_POST['ll']);
$fname = makeSafe($_POST['fname']);
$mname = makeSafe($_POST['mname']);
$lname = makeSafe($_POST['lname']);
$mm = makeSafe($_POST['mm']);
$day = makeSafe($_POST['day']);
$year = makeSafe($_POST['year']);
$age = makeSafe($_POST['age']);
$school = makeSafe($_POST['school']);
$address = makeSafe($_POST['address']);
$city = makeSafe($_POST['city']);
$state = makeSafe($_POST['state']);
$zip = makeSafe($_POST['zip']);
$gender = makeSafe($_POST['gender']);
$email = makeSafe($_POST['email']);
$phone = makeSafe($_POST['phone']);
$altph = makeSafe($_POST['altph']);
$hp = makeSafe($_POST['hp']);
$packet = (!empty($_POST['signature'])) ? makeSafe($_POST['packet']) : '';
$message = '';
$problem = FALSE;
if(!empty($_POST['mm']))
{
$monthMessage .= '<p class="errorClass">Required</p>';
}
if(!empty($_POST['cc']))
{
$seasonMessage .= '<p class="errorClass">Required</p>';
}
if(!empty($_POST['ll']))
{
$locationMessage .= '<p class="errorClass">Required</p>';
}
if($_POST['authorizaton']!="1" AND $_POST['packet']!="1"){
$problem = TRUE;
$parentMessage .= '<p class="errorClass parentMsg">Please read and check the boxes below
</p>';
}
if($_POST['signature']!="1"){
$problem = TRUE;
$signatureMessage .= '<p class="errorClass">Required</p>';
}
//Check First Name
if (!eregi ('^[[:alpha:]\.\' \-]{2,}$',$fname)) {
$problem = TRUE;
$fnameMessage .= '<p class="errorClass">Required</p>';
}
if (!eregi ('^[[:alpha:]\.\' \-]{2,}$',$lname)) {
$problem = TRUE;
$lnameMessage .= '<p class="errorClass">Required</p>';
}
if (!eregi ('^[[:alnum:]\.\' \-]{4,}$', $school)) {
$problem = TRUE;
$schoolMessage .= '<p class="errorClass">Required</p>';
}
if (!eregi ('^[[:alnum:]\.\' \#\-]{4,}$', $address)) {
$problem = TRUE;
$addyMessage .= '<p class="errorClass">Required</p>';
}
if (!eregi ('^[[:alpha:]\.\' \-]{4,}$', $city)) {
$problem = TRUE;
$cityMessage .= '<p class="errorClass">Required</p>';
}
if (!eregi ('^[[:alpha:]\.\' \-]{2,2}$', $state)) {
$problem = TRUE;
$stateMessage .= '<p class="errorClass">Required</p>';
}
if (!eregi ('^[[:alnum:]][a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.([a-zA-Z]{2,4})$',$email)) {
$problem = TRUE;
$emailMessage .= '<p class="errorClass">Required</p>';
}
if (!eregi ('^[0-9]{5}(\-[0-9]{4})?$',$zip)) {
$problem = TRUE;
$zipMessage .= '<p class="errorClass">Required</p>';
}
if (!eregi ('^[0-9.\(\)\-\ ]{10,14}$', $phone)) {
$problem = TRUE;
$phoneMessage .= '<p class="errorClass">Required</p>';
}
if(!eregi('^[0-9]{2}$',$age)) {
$problem = TRUE;
$ageMessage .= '<p class="errorClass">Required</p>';
}
if(!eregi('^[0-9]{2,4}$',$year)) {
$problem = TRUE;
$yearMessage .= '<p class="errorClass">Required</p>';
}
if(!eregi('^[0-9]{1,2}$',$day)) {
$problem = TRUE;
$dayMessage .= '<p class="errorClass">Required</p>';
}
if ($problem == TRUE) {//Something went wrong
echo $message;
echo '';
}
else{
$to = "[email protected]";
$subject = "Buckle-Up New Student Registration";
$headers = 'From: [email protected]' . "\r\n" .'X-Mailer: PHP/' . phpversion();
$msg .= "PLAIN TEXT EMAIL\n\n";
$msg .= "Location: $ll Class: $cc\n\n";
$msg .= "Name: $fname $mname $lname\n\n";
$msg .= "Birthday: $mm $day $year Age: $age Gender: $gender\n\n";
$msg .= "School: $school\n\n";
$msg .= "Address: $address\n\n";
$msg .= "City: $city State: $state Zip Code: $zip\n\n";
$msg .= "Phone: $phone Alternate Contact: $altph\n\n";
$msg .= "Email: $email\n\n";if(mail($to, $subject, $msg, $headers) == false){
// Email failed
echo '<p>An error occured while trying to process your request</p>';
}
else {
echo '<p>Thank you for registering with Buckle-Up Driving School!</p>';
$authorization = '';
$ll = '';
$cc = '';
$fname = '';
$mname = '';
$lname = '';
$mm = '';
$day = '';
$year = '';
$age = '';
$school = '';
$address = '';
$city = '';
$state = '';
$zip = '';
$gender = '';
$email = '';
$phone = '';
$altph = '';
$hp = '';
$signature = '';
$packet = '';
}
}
}
?>
Я не уверен, что понял проблему, но если я последую своему мнению по этому поводу, мой ответ будет таким:
Ваша ошибка там наверху:
if(!empty($_POST['mm']))
{
$monthMessage .= '<p class="errorClass">Required</p>';
}
Так что если $_POST['mm']
не является пусто, тогда будет отображаться «Обязательно». Но у вас есть проблема, это значение никогда не будет пустым 🙂
Даже если месяц не выбран (выбрано «- Выберите месяц -»), навигатор отправит содержимое тега параметра в качестве значения выбора;)
Так что у тебя есть $_POST['mm'] = "- Select Month -"
Вы должны сделать этот тест:
// if mm sent and is not empty
if(isset($_POST['mm']) && !empty($_POST['mm']))
{
// if mm is in $months array
if(in_array($_POST['mm'], $months))
{
// this value is not accepted or "- Select Month -" selected
}
else
{
// seems a month is selected and into your $months list
}
}
else
{
// this case happens if don't send "mm" in post
// or if the value of mm is empty
}
Кстати, значение никогда не будет уверен, делая stripslashes(trim($val));
позаботься об этом.
Кстати, вы можете подать заявку makeSafe()
в целом $_POST
массив, выполнив это:
foreach($_POST as $k => $v)
{
$P[$k] = makeSafe($v);
}
затем назвать ваши данные как $P['mm']
Надеюсь, это помогло!
Других решений пока нет …