LINUX.ORG.RU

PHP: Валидация полей в веб-форме, выбор из нескольких. Как?


0

1

Друзья, есть 2 поля в веб-форме. Мне нужно сделать проверку на заполнение одного из них. К примеру в одно вводят 4 а в другое ничего не вводят.

Как проверить, заполнено ли минимум одно из полей??

Сейчас у меня как-то так:

if(empty($_POST['pole1'])) {
$errorMessage .= "<li>Поле1: Поле не может быть пустым!</li>";}elseif(!preg_match("|^[\d]+$|",$_POST['pole1'], $matches) === TRUE) {$errorMessage .= '<li>Поле1: Введите числовое значение!</li>';}elseif (preg_match("/[\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\+|\?|\/|\\|\||\<|\>|\,|\;|\:|\'|\"|\{|\}|\[|\]\=]/",$_POST['pole1'], $matches)) {$errorMessage .= '<li>Поле1: Введен запрещенный символ!</li>';}

if(empty($_POST['pole2'])) {
$errorMessage .= "<li>Поле2: Поле не может быть пустым!</li>";}elseif(!preg_match("|^[\d]+$|",$_POST['pole2'], $matches) === TRUE) {$errorMessage .= '<li>Поле2: Введите числовое значение!</li>';}elseif (preg_match("/[\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\+|\?|\/|\\|\||\<|\>|\,|\;|\:|\'|\"|\{|\}|\[|\]\=]/",$_POST['pole2'], $matches)) {$errorMessage .= '<li>Поле2: Введен запрещенный символ!</li>';}

мне нужно что-то похожее, но грамотно написаное:

if(empty($_POST['pole1'])) && (empty($_POST['pole2'])) {
$errorMessage .= "<li>Поля: Одно из полей должно быть заполнено!</li>";}elseif(!preg_match("|^[\d]+$|",$_POST['pole1'], $matches) === TRUE) {$errorMessage .= '<li>Поля: Введите числовое значение!</li>';}elseif(!preg_match("|^[\d]+$|",$_POST['pole2'], $matches) === TRUE) {$errorMessage .= '<li>Поля: Введите числовое значение!</li>';}elseif (preg_match("/[\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\+|\?|\/|\\|\||\<|\>|\,|\;|\:|\'|\"|\{|\}|\[|\]\=]/",$_POST['pole1'], $matches)) {$errorMessage .= '<li>Поля: Введен запрещенный символ!</li>';}elseif (preg_match("/[\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\+|\?|\/|\\|\||\<|\>|\,|\;|\:|\'|\"|\{|\}|\[|\]\=]/",$_POST['pole2'], $matches)) {$errorMessage .= '<li>Поля: Введен запрещенный символ!</li>';}

подскажите пожлауйста, заранее большое спасибо!

Блин, я думал, что так только на Perl'е писать можно.

KRoN73 ★★★★★
()

Всё хорошо, оставь как есть.

Я никогда не вернуть на такой сайт.

«Числовой значение» - это что вообще? 2+5 подойдёт?

r2d2
()
Ответ на: комментарий от r2d2

И вообще, что за «Поле», «Число», блджад!

Конкретнее надо, типа «Сумма», «Возраст», «Ставка», «Процент».

r2d2
()

1. отформатируй код нормально. 2. убери жуткие ифы, вынеси валидации куда-нибудь. 3. приведи это к простой логике в пару строк.

kelyar ★★★★★
()
Ответ на: комментарий от r2d2

Что вы имеете ввиду, поясните пожалуйста.

По поводу числового значения - не придирайтесь к словам. Это лишь пример!

Мне хотелось бы знать, как сделать обязательным ввод одного из нескольких полей... Для этого и спросил :)

real_kas
() автор топика
Ответ на: комментарий от real_kas

Это же тривиальная логика:

if (одно || другое) {
 // ok
} else {
 // not ok
}

// Если только одно: || -> ^^

r2d2
()

нужно что-то похожее, но грамотно написаное

Буду чуть-чуть добрым:

1. Одно условие — одна строка. Как минимум. Иначе глаза ломаются.

2. elseif(!preg_match(«|^[\d]+$|»,$_POST['pole2'], $matches) === TRUE)

2.1. ^[\d]+$ — квадратные скобки не обязательны

2.2. Для этого есть http://php.net/is_numeric

3. $matches у тебя, вроде, нигде не используется. Соответственно, можно не писать в вызовах.

Как проверить, заполнено ли минимум одно из полей??

if(empty($_POST['$field1']) &&  empty($_POST['field2']))
    throw new Exception('Опаньки. Введите ну хоть что-нибудь!');
KRoN73 ★★★★★
()
Ответ на: комментарий от anthill

Отлично! Спасибо большое еще раз за полезные линки! Больше не буду городить перлоподобный огород... жуть сам понимаю что нагородил...

real_kas
() автор топика

real_kas

Сейчас у меня как-то так:

сейчас у вас write-only говнокод.

drBatty ★★
()

Насчет логики не знаю. Но...

define("NOT_DIGITS",     "notDigits");
define("STRING_EMPTY",     "digitsStringEmpty");
define("INVALID",     "digitsInvalid");

function filterDigits($value)
{
    $unicodeEnabled = (@preg_match('/\pL/u', 'a')) ? true : false;
    
    if (!$unicodeEnabled)
    {
        $pattern = '/[^0-9]/';
    }
    else if (extension_loaded('mbstring'))
    {
        $pattern = '/[^[:digit:]]/';
    }
    else
    {
        $pattern = '/[\p{^N}]/';
    }
    
    return preg_replace($pattern, '', (string) $value);
    
}

function isValid($value, &$error)
{
    if (!is_string($value) && !is_int($value) && !is_float($value)) {
        $error = INVALID;
        return false;
    }
    
    if ('' === (string) $value) {
        $error = STRING_EMPTY;
        return false;
    }
    
    if ($value !== filterDigits($value)) {
        $error = NOT_DIGITS;
        return false;
    }

    return true;
    
}

$messageTemplates = array(
    NOT_DIGITS   => "'%s' must contain only digits",
    STRING_EMPTY => "'%s' is an empty string",
    INVALID      => "Invalid type given. String, integer or float expected",
);

$error = NULL;
$value = 'что-нибудь';
if (!isValid($value, $error))
{
    echo "Error: " . $error . " ";
    printf($messageTemplates[$error], $value);
}

valich ★★★
()

Я всё чаще задумываюсь, над тем, что анонимус был прав. PHP язык для быдлокодеров.

VirRaa ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.