douchan7552 2016-12-08 09:55
浏览 64

使用angularjs和PHP(PDO)的Mysql连接

I have a peculiar problem, that, due to my lack of experience with Angular and JS, I appear unable to solve.

I have a DB connection class called general DB, which is called by a PHP script 'action.php'. 'Action.php' is called via the $http method in JS. Because of the need for flexibility of input from the user end, the processing functions rely on variables such as 'data' for the submitted data. The JS allows for three modes of user interaction, input, edit, delete. The peculiarity of my current difficulty is that if I attempt to input data straight away, it fails (with the custom error message 'Some problems occurred, please try again.'); however, if I click on edit first, then it allows me to add new records. Both edit and delete fail, although they do not display a message, merely the red box where such a message should have appeared (edit).

I am using:

error_reporting(E_ALL) 

in the relevant PHP code but receive no PHP errors. I have also found that the JS appears to have access to all the values that it is gathering, through console.log(). Presumably, since it's not working, I have missed something important, please help me find it!

Also, currently existing records in the database are displaying correctly and as expected.

JS:

//define application
angular.module("crudApp", []).controller("userController", function($scope, $http){
        $scope.cats = [];
        $scope.tempUserData = [];

        //function to get records from the database
        $scope.getRecords = function(){
            $http.get('action.php', {
                params:{
                    'type':'view'
                }
            }).success(function(response){
                if(response.status == 'OK'){
                    $scope.cats = response.records;
                }
            });
        };

        //function to insert or update data in database
        $scope.saveCats = function(type){
            var data = $.param({
                'data':$scope.tempUserData,
                'type':type
            });
            var config = {
                headers : {
                    'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;'
                }
            };
            $http.post("action.php", data, config).success(function(response){
                if (response.status == 'OK'){
                    if (type == 'edit'){
                        console.log($scope.cats[$scope.index].uid = $scope.tempUserData.uid);
                        console.log($scope.cats[$scope.index].Categories = $scope.tempUserData.Categories);
                    }
                    else{
                        $scope.cats.push({
                            //uid:response.uid,
                            Categories:response.data.Categories
                        });
                    }
                    $scope.catForm.$setPristine();
                    $scope.tempUserData = {};
                    $(".formData").slideUp();
                    $scope.messageSuccess(response.msg);
                }
                else {
                    console.log($scope.messageError(response.msg));
                }
            });
        };

        //function to add data
        $scope.addCat = function(){
            $scope.saveCats('add')
        };

        //function to edit data
        $scope.editCat = function(cat){
            console.log($scope.tempUserData = {
                uid: cat.uid,
                Categories: cat.Categories
            });
            $scope.index = $scope.cats.indexOf(cat);
            $(".formData").slideDown();
        };

        // function to update user data
        $scope.updateCat = function(){
            $scope.saveCats('edit');
        };

        //function to delete data
        $scope.deleteCat = function(cat){
            var conf = confirm("Are you sure you want to delete this Category?");
            if (conf == true){
                var data = console.log($.param({
                    'id': cat.uid,
                    'type': 'delete'
                }));
                var config = {
                    headers : {
                        'Content-Type' : 'application/x-www-form-urlencoded;charset=utf-8'
                    }
                };
                $http.post("action.php", data, config).success(function(response){
                    if (response.status == 'OK'){
                        var index = $scope.cats.indexOf(cat);
                        $scope.cats.splice(index,1);
                        $scope.messageSuccess(response.msg);
                    }
                    else{
                        console.log($scope.messageError(response.msg));
                    }
                });
            }
        };

        //function: display success message
        $scope.messageSuccess = function(msg){
            $('.alert-success > p').html(msg);
            $('.alert-success').show();
            $('.alert-success').delay(5000).slideUp(function(){
                $('.alert-success > p').html('');
            });
        };

        //function: display error message
        $scope.messageError = function(msg){
            $('.alert-danger > p').html(msg);
            $('.alert-danger').show();
            $('.alert-danger').delay(5000).slideUp(function(){
                $('.alert-danger > p').html('');
            });
        };

    });

HTML:

