[英]PHP Server Side Validation
通过这里和这里的各种教程,我设法将以下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;
}
?>
我现在想要做的是添加另一个字段,在这种情况下,我也想验证“姓名”。
我遇到的问题是我不确定如何在上述代码中添加另一个字段。 同样,我一直在尝试寻找一个可以用来学习的示例,但是我没有找到可以使用的示例。
我只是想知道是否有人可以看看这个,也许会指出正确的方向。
非常感谢和问候
PHP具有Filter扩展,可以验证和清除输入 。
您正在寻找的功能是
也有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.
在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')");
$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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.