Angularjs with Post method

วันนี้ ลองทดสอบ ใช้ Angularjs ส่งผ่าน method POST ไปที่ไฟล์ php บน server ของเรา ปรากฏว่า ไม่มีดาต้าจาก method POST ซะงั้น !!

ทำไม print_r($_POST) ถึงไม่มีข้อมูลอะไรอออกมาเลย แต่กลับมีข้อมูลใน $HTTP_RAW_POST_DATA  แทน ที่เป็นเช่นนี้เพราะอะไร ??

ลองดูตัวอย่าง code นี้จะเห็นได้ว่า Angularjs มีการส่งข้อมูลไปที่ server ด้วย method post แต่ข้อมูลที่ส่งจะมีลักษณะแตกต่างกันไป ตาม headers และการ encrypt data ด้วย หากต้องการให้ $_POST สามารถดักจับข้อมูลได้ ก็ต้อง แก้ไข header เป็น headers: { ‘Content-Type’: ‘application/x-www-form-urlencoded’} และ encrypt ฟังก์ชั่นด้วย   $httpParamSerializerJQLike สามารถดูรายละเอียดสามารถดูได้จาก  https://docs.angularjs.org/api/ng/service/$httpParamSerializerJQLike

index.php

 

<div ng-app="myApp" ng-controller="myCtrl">
  post_id : <input value="test" name="test"  ng-model="createModel.post_id" /> 
  post_name: <input value="test2222" name="test3342" ng-model="createModel.post_name" /><input type="button" ng-click="saveData()" name="senddata" value="senddata"> 
  
  <div><p> post : {{ response.post }}</p></div> 
  <div><p> post_raw_data : {{ response.post_raw_data }}</p></div> 
  <div><p> send_data : {{ response.send_data }}</p></div> 
  
</div>

<script src="angular.js"></script>
<script type="text/javascript">
  
   
    var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope, $http, $httpParamSerializerJQLike) {
        
        $scope.bCreate = false;
        $scope.bSearch = false;
        $scope.bResultTable = true;
        $scope.createModel = { 	post_id:'1', post_name:"test" };
        $scope.response = {post:'', post_raw_data:"", send_data:"" } 
        
        $scope.saveData = function() {
        //alert('saveData');
            $scope.bCreate = false;
        	$scope.bSearch = false;
        	$scope.bResultTable = true;
        	
        	console.log( $scope.createModel );
        	
        	$http({
              url: "addPostName.php",
              method: "POST",
          data: $httpParamSerializerJQLike($scope.createModel), //comment1
          //data: $scope.createModel,
          //data:   JSON.stringify($scope.createModel),  
          //headers: { 'Content-Type': 'application/x-www-form-urlencoded'} //comment1
          //headers: { 'Content-Type': 'application/json' }
          })
          .then(function(response) {
          $scope.response.post = response.data.POST;
          $scope.response.post_raw_data = response.data.HTTP_RAW_POST_DATA;
          $scope.response.send_data = response.data.DATA;
          	console.log(response);
                  // success
          }, 
          function(response) { // optional
          	console.log(response);
                  // failed
          });
        } 
    });  

</script>

addPostname.php

<?php  
    $result['POST'] =  isset($_POST['post_id'])?$_POST['post_id']: "POST is null  ";
     
    $result['HTTP_RAW_POST_DATA'] =  isset($HTTP_RAW_POST_DATA)?$HTTP_RAW_POST_DATA  : " POST_DATA  is  null  ";
     
    
    //echo " param " . $.param;
    
    if (isset($HTTP_RAW_POST_DATA  ))
      $result['DATA']  =  $HTTP_RAW_POST_DATA ;// $this->input->post('message');	 
    else
      $result['DATA']   = $_POST;
    
      echo json_encode( $result );

?>

รูปนี้ แสดงให้เห็นว่าถ้าเปลี่ยน headers type ดาต้าก็ที่ส่งขึ้น server ก็จะเปลี่ยนตามไปด้วย

ติดตั้ง IIS PHP MYSQL บน window7

ติดตั้ง IIS PHP MYSQL  บน window7

ขั้นตอนการติดตั้ง IIS + PHP + MYSQL บน window7 สามารถทำได้ง่ายๆ เริ่มจากการติดตั้ง IIS โดยทำการเปิด window feature  ตามภาพข้างล่าง

console panel -> program -> window fearue -> internet information services (IIS)

หลังจากติดตั้ง IIS เรียบร้อยแล้ว ให้ download web platform installer program ซึ่งสามารถ donwload ได้จาก microsoft

เมื่อติดตั้งเสร็จ สามารถเปิดจาก IIS manager แล้ว double click icon web platform installer พิมพ์ คำว่า “php” กด enter จะแสดงรายที่เกี่ยวข้อง ให้เลือก php เวอร์ชั่นที่ต้องการ และยังสามารถได้ หลาย version พร้อมกันอีกด้วย

เมื่อตั้งเสร็จแล้ว IIS Manager จะมี icon เพิ่มขึ้นมาตามรูป

ทำการติดตั้ง mysql ได้โดยการเรียกใช้ web platform installer เช่นเดียวกันขั้นตอนการติดตั้ง php

จะเห็นได้ว่าการติดตั้ง php และ mysql สามารถ ทำได้งานขึ้นผ่านโปรแกรม web platform installer