如何使用CodeIgniter控制器将AngularJS表单中的数据插入数据库?

时间:2017-01-23 21:24:47

标签: php angularjs codeigniter post routes

我有一个使用CodeIgniter制作的项目,我们希望将PHP用于服务器,将AngularJS用于客户端。我也希望将用户的名称和ID插入到我们的数据库中 这是AngularJS代码:



<!doctype html>
<html>
<head>
  <title>Angular Forms</title>

  <!-- LOAD BOOTSTRAP CSS -->
  <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css">

  <!-- LOAD JQUERY -->
  <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
  <!-- LOAD ANGULAR -->
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script>

 
  <script>
    // define angular module/app
    var formApp = angular.module('formApp', []);
    // create angular controller and pass in $scope and $http
    function formController($scope, $http) {
      // create a blank object to hold our form information
      // $scope will allow this to pass between controller and view
      $scope.formData = {};
      // process the form
      $scope.processForm = function() {
        $http({
              method  : 'POST',
              url     : 'http://localhost/alpha2/index.php/user/insert',
              data    : $.param($scope.formData),  // pass in data as strings
              headers : { 'Content-Type': 'application/x-www-form-urlencoded' }  // set the headers so angular passing info as form data (not request payload)
          })
              .success(function(data) {
                  console.log(data);
                  if (!data.success) {
                    // if not successful, bind errors to error variables
                      $scope.erroridAlumno = data.errors.idAlumno;
                      $scope.errorNombre = data.errors.nombre;
                  } else {
                    // if successful, bind success message to message
                      $scope.message = data.message;
                      $scope.erroridAlumno = '';
                      $scope.errorNombre = '';
                  }
              });
      };
    }
  </script>
        <style>
            .ng-valid.ng-dirty{
                border-color: green;
            }
            .ng-invalid.ng-dirty{
                border-color: red;
            }
        </style>
</head>
<!-- apply the module and controller to our body so angular is applied to that -->
<body ng-app="formApp" ng-controller="formController">
<div class="container">
<div class="col-md-6 col-md-offset-3">

  <!-- PAGE TITLE -->
  <div class="page-header">
    <h1><span class="glyphicon glyphicon-tower"></span> Insertar Nuevo Alumno</h1>
  </div>

  <!-- SHOW ERROR/SUCCESS MESSAGES -->
  <div id="messages" class="well" ng-show="message">{{ message }}</div>

  <!-- FORM -->
  <form ng-submit="processForm()">
    <!-- ID -->
    <div id="idAlumno-group" class="form-group" ng-class="{ 'has-error' : erroridAlumno }">
      <label>ID</label>
      <input type="text" name="idAlumno" class="form-control" placeholder="Bruce Wayne" ng-model="formData.idAlumno">
                        <span class="help-block" ng-show="erroridAlummno">{{ erroridAlumno }}</span>
    </div>

    <!-- NAME -->
    <div id="nombre-group" class="form-group" ng-class="{ 'has-error' : errorNombre }">
      <label>Nombre</label>
      <input type="text" name="nombre" class="form-control" placeholder="Caped Crusader" ng-model="formData.nombre">
      <span class="help-block" ng-show="errorNombre">{{ errorNombre }}</span>
    </div>

   

    <!-- SUBMIT BUTTON -->
    <button type="submit" class="btn btn-success btn-lg btn-block">
      <span class="glyphicon glyphicon-flash"></span> Submit!
    </button>
  </form>

  <!-- SHOW DATA FROM INPUTS AS THEY ARE BEING TYPED -->
  <pre>
    {{ formData }}
  </pre>

</div>
</div>
</body>
</html>
&#13;
&#13;
&#13;

在我的PHP项目中,我有一个名为&#34; User&#34;的控制器(和模型)。 该控制器有三种方法:Index,Users和Insert。 插入是我尝试使其工作的方法,我用来将新数据插入数据库的方法。

我认为这可能是routes.php(在配置文件夹中)的问题,我不知道该放什么。

在User / insert中将数据插入数据库的正确代码是什么? routes.php使用它的正确代码是什么?

User实体的模型名为&#34; user_model&#34;。 这是模型的代码:

&#13;
&#13;
<?php
class User_model extends CI_Model {



        public function __construct()
        {
                $this->load->database();
        }

		public function get_users($id = FALSE)
		{
		        if ($id === FALSE)
		        {
		                $query = $this->db->get('alumno');
		                return $query->result_array();
		        }

		        $query = $this->db->get_where('alumno', array('idAlumno' => $id));
		        return $query->row_array();
		}

		public function insert_user($data){
			
        $query = $this->db->insert('alumno',$data);
        return $query;
    }

		


}


?>
&#13;
&#13;
&#13;

(&#34; alumno&#34;是我数据库中表格的名称)

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您已经在使用 codeigniter-restserver ,那么您需要相应地使用方法名称来支持 HTTP请求的不同方法。

例如: 例如,如果您要对/books进行HTTP GET调用,则会调用Books#index_get()方法。

同样,在您的情况下,您的方法名称必须在控制器中 insert_post() 才能支持来自 Angular AJAX POST的POST请求

因此,在您的用户控制器中必须有一个方法insert_post()来支持网址...../user/insert

请参阅处理HTTP请求Handling Request