【问题标题】:Mysql connection using angularjs and PHP (PDO)使用 angularjs 和 PHP (PDO) 的 Mysql 连接
【发布时间】:2016-12-08 09:55:59
【问题描述】:

我有一个特殊的问题,由于我缺乏 Angular 和 JS 的经验,我似乎无法解决。

我有一个称为通用数据库的数据库连接类,它由 PHP 脚本“action.php”调用。 'Action.php' 通过 JS 中的$http 方法调用。由于需要用户端输入的灵活性,处理功能依赖于诸如“数据”等变量来提交数据。 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 数据库连接:

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

    }

【问题讨论】:

    标签: javascript php mysql angularjs


    【解决方案1】:

    如果在$scope.saveCats函数data变量的data参数是数组,因此它不会被添加到您的参数列表中。

        $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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 2023-04-01
      • 2011-12-24
      • 1970-01-01
      • 2012-03-13
      • 2021-12-06
      • 1970-01-01
      相关资源
      最近更新 更多