2010-04-08 92 views
1

每次我尝试提交表单时,我并没有在年份字段中输入任何内容,我得到Incorrect year!我怎样才能继续提交表单而无需输入一年。换句话说,将年份字段留空并且不会收到警告?PHP表单验证提交问题

这里是PHP代码。

if(preg_match('/^\d{4,}$/', $_POST['year'])) { 
    $year = mysqli_real_escape_string($mysqli, $_POST['year']); 
} else { 
    $year = NULL; 
} 

if($year == NULL) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 
+0

您需要检查'$ year === NULL'。 PHP可以并将默默地将空值转换为空字符串,所以空白的$ year可以等于null。 ===(内容和类型匹配)比较运算符解决了这个问题。 – 2010-04-08 21:55:26

+0

@Marc乙,我试过这个,但由于某种原因,我没有得到它的工作。 – TaG 2010-04-08 21:57:41

回答

0
if(preg_match('/^\d{4,}$/', $_POST['year'])) { 
    $year = mysqli_real_escape_string($mysqli, $_POST['year']); 
} else if(empty($_POST['year'])){ 
    $year = ''; 
} else { 
    $year = null; 
} 

if($year == NULL) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 

也许我误解,但是这听起来像你想要什么。

+0

我仍然收到错误的一年。 – TaG 2010-04-08 21:43:32

+1

如果$ year设置为空字符串,那么$ year == null将计算为true。将$ year == null更改为$ year === null – webbiedave 2010-04-08 21:47:42

1
if(preg_match('/^\d{4,}$/', $_POST['year'])) { 
    $year = mysqli_real_escape_string($mysqli, $_POST['year']); 
} else { 
    $year = false; 
} 

if ($year === false) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 

或者(如果您没有设置YEAR别的地方)

if(preg_match('/^\d{4,}$/', $_POST['year'])) { 
    $year = mysqli_real_escape_string($mysqli, $_POST['year']); 
} 

if (!isset($year)) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 
+0

您的第二个示例一些有用但知道它允许输入一个字符的示例。 – TaG 2010-04-08 21:48:07

+0

问题出在你的preg_match而不是我所做的改变。 – 2010-04-08 21:51:37

+0

如何?请解释。 – TaG 2010-04-08 21:53:21

-1

嘿,你可以只取这部分出来,它会采取的回声出,让您与字段为空提交

if($year == NULL) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 

我不会建议让它变成空白的数据库。也许你可以抓住服务器上的默认日期或默认值,这意味着用户没有填写它。这会消除错误,但仍会在数据库字段中留下一些内容。

+0

你完全误解了验证的概念。您不要通过完全删除代码来解决问题。 – mattbasta 2010-04-11 14:37:47