избегая дублирования MySQL инъекций

0

Я создал контроллер и вызвал функцию в течение одного раза. Но он вызывает два раза и вставил значение два раза. Я вызываю службу upload_album в контроллере. Теперь значение вставлено два раза. Один с исходным значением, а другой с фиктивным значением

Controller
       $scope.savealbum = function() {
        $scope.album_pids = $routeParams.id;

        $timeout(function () {
        //console.log($scope.justapp);
        for (tt in $scope.justapp) {
            if ($scope.justapp[tt].id == $scope.album_pids) {
                for (var i = 0; i < $rootScope.media_lib.length; i++) {

                }
            }
        }            
         $scope.promise=AlbumServices.upload_album($scope.album_pids,$scope.images,$scope.videos);
          $scope.promise.then(function(data) {
            console.log(data);
            alert('Photos Added to Album Successfully');
           // $location.path('album_details/' + $routeParams.id);
        }, function(reason) {
            console.log(reason);
        });
        }, 1500, false);
    };
 Service
   upload_album: function (alb,img,vid) {
            var deferred = $q.defer();
            var data = {};
            data.pagename = "upload_album";
            data.album = alb;
            data.photo = img;
            data.video = vid;
            $http.post('js/data/album.php', data)
                    .success(function (data, status, headers, config)
                    {
                        console.log(status + ' - ' + data);
                        deferred.resolve(data);
                    })
                    .error(function (data, status, headers, config)
                    {
                        deferred.reject(data);
                        console.log('error');
                    });
            return deferred.promise;
        }

       php

       function upload_album ($prefix) {
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
$sub_id=$request->album;
$val=$request->photo;
$photo = json_encode($val);
$video = json_encode($request->video);

 $now = date('Y-m-d H:i:s');
$count_pho = sizeof($photo);
 $count_vid = sizeof($video);
$test = '';
if($count_pho != '0' ) { 
    $test .= "('".$sub_id."','".$content_type."','".$photo."','".$website_id."','".$now."'),";        
    $demo = substr($test, 0, -1);
    $sql="INSERT INTO 'album_details' (SUB_ID,CONTENT_TYPE,CONTENT_VALUE,WEBSITE_ID,CreatedTime)VALUES".$demo;
    $query = mysql_query($sql) or sqlerrorhandler("(".mysql_errno().") ".mysql_error(), $sql, __LINE__);
}


if ($query) {        
    echo $msg = true;   
} else {
    echo $msg = false;
}  

}

  • 0
    так что это в основном не имеет ничего общего с MySQL тогда
Теги:

1 ответ

2

Поскольку мы не можем использовать весь код (включая HTML), мои предложения таковы:

  1. проверьте свой html и/или метод запуска внутри углового, чтобы быть уверенным, что ваш контроллер не был вызван дважды
  2. создать уникальную пару ключей в вашей базе данных (это может помочь не иметь двойной записи)
  3. создайте debouncer при использовании таймаута, чтобы, если тайм-аут всегда запускается один раз. что-то вроде этого:

    var t = null;
    var mySaveFunction = function () {
        if (t) {
            clearTimeout(t);
        }
        t = setTimeout(function () {
            /* do saving here */
        }, 2000);
    };
    

Ещё вопросы

Сообщество Overcoder
Наверх
Меню