<div class="container well" ng-controller="userController" ng-init="getRecords()">
    <div class="row cinzel">
        <div class="panel panel-default users-content">
            <div class="panel-heading">
                Add Categories <a href="javascript:void(0);" class="glyphicon glyphicon-plus" onClick="$('.formData').slideToggle();"></a>
            </div>
            <div class="alert alert-danger none"><p></p></div>
            <div class="alert alert-success none"><p></p></div>
            <div class="panel-body none formData">
                <form class="form" name="catForm" method="POST" action="">
                    <div class="form-group">
                        <label>Category</label>
                        <input type="text" class="form-control" name="Categories" ng-model="tempUserData.Categories" />
                    </div>
                    <a href="javascript:void(0);" class="btn btn-warning" onClick="$('.formData').slideUp();">Cancel</a>
                    <a href="javascript:void(0);" class="btn btn-success" ng-hide="tempUserData.uid" ng-click="addCat()">Add Category</a>
                    <a href="javascript:void(0);" class="btn btn-success" ng-hide="!tempUserData.uid" ng-click="updateCat()">Update Category</a>
                </form>
            </div>
            <div class="panel-heading">
                View Categories <a href="javascript:void(0)" class="glyphicon glyphicon-plus" onClick="$('.viewCats').slideToggle();"></a>
            </div>
            <div class="panel-body none viewCats">
            <table class="table table-striped">
                <tr>
                    <th width="5%">#</th>
                    <th width="20%">Categories</th>
                </tr>
                <tr ng-repeat="cat in cats | orderBy:'-uid'">
                    <td>{{$index + 1}}</td>
                    <td>{{cat.Categories}}</td>
                    <td>
                        <a href="javascript:void(0);" class="glyphicon glyphicon-edit" ng-click="editCat(cat)"></a>
                        <a href="javascript:void(0);" class="glyphicon glyphicon-trash" ng-click="deleteCat(cat)"></a>
                    </td>
                </tr>
            </table>
            </div>
        </div>
    </div>

</div>

action.php:

<?php

    error_reporting(E_ALL);
    require_once("class_lib.php");

    use App\mainClasses\GeneralDB;

    $db = new GeneralDB();
    $tblName = 'cats';
    if(isset($_REQUEST['type']) && !empty($_REQUEST['type'])){
        $type = $_REQUEST['type'];
        switch($type){
            case "view":
                $records = $db->getRows($tblName);
                if($records){
                    $data['records'] = $db->getRows($tblName);
                    $data['status'] = 'OK';
                }else{
                    $data['records'] = array();
                    $data['status'] = 'ERR';
                }
                echo json_encode($data);
                break;
            case "add":
                if(!empty($_POST['data'])){
                    $userData = array(
                        'Categories' => $_POST['data']['Categories']
                    );
                    $insert = $db->insert($tblName,$userData);
                    if($insert){
                        $data['data'] = $insert;
                        $data['status'] = 'OK';
                        $data['msg'] = 'User data has been added successfully.';
                    }else{
                        $data['status'] = 'ERR';
                        $data['msg'] = 'Some problem occurred, please try again.';
                    }
                }else{
                    $data['status'] = 'ERR';
                    $data['msg'] = 'Some problem occurred, please try again.';
                }
                echo json_encode($data);
                break;
            case "edit":
                if(!empty($_POST['data'])){
                    $userData = array(
                        'Categories' => $_POST['data']['Category']
                    );
                    $condition = array('uid' => $_POST['data']['id']);
                    $update = $db->update($tblName,$userData,$condition);
                    if($update){
                        $data['status'] = 'OK';
                        $data['msg'] = 'User data has been updated successfully.';
                    }else{
                        $data['status'] = 'ERR';
                        $data['msg'] = 'Some problem occurred, please try again.';
                    }
                }else{
                    $data['status'] = 'ERR';
                    $data['msg'] = 'Some problem occurred, please try again.';
                }
                echo json_encode($data);
                break;
            case "delete":
                if(!empty($_POST['id'])){
                    $condition = array('id' => $_POST['id']);
                    $delete = $db->delete($tblName,$condition);
                    if($delete){
                        $data['status'] = 'OK';
                        $data['msg'] = 'User data has been deleted successfully.';
                    }else{
                        $data['status'] = 'ERR';
                        $data['msg'] = 'Some problem occurred, please try again.';
                    }
                }else{
                    $data['status'] = 'ERR';
                    $data['msg'] = 'Some problem occurred, please try again.';
                }
                echo json_encode($data);
                break;
            default:
                echo '{"status":"INVALID"}';
        }
    }

PHP DB connection:

class GeneralDB extends PDOconnect {

        private $sql;
        private static $db;

