0

使用各种教程,即herehere,我设法将以下PHP脚本放在一起,该脚本对提交的表单执行服务器端验证。(我已经有处理“客户端”验证的脚本。

<?php
//email signup ajax call
if($_GET['action'] == 'signup'){

    //sanitize data
    $email = mysql_real_escape_string($_POST['signup-email']);

    //validate email address - check if input was empty
    if(empty($email)){
        $status = "error";
        $message = "You did not enter an email address!";
    }
    else if(!preg_match('/^[^\W][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\.[a-zA-Z]{2,4}$/', $email)){ //validate email address - check if is a valid email address
            $status = "error";
            $message = "You have entered an invalid email address!";
    }
    else {

            $insertSignup = mysql_query("INSERT INTO signups (signup_email_address) VALUES ('$email')");
            if($insertSignup){ //if insert is successful
                $status = "success";
                $message = "You have been signed up!";  
            }
            else { //if insert fails
                $status = "error";
                $message = "Ooops, Theres been a technical error!"; 
            }

    }

    //return json response
    $data = array(
        'status' => $status,
        'message' => $message
    );

    echo json_encode($data);
    exit;
}
?>

我现在要做的是添加另一个字段,在本例中是“名称”,我也想验证它。

我遇到的问题是我不确定如何在上面的代码中添加另一个字段。同样,我一直在尝试找到一个可以用来学习的示例,但我还没有找到任何可以使用的示例。

我只是想知道是否有人可以看看这个,也许会指出我正确的方向。

非常感谢和亲切的问候

4

3 回答 3

4

PHP 有一个过滤器扩展来验证和清理输入

您正在寻找的功能是

还有一种filter_input_array方法,但由于没有简单的方法可以正确地进行单元测试,因此使用上面的方法更容易,并根据需要将其传递给超全局变量。

例子:

$userInput = array(
    'signup-email' => 'foo at example.com',
    'name' => 'ArthurDent42'
);

$validatedInput = filter_var_array(
    $userInput, 
    array(
        'signup-email' => FILTER_VALIDATE_EMAIL,
        'name' => array(
            'filter' => FILTER_VALIDATE_REGEXP,
            'options' => array(
                'regexp' => "/^[a-z ]{5,10}$/i"
            )
        )
    )
);

var_dump($validatedInput);

输出(演示):

array(2) { 
    ["signup-email"]=> bool(false) 
    ["name"]=> bool(false)
}

一旦您对输入进行了验证和清理,为数组中的每个值放置一些保护子句,并在它们为 false 时提前返回:

if (!$validatedInput['signup-email']) {
    return json_encode(array(
        'status' => 'error',
        'message' => 'The eMail was invalid'
    ));
}

if (!$validatedInput['name']) {
    return json_encode(array(
        'status' => 'error',
        'message' => 'Name must be 5 to 10 letters from A to Z only'
    ));
}

// everything's validated at this point. Insert stuff to database now.

请注意,您要使用 PDO 或 mysqli 而不是 ext/mysql

于 2012-09-02T13:52:10.147 回答
0

在您的 HTML 中添加一个字段:

<input type="text" name="name" value="" />

在您的 PHP 中:

$name = trim($_POST['name']);

验证:

if ($name === '') {
    $status = 'error';
    $message = 'need a name!';
}

现在将名称添加到您的插入语句(最好使用PDO 准备语句):

$nameSql = mysql_real_escape_string($name);
$insertSignup = mysql_query("INSERT INTO signups (signup_email_address, name) VALUES ('$email', '$nameSql')");
于 2012-09-02T13:42:04.813 回答
-1
    $rule['email']= '/^[^\W][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\.[a-zA-Z]{2,4}$`/'
    $rule['name']= 'bla bla';
    $rule['address']= 'bla bla';

   $data =  sanitize($_POST,$rule);
    function sanitize($input_array,$rule){
    $message = array();
     foreach($input_array as $key=> $value){
     $input_array[$key]= mysql_real_escape_string($value);
     if(isset($rule[$key])){
      if(!preg_match($rule[$key],$input_array[$key]){
        $message[$key] = 'error';
        unset($input_array[$key]);//optional
       }
      }
     }
    return array('data'=>$input_array,'message'=>$message);
    }
于 2012-09-02T13:44:23.930 回答