우리는 e-shop을 구축하기 위해 php-framework "slim"을 사용하고 있습니다. 이제 우리는 서버에 요청을 보내고 데이터베이스를 수정할 수있는 문제를 만나고 있습니다 (우리는 테이블을 확인했고 실제로 변경되었습니다). 반면 웹 엔드는 데이터베이스에서 응답을받을 수 없습니다 (iOS와 안드로이드 엔드는 모두받을 수 있습니다) ). 다음은 요청을 보내고 데이터베이스를 업데이트하며 응답을받는 코드의 일부입니다.
$app->post('/tblUser', function($request, $response, $args) {
get_tblUser_id($request->getParsedBody());
});
function get_tblUser_id($data)
{
$db = connect_db();
$sql = "update tblphoneverify set dtCreate = NOW() where strPhone = $data[phone]";
$db->query($sql);
$updateId = $db->affected_rows;
$db = null;
$msg = array(
'stat' => '',
'msg' => ''
);
$msg['stat'] = '1';
$msg['msg'] = 'registration success';
return json_encode($msg);
}
그런 다음이 ajax 세그먼트는 클릭 이벤트를 트리거하여 게시물을 실행하고 결과 상태를 수신합니다.
$(function(){
$("#getcheck").click(function(){
$.ajax({
type:"post",
url:"http://192.168.1.108/blue/public/tblUser",
data: {"phone":"13331111111"},
dataType:"json",
//async:false,
contentType: "application/x-www-form-urlencoded",
success:function(data){
alert(1);
},
error:function(XMLHttpRequest, textStatus, errorThrown){
alert(XMLHttpRequest.readyState);
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.statusText);
alert(XMLHttpRequest.responseText);
alert(textStatus);
alert(errorThrown);
}
})
})
})
코드는 항상 "성공"부분을 건너 뛰고 "오류"로 바로 이동합니다. 그렇다면 우리 코드에 어떤 문제가 있습니까? 미리 감사드립니다.
호출 가능한 경로에서 응답을 보내야합니다. json_encode
스스로 하지 말고 대신 Slim이하도록 놔두세요.
먼저 다음에서 배열을 반환합니다 get_tblUser_id
.
function get_tblUser_id($data)
{
$db = connect_db();
$sql = "update tblphoneverify set dtCreate = NOW() where strPhone = $data[phone]";
$db->query($sql);
$updateId = $db->affected_rows;
$db = null;
$msg = array(
'stat' => '',
'msg' => ''
);
$msg['stat'] = '1';
$msg['msg'] = 'registration success';
return $msg;
}
여기에 SQL 주입 취약점이 있습니다. SQL을 다음과 같이 변경하십시오.
$sql = "update tblphoneverify set dtCreate = NOW() where strPhone = ?";
$db->query($sql, [$data[phone]]);
다음으로 콜 러블 경로에서 JSON으로 응답을 보내야합니다. Slim에는 다음과 같은 방법이 있습니다.
$app->post('/tblUser', function($request, $response, $args) {
$msg = get_tblUser_id($request->getParsedBody());
return $response->withJson($msg);
});
Slim은 이제 msg
올바른 콘텐츠 유형 헤더 세트와 함께 배열을 다시 전송 하므로 JavaScript가 디코딩하는 데 도움이됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다