PHP验证错误消息顺序

时间:2014-02-21 09:11:00

标签: php validation

当用户提交表单时,所有POST数据都会发送到salesforce。我目前正致力于改进服务器上的验证过程。

当用户错过所有字段时,验证过程会选择公司名称作为错误消息。

无论如何都要按顺序进行验证,例如如果没有填写任何字段,则第一个名称是显示的第一条错误消息。

请查看以下代码。

的index.php

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="POST">
<input type='hidden' name="lead_source" value="web-to-lead">
<input type='hidden' name="Campaign_ID" value="campaignid">
<input type='hidden' name="oid" value="uniqueid">
<input type='hidden' name="ididid" value="Grade 3 (Hot)">
<input type='hidden' name="retURL" value="www.niceic.com">
<input type="hidden" id="recordType" name="recordType" value="ididididid">
<input type='hidden' name="designgenieid" value="Design Genie Webinar">

<div class="errorMessage"><?php if(isset($error)){ echo $error; } ?></div>

<label for="first_name">First Name</label>
<input  id="first_name" name="first_name" size="20" type="text" value="<?php echo $_POST['first_name']; ?>" /><br>

<label for="last_name">Last Name</label>
<input  id="last_name" name="last_name" size="20" type="text" value="<?php echo $_POST['last_name']; ?>" /><br>

<label for="phone">Phone</label>
<input  id="phone" name="phone" size="20" type="text" value="<?php echo $_POST['phone']; ?>" /><br>

<label for="email">Email</label>
<input  id="email" name="email" size="20" type="text" value="<?php echo $_POST['email']; ?>"  /><br>

<label for="company">Company</label>
<input  id="company" name="company" size="20" type="text" value="<?php echo $_POST['company']; ?>"  /><br>

<label for="00ND0000005gYZo">Question<input id="00ND0000005gYZo" maxlength="80" name="00ND0000005gYZo" value="<?php echo $_POST['00ND0000005gYZo']; ?>" type="text">

<br><input type="submit" name="submit">

</form>

的config.php

<?php

//Initialize the $query_string variable for later use
$query_string = "";



if(isset($_POST['submit'])){

    if ($_POST['first_name'] == "") {
        $error="Please enter in your first name<br>";
    } elseif (!preg_match("/^[a-zA-Z ]*$/", $_POST['first_name'])) {
                $error="Only letters and white space allowed<br>";
        }



    if($_POST['last_name'] == ""){
        $error="Please enter in your last name<br>";
        }elseif(!preg_match("/^[a-zA-Z ]*$/",$_POST['last_name'])){
                    $error="Only letters and white space allowed<br>";
            }

    if($_POST['phone'] == ""){
        $error="Please enter in your phone number<br>"; 
    }elseif(preg_match("/^[0-9]{3}-[0-9]{4}-[0-9]{4}$/", $_POST['phone'])){
      $error="Please enter in a valid phone number<br>";    
        }

    if($_POST['email'] == ""){
        $error="Please enter in your email<br>";
    }else if(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$_POST['email'])){
            $error="Please enter in a valid email address<br>";
        }

    if($_POST['company'] == ""){
        $error="Please enter in your Company details<br>";
        } elseif (!preg_match("/^[a-zA-Z ]*$/", $_POST['first_name'])) {
                    $error="Only letters and white space allowed<br>";
            }


    if(isset($error)){
        //echo $error;
    }else{
            if ($_POST) {

            //Initialize the $kv array for later use
            $kv = array();

            //For each POST variable as $name_of_input_field => $value_of_input_field
            foreach ($_POST as $key => $value) {

            //Set array element for each POST variable (ie. first_name=Arsham)
            $kv[] = stripslashes($key)."=".stripslashes($value);


            }


            //Create a query string with join function separted by &
            $query_string = join("&", $kv);
            }
            //Check to see if cURL is installed ...
            if (!function_exists('curl_init')){
            die('Sorry cURL is not installed!');
            }

            //The original form action URL from Step 2 :)
            $url = 'https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8';

            //Open cURL connection
            $ch = curl_init();


            //Set the url, number of POST vars, POST data
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_POST, count($kv));
            curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string);

            //Set some settings that make it all work :)
            curl_setopt($ch, CURLOPT_HEADER, FALSE);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

            //Execute SalesForce web to lead PHP cURL
            $result = curl_exec($ch);

            //close cURL connection
            curl_close($ch);
    }

};


?>

3 个答案:

答案 0 :(得分:2)

您需要做的就是在检查之前初始化$ error,而不是像

那样设置它
$error = "Please enter in your first name<br>";

您应该只将所有错误附加到字符串中,如下所示:

$error .= "Please enter in your first name<br>";

您的代码应如下所示:

