使用各种教程,即here和here我已经设法将以下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;
}
?>
我现在要做的是添加另一个字段,在这种情况下,“我想要验证的名称”。
我遇到的问题是我不确定如何在上面的代码中添加另一个字段。同样,我一直试图找到一个我可以用来研究的例子,但我还没有发现任何我可以使用的例子。
我只是想知道是否有人可能会看到这个,并且可能指出我正确的方向。
非常感谢和亲切的问候
答案 0 :(得分:4)
PHP有Filter extension to validate and sanitize input。
您正在寻找的功能是
还有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)
}
一旦验证并清理了输入,就为数组中的每个值设置一些保护子句,并在它们为假时提前返回:
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.
请注意you want to use either PDO or mysqli instead of ext/mysql。
答案 1 :(得分:0)
在您的HTML中添加一个字段:
<input type="text" name="name" value="" />
在你的PHP中:
$name = trim($_POST['name']);
验证:
if ($name === '') {
$status = 'error';
$message = 'need a name!';
}
现在为insert语句添加名称(最好使用PDO prepared statements):
$nameSql = mysql_real_escape_string($name);
$insertSignup = mysql_query("INSERT INTO signups (signup_email_address, name) VALUES ('$email', '$nameSql')");
答案 2 :(得分:-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);
}