2016-03-06 47 views
-3

我正在做一个家庭作业任务,其中涉及使用PHP验证表单。作业要求我通过switch语句来做到这一点,但我遇到了问题。我不知道我要去哪里错了,所以我要包括所有的PHP代码:PHP中的表单验证 - switch语句

<?php 

ini_set('display_errors', 1); 
error_reporting(E_ALL | E_STRICT); 

$firstname = $_POST["firstname"]; 
$lastname = $_POST["lastname"]; 
$street = $_POST["street"]; 
$city = $_POST["city"]; 
$state = $_POST["state"]; 
$zip = $_POST["zip"]; 
$email = $_POST["email"]; 
$payment = $_POST["payment"]; 

$storeNV = array("firstname" => "", "lastname" => "", "street" => "", "city" => "", "state" => "", "zip" => "", 
    "email" => "", "payment" => ""); 

$inputNames = array_keys($storeNV); 

foreach ($inputNames as $name) { 
    $storeNV[$name] = "$_POST[$name]"; 
} 

foreach ($storeNV as $name => $value) { 
    if (isset($value) == false OR $value == "") { 
     $blankError = "Something was left blank!"; 
     print "<h1>$blankError</h1>"; 
     break; #just one error message 
    } 
} 

switch ($name) { 
    case 'firstname' : 
     if (empty($storeNV[firstname)) { 
      $fnameError = "Required field"; 
     break; 
     } 
    case 'lastname' : 
     if (empty($storeNV[lastname])) { 
      $lnameError = "Required field"; 
     break; 
     } 
    case 'street' : 
     if (empty($storeNV[street])) { 
      $streetError = "Required field"; 
     break; 
    } 
    case 'city' : 
     if (empty($storeNV[city])) { 
      $cityError = "Required field"; 
     break; 
    } 
    case 'state' : 
     if (!preg_match("/^[A-ZA-Z]*$/", trim($value))) { 
      $stateError = "Standard state abbrieviations only"; 
     break; 
     } 
    case 'zip' : 
     if (!preg_match("/^[0-9]{5}*$/", trim($value))) { 
      $zipError = "Standard 5-digit zip codes only"; 
     break; 
     } 
    case 'email' : 
     if (!filter_var($storeV[email], FILTER_VALIDATE_EMAIL)) { 
      $emailError = "Invalid email"; 
     break; 
     } 
    case 'payment' : 
     if (empty($storeNV[payment])) { 
      $paymentError = "Please select one"; 
     break; 
     } 
} 
?> 

的错误消息,然后用更多的PHP插入HTML这样的:

<span class="error"><?php echo $fnameError;?></span> 

的问题是,当我尝试运行表单验证,我得到这些一堆:

Notice: Undefined variable: fnameError 

我想我的地方去错在switch语句中,可能的情况下,语法,但我我一直在盯着你这足以让我觉得自己无法想象。

+0

以及之前存在,你得到的错误告诉你,你在验证firstName时没有错误(因为你没有设置它)。但总体来说你的问题是什么? – Jeff

+0

如果你有错误,你可能应该先检查,如果你有任何错误,只尝试显示它们。我将它们推入一个数组'valErrors'并检查该数组的长度。 – Jeff

+0

以及为什么你检查两次,如果这些值是空的? – Jeff

回答

2

问题是变量$ fnameError是未定义的,如上所述。当fname通过验证时会发生这种情况。周围有此两种方式...

要么你先声明所有的错误变量,例如

$fnameError = ""; 
$emailError = ""; 

等或检查变量呼应像

<span class="error"><?php if(isset($fnameError)) echo $fnameError;?></span>