if(isset($_POST['submit']))
{
$error = "";

if ($_POST['first_name'] == "") {
    $error .= "Please enter in your first name<br>";
} elseif (!preg_match("/^[a-zA-Z ]*$/", $_POST['first_name'])) {
            $error .= "Only letters and white space allowed<br>";
    }



if($_POST['last_name'] == ""){
    $error .= "Please enter in your last name<br>";
    }elseif(!preg_match("/^[a-zA-Z ]*$/",$_POST['last_name'])){
                $error .= "Only letters and white space allowed<br>";
        }

...

if(isset($error) && trim($error) != ""){
    //echo $error;
}else{
....

答案 1 :(得分:2)

Tokk回答了你的直接问题。

您还可以添加最后一项检查以查看所有POST变量是否为空并覆盖您的错误。

然而,您的验证代码正在重新发明轮子,这在处理生产代码时通常很糟糕。 我建议你看一下php验证组件,这些组件可以完成你的工作,但更好更安全。

请参阅Symfony Validation ComponentZend Filter

(我只知道symfony的一个,它可以单独使用,Zend应该也很好,但我不知道它是否需要一些先决条件,如Zend_Form等。)

答案 2 :(得分:-1)

如果您希望优先考虑这些错误,那么您必须在最后一种方式中进行名字验证,而不是公司验证(从下到上)。实际您的变量$ error正在替换每个验证,因此它获得了公司验证。如果要显示所有验证,则将$ error作为数组生成,否则从下到上放置验证。

对于一次使用一个错误,请使用以下代码

 if($_POST['last_name'] == ""){
    $error="Please enter in your last name<br>";
    }elseif(!preg_match("/^[a-zA-Z ]*$/",$_POST['last_name'])){
                $error="Only letters and white space allowed<br>";
        }

if($_POST['phone'] == ""){
    $error="Please enter in your phone number<br>"; 
}elseif(preg_match("/^[0-9]{3}-[0-9]{4}-[0-9]{4}$/", $_POST['phone'])){
  $error="Please enter in a valid phone number<br>";    
    }

if($_POST['email'] == ""){
    $error="Please enter in your email<br>";
}else if(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$_POST['email'])){
        $error="Please enter in a valid email address<br>";
    }

if($_POST['company'] == ""){
    $error="Please enter in your Company details<br>";
    } elseif (!preg_match("/^[a-zA-Z ]*$/", $_POST['first_name'])) {
                $error="Only letters and white space allowed<br>";
        }

if ($_POST['first_name'] == "") {
    $error="Please enter in your first name<br>";
} elseif (!preg_match("/^[a-zA-Z ]*$/", $_POST['first_name'])) {
            $error="Only letters and white space allowed<br>";
    }

一次显示所有错误

 <?php

//Initialize the $query_string variable for later use
$query_string = "";



if(isset($_POST['submit'])){
$error=array();

if ($_POST['first_name'] == "") {
    $error[]="Please enter in your first name<br>";
} elseif (!preg_match("/^[a-zA-Z ]*$/", $_POST['first_name'])) {
            $error[]="Only letters and white space allowed<br>";
    }

if($_POST['last_name'] == ""){
    $error[]="Please enter in your last name<br>";
    }elseif(!preg_match("/^[a-zA-Z ]*$/",$_POST['last_name'])){
                $error[]="Only letters and white space allowed<br>";
        }

if($_POST['phone'] == ""){
    $error[]="Please enter in your phone number<br>"; 
}elseif(preg_match("/^[0-9]{3}-[0-9]{4}-[0-9]{4}$/", $_POST['phone'])){
  $error[]="Please enter in a valid phone number<br>";    
    }

if($_POST['email'] == ""){
    $error[]="Please enter in your email<br>";
}else if(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$_POST['email'])){
        $error[]="Please enter in a valid email address<br>";
    }

if($_POST['company'] == ""){
    $error[]="Please enter in your Company details<br>";
    } elseif (!preg_match("/^[a-zA-Z ]*$/", $_POST['first_name'])) {
                $error[]="Only letters and white space allowed<br>";
        }



if(isset($error)){
    foreach($error as $er){
echo $er."<br/>";}
}else{
        if ($_POST) {

        //Initialize the $kv array for later use
        $kv = array();

        //For each POST variable as $name_of_input_field => $value_of_input_field
        foreach ($_POST as $key => $value) {

        //Set array element for each POST variable (ie. first_name=Arsham)
        $kv[] = stripslashes($key)."=".stripslashes($value);


        }


        //Create a query string with join function separted by &
        $query_string = join("&", $kv);
        }
        //Check to see if cURL is installed ...
        if (!function_exists('curl_init')){
        die('Sorry cURL is not installed!');
        }

        //The original form action URL from Step 2 :)
        $url = 'https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8';

        //Open cURL connection
        $ch = curl_init();


        //Set the url, number of POST vars, POST data
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, count($kv));
        curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string);

        //Set some settings that make it all work :)
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

        //Execute SalesForce web to lead PHP cURL
        $result = curl_exec($ch);

        //close cURL connection
        curl_close($ch);


   }

};


?>