        /**
         * @param $table
         * @param array $conditions
         * @return array|bool|int|string
         */
        public function getRows($table, $conditions = array()) {

            $i=0;

            self::$db = PDOconnect::newPDO();

            $this->sql = 'SELECT';
            $this->sql .= array_key_exists("select", $conditions)?$conditions['select']:'*';
            $this->sql .= ' FROM '.$table;

            if (array_key_exists("where", $conditions)) {
                $this->sql .= ' WHERE ';
                foreach ($conditions['where'] as $key => $value) {
                    $pre = ($i>0)?' AND ':'';
                    $this->sql .= $pre.$key." = '".$value."'";
                    $i++;
                }
            }

            if (array_key_exists("order_by", $conditions)){
                $this->sql .= ' ORDER BY '.$conditions['order_by'];
            }

            if (array_key_exists("start", $conditions)&&array_key_exists("limit", $conditions)){
                $this->sql .= ' LIMIT '.$conditions['start'].','.$conditions['limit'];
            }
            elseif (!array_key_exists("start", $conditions)&&array_key_exists("limit", $conditions)){
                $this->sql .= ' LIMIT '.$conditions['limit'];
            }

            $query = self::$db->prepare($this->sql);
            $query->execute();

            if (array_key_exists("return_type",$conditions)&&$conditions['return_type']!='all') {
                switch($conditions['return_type']){
                    case 'count':
                        $data = $query->rowCount();
                        break;
                    case 'single':
                        $data = $query->fetch(PDO::FETCH_ASSOC);
                        break;
                    default:
                        $data = '';
                }
            }
            else {
                if ($query->rowCount() > 0) {
                    $data = $query->fetchAll(PDO::FETCH_ASSOC);
                }
            }

            return !empty($data)?$data:false;

        }

        public function insert($table,$data) {
            if (!empty($data)&&is_array($data)) {
                self::$db = PDOconnect::newPDO();

                $columns = '';
                $values = '';
                $i = 0;

                $columnString = implode(',', array_keys($data));
                $valueString = ":".implode(",:",array_keys($data));
                $sql = "INSERT INTO ".$table." (".$columnString.") VALUES (".$valueString.")";
                $query = self::$db->prepare($sql);

                foreach ($data as $key=>$val) {
                    $val = htmlspecialchars(strip_tags($val));
                    $query->bindParam(':'.$key,$val);
                }

                $insert = $query->execute();
                if ($insert) {
                    $data['id'] = self::$db->lastInsertId();
                    return $data;
                }
                else {
                    return false;
                }


            }
            else {
                return false;
            }
        }

        public function update($table,$data,$conditions) {
            if (!empty($data)&&is_array($data)) {
                self::$db = PDOconnect::newPDO();

                $colValSet = '';
                $whereSQL = '';
                $i = 0;

                foreach($data as $key=>$val) {
                    $pre = ($i>0)?', ':'';
                    $val = htmlspecialchars(strip_tags($val));
                    $colValSet .= $pre.$key."='".$val."'";
                    $i++;
                }

                if (!empty($conditions)&&is_array($conditions)) {
                    $whereSQL .= ' WHERE ';
                    $i = 0;
                    foreach ($conditions as $key=>$value) {
                        $pre = ($i>0)?' AND ':'';
                        $whereSQL .= $pre.$key." = '".$value."'";
                        $i++;
                    }
                }

                $sql = "UPDATE ".$table." SET ".$colValSet.$whereSQL;
                $query = self::$db->prepare($sql);
                $update = $query->execute();
                return $update?$query->rowCount():false;

            }
            else {
                return false;
            }
        }

        public function delete($table,$conditions) {
            self::$db = PDOconnect::newPDO();
            $whereSQL = '';
            $i = 0;
            if (!empty($conditions)&&is_array($conditions)) {
                $whereSQL .= ' WHERE ';
                foreach ($conditions as $key=>$value) {
                    $pre = ($i>0)?' AND ':'';
                    $whereSQL .= $pre.$key." = '".$value."'";
                    $i++;
                }

            }

            $sql = "DELETE FROM ".$table.$whereSQL;
            $delete = self::$db->exec($sql);
            return $delete?$delete:false;
        }

    }
  • 写回答

1条回答 默认 最新

  • duancutan4770 2016-12-26 12:00
    关注

    In case of adding record above JS file in $scope.saveCats function data variable's data parameter is array and therefore it is not getting added to your parameter list.

        $scope.saveCats = function(type){
             var data = $.param({
                        'data':$scope.tempUserData,
                        'type':type
             });
          ...//Your code as it is
        }
    

    Replace above code in your JS file with this when there is add case

    $scope.saveCats = function(type){
      var data = $.param({
               'data':$scope.tempUserData['Categories'],
               'type':type
      });
      ...//Your code as it is
    }
    

    and Pick category data in action.php as

     ...//Your code as it is
     case "add":
           if(!empty($_POST['data'])){
               $userData = array(
               'Categories' => $_POST['data']
           ); 
      ...//Your code as it is
    
    评论

报告相同问题?

悬赏问题

  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 个人网站被恶意大量访问,怎么办
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大