【问题标题】:How can I insert data from an AngularJS form in a database using a CodeIgniter controller?如何使用 CodeIgniter 控制器将来自 AngularJS 表单的数据插入数据库中?
【发布时间】:2017-01-23 21:24:47
【问题描述】:

我有一个使用 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>

在我的 PHP 项目中,我有一个名为“User”的控制器(和一个模型)。 该控制器具有三个方法:Index、Users 和 Insert。 插入是我试图让它工作的方法,我用来将新数据插入数据库的方法。

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

在用户/插入处将数据插入数据库的正确代码是什么? routes.php 的正确代码是什么?

用户实体的模型名为“user_model”。 这是模型的代码:

<?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;
    }

		


}


?>

(“alumno”是我数据库中表的名称)

感谢您的帮助。

【问题讨论】:

  • 首先你必须确保你的服务器端控制器接受 POST 请求。因此,相应地为 routes.php 和控制器端编写代码。使用请求对象或 $_POST 获取从角度发布的数据...我认为这就是您需要编写的全部内容
  • 在codeigniter获取发布数据的方法是“$this->input->post('nameOfTheVariable')”。但我不知道如何在 routes.php 和控制器中编写正确的代码。
  • 这是您正在寻找的stackoverflow.com/questions/29159612/… 还是直接使用codeigniter github.com/chriskacerguis/codeigniter-restserver 的REST 端点
  • 我(我)已经在使用 codeigniter-restserver,所以这不是问题。

标签: php angularjs codeigniter post routes


【解决方案1】:

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

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

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

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

请参阅处理 HTTP 请求 Handling Request

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-22
    • 2013-04-04
    • 2016-09-18
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    相关资源
    最近更新 更多