簡體   English   中英

使用angularjs和PHP(PDO)進行MySQL連接

[英]Mysql connection using angularjs and PHP (PDO)

我有一個特殊的問題,由於缺乏對Angular和JS的經驗,我似乎無法解決。

我有一個稱為常規數據庫的數據庫連接類,該類由PHP腳本“ action.php”調用。 通過JS中的$http方法調用“ Action.php”。 由於需要來自用戶端的輸入的靈活性,因此處理功能依賴於諸如“數據”之類的變量來提交數據。 JS允許用戶交互的三種模式,即輸入,編輯,刪除。 我目前的困難之處在於,如果我嘗試立即輸入數據,它將失敗(並顯示自定義錯誤消息“發生了一些問題,請重試。”); 但是,如果我先單擊“編輯”,則可以添加新記錄。 盡管編輯和刪除都沒有顯示消息,但它們都失敗了,只是出現了這樣一條消息的紅色框(編輯)。

我在用:

error_reporting(E_ALL) 

在相關的PHP代碼中,但未收到任何PHP錯誤。 我還發現,JS似乎可以通過console.log()訪問其正在收集的所有值。 大概是因為它不起作用,所以我錯過了一些重要的事情,請幫助我找到它!

此外,數據庫中當前存在的記錄正在正確顯示並按預期顯示。

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連接:

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

    }

如果在$scope.saveCats函數的JS文件上方添加記錄,則data變量的data參數為array,因此不會將其添加到參數列表中。

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

有加大小寫時,用此替換JS文件中的上述代碼

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

並在action.php中選擇類別數據為

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM