Задать вопрос

If все поля формы пусты?

Пытаюсь написать код, если все поля формы пусты или произошла ошибка отправки - PHP должен выдать ответ 0, если в форму что-то ввели и оно успешно отправилось - выдать 1.

if ((!name) && (!$email) && (!topic) && (!$message)) {$answer=0;}
elseif (!mail(отправляет)) {$answer=0;}
else {$answer=1;}
echo $answer;


JS, получив от PHP 0, должен подсветить границы формы красным в знак ошибки, а получив 1 - очистить форму.

if(answer==0){$(".clear").css("border-color","red");}
else{$('.clear').val('');}


На самом деле у меня отправляется даже пустая форма. То есть часть про "0 - подсветить границы красным" не работает. В чём может быть ошибка? И как ещё можно написать "если все поля формы пусты" кроме (!name) && (!$email) && (!topic) && (!$message)?
  • Вопрос задан
  • 2454 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
раздели свою задачу на две.
чтобы отладить клиентскую часть, сделай такой скрипт
<? echo 1;
И обращайся к нему сколько влезет.

Чтобы отладить серверную часть - для начала напиши ее без ошибок.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
shaks
@shaks
И как ещё можно написать "если все поля формы пусты" кроме (!name) && (!$email) && (!topic) && (!$message)?

Старайтесь избегать такой нечитабельной писанины, это во первых, во вторых !$var - в первую очередь проверка на булево значение а не на пустоту. Хоть в контексте задачи на это плевать, но об этом лучше знать, и всегда проверять именно на то значение, которое ожидается или же наоборот, - не ожидается.
if($var) - вернет true на то что внутри переменной или чтто есть (пробел например), или оно булевое ДА. и вернет false если переменная пустая, булевое НЕТ или же равно NULL.

Задача весьма "странная" если честно

$answer = false;
$fields  = ['name', 'email', 'topic', 'message'];
foreach($fields as $field)
{
    $$field=trim($$field);
    if(false===(empty($$field))) // Если поле не пустое, значит надо пробовать отправлять (исправил !empty() на 'false===empty()" см. коммент от @FanatPHP )
    {
        $mail_send = true || false;# здесь код отвечающий за отправку мыла
        if($mail_send)
            $answer=true;
        break; // выходим из цикла независимо от результата отправки
    }
}


var answer = 0;
if (a === 0) {
      $(".clear").css("border-color", "red");
    } else {
      $('.clear').val('');
    }
Ответ написан
saksmt
@saksmt
PHP-developer, Backend
Backend (лучше это вынести в классы):
<?php

/**
 * Validates some data against some constraints set in @a $validationMapping
 * @param array $validationMapping Constraints with structure ['fieldName' => 'callback']
 * @param array $data Data to validate with structure ['fieldName' => 'fieldData']
 * @param bool $stopOnError Whether to stop on first occured error
 * @return bool|array True if validation passed, array of fields with errors (['fieldName' => 'validationResult']) otherwise
 */
function validate(array $validationMapping, array $data, $stopOnError = false) {
	$hasErrors = false;
	$fieldsWithErrors = [];
	foreach ($validationMapping as $fieldName => $validator) {
		$validationResult = $validator(isset($data[$fieldName]) ? $data[$fieldName] : null, $fieldName);
		if ($validationResult !== false) {
			$hasErrors = true;
			$fieldsWithErrors[$fieldName] = $validationResult;
		}
		if ($stopOnError && $hasErrors) {
			break;
		}
	}
	return count($fieldsWithErrors) ? $fieldsWithErrors : true;
}

// example

function notEmptyValidator($fieldData, $fieldName) {
	return empty($fieldData) ? sprintf('%s is empty!', $fieldName) : false;
}

function lengthValidatorFactory($minValue = null, $maxValue = null) {
	return function ($fieldData, $fieldName) use ($minValue, $maxValue) {
		if (!isset($fieldData)) {
			return isset($minValue) ?
				($minValue > 0 ? sprinf('%s must be longer than %d', $fieldName, $minValue) : false) :
				false;
		}
		if (isset($minValue)) {
			if (mb_strlen($fieldData) < $minValue) {
				return sprinf('%s must be longer than %d', $fieldName, $minValue);
			}
		}
		if (isset($maxValue)) {
			if (mb_strlen($fieldData) > $maxValue) {
				return sprinf('%s must be shorter than %d', $fieldName, $maxValue);
			}
		}
		return false;
	};
}

$result = validate([
	'name' => 'notEmptyValidator',
	'password' => lengthValidatorFactory(4),
	'email' => lengthValidatorFactory(4, 20),
], $POST['someForm']);

if ($result === false) {
	echo 'Success!';
} else {
	echo '<ul><li>' . implode('</li></li>', $result) . '</li></ul>';
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы