2013-12-17 2 views
0

я должен быть с массивной пердеть мозг сегодня ...Проблема с проверкой поля?

Я пытаюсь, чтобы убедиться, что либо ZipCode, или Город вводится в виде

$zip = @$_POST['ZipCode']; 
$city = @$_POST['City']; 

// validate, at least zipcode and radius if not City/radius 
$errMsg = ''; 
$valid = true; 
$valCity = (isset($city) && strlen($city) > 0); 
$valZip = (isset($zip) && strlen($zip) > 0); 

if(!(!$valCity && $valZip) || ($valCity && !$valZip)){ 
    $errMsg .= '<p>Please make sure at least a city/town, or zip code is entered.</p>'; 
    $valid = false; 
} 

ZipCode работает только, Город только не работает. Что я делаю не так?

ответ

4

Ваш код немного сложнее, чем нужно, и вы используете isset, где вам действительно нужно использовать пустой.

$zip = $_POST['ZipCode']; 
$city = $_POST['City']; 

// validate, at least zipcode and radius if not City/radius 
$errMsg = ''; 
$valid = true; 

if(empty($zip) && empty($city)){ 
    $errMsg .= '<p>Please make sure at least a city/town, or zip code is entered.</p>'; 
    $valid = false; 
} 

Если оба $ почтовых и $ города пустые, то сообщение будет установлено и $ действительные станет ложными.

Разница в том, что empty() проверит значение переменной, где isset() проверит наличие переменной, поэтому, установив $ zip и $ city, были ли они пустыми или нет, isset() всегда возвращался бы для них.

- ОБНОВЛЕНИЕ -

Просто FYI, пусто будет также проверить длину строки, поэтому нет необходимости делать оба.

0

Используйте это:

if(!isset($zip) || !isset($city)){ 
    $errMsg = '<p>Please make sure at least a city/town, or zip code is entered.</p>'; 
    $valid = false; 
} 

И это:

$errMsg .= 

Может лучше быть:

$errMsg = 

И не должны быть определены следующим образом:

$errMsg = ''; 

Перед функцией if. Наверху где-то из вашего кода.

+1

isset() - это неправильная функция, используемая здесь, если вы не используете ее в переменных $ _POST. – ollieread

1

Ваш if является немного более сложным, чем это должно быть ...

if(!($valCity || $valZip)){ 
    $errMsg .= '<p>Please make sure at least a city/town, or zip code is entered.</p>'; 
    $valid = false; 
} 

Это говорит о том, что оба valCity и valZip нужно, чтобы быть правдой. Если значение false, ваше сообщение будет отображаться.

+0

посмотрите пожалуйста. Мне нужно либо/или ... не оба по требованию – Kevin

+1

Исправлено ... ваше состояние просто должно быть OR. Если это правда, это сработает. – Charlie74

+1

Я точно прояснил вопрос, прочитал его снова, и вы увидите, что 'ZipCode работает только, City только не работает. Что я делаю неправильно? ' – Kevin

Смежные вопросы