现场验证问题?

时间:2013-12-17 18:10:39

标签: php forms validation

我今天必须要有一个大脑屁...

我正在尝试确保将ZipCode或City输入表单

$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仅适用,City仅不起作用。我做错了什么?

3 个答案:

答案 0 :(得分: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;
}

如果$ zip和$ city都为空,则会设置消息并且$ valid将变为false。

不同之处在于empty()将检查变量的值,其中isset()将检查变量的存在,因此通过设置$ zip和$ city,无论它们是否为null,isset()都会总是为他们回归。

- 更新 -

只是FYI,空也会检查字符串长度,因此不需要同时执行这两项操作。

答案 1 :(得分: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都必须是真的。如果其中任何一个为假,则会显示您的消息。

答案 2 :(得分: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函数之前。在代码的顶部。

相关问题