【发布时间】:2017-09-22 18:34:43
【问题描述】:
在服务器端 (PHP),我使用 json_encode 对通过 ajax 请求 (javascript - extjs) 发送的数据进行编码。
如果可能的话,我想用 PHP OOP 处理可能的 json_encode 错误。
到目前为止,我有以下代码,但我遇到了一些困难(我对 php oop 没有经验):
类 ValidateJson
<?php
class ValidateJson {
private $errors = array();
// public static function validaJson(){
public function validaJson(){
//Get the last JSON error.
$jsonError = json_last_error();
//If this happen.
//if(is_null($decoded) && $jsonError == JSON_ERROR_NONE){
// $this->addJsonErrorMsg('Could not decode JSON!');
//}
switch ($jsonError) {
case JSON_ERROR_DEPTH:
$this->addJsonErrorMsg('Maximum stack depth exceeded');
break;
case JSON_ERROR_STATE_MISMATCH:
$this->addJsonErrorMsg('Underflow or the modes mismatch');
break;
case JSON_ERROR_CTRL_CHAR:
$this->addJsonErrorMsg('Unexpected control character found');
break;
case JSON_ERROR_SYNTAX:
$this->addJsonErrorMsg('Syntax error, malformed JSON');
break;
case JSON_ERROR_UTF8:
$this->addJsonErrorMsg('Malformed UTF-8 characters, possibly incorrectly encoded');
break;
default:
$this->addJsonErrorMsg(' Unknown error');
break;
}
}
private function addJsonErrorMsg($error_message){
$this->errors[] = $error_message;
}
public function outJsonError(){
return $this->errors;
}
// ?????
// if($jsonError != 0){
// throw "JSON Parse Error: " + untyped __call__("json_last_error_msg");
//
// }
}
?>
查询和输出:
<?php
require('conect.php');
$action = $_REQUEST['action'];
switch($action){
case "create":{
$records = $_POST['records'];
$data = json_decode(stripslashes($records));
require_once('validate_json.php');
$valida_json = new ValidateJson();
$valida_json->validaJson();
// $errosJson = $valida_json->outJsonError();
// echo $errors; exit; //return string 'Array'
if(json_last_error() == JSON_ERROR_NONE){
$cars = $data->{'cars'};
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$sqlQuery = "INSERT INTO the_cars (cars) VALUES (?)";
if($statement = $con->prepare($sqlQuery)){
$statement->bind_param("s", $cars);
$statement->execute();
$success= true;
}else{
$erro = $con->error;
$success = false;
}
echo json_encode(array(
"success" => $sucess,
'errors'=> $erro
));
$statement->close();
$conexao->close();
break;
}
}else{
$errorsJson = $valida_json->outJsonError();
$success = false;
echo json_encode(array(
"success" => $sucess,
'errorsjson'=> $errorsJson
));
}
}
?>
【问题讨论】:
标签: php json validation