2016-11-04 1 views
0

Ich habe gerade angefangen AngularJS zu lernen und versuche eine einfache App zu bekommen, die nur Elemente aus einer MySQL-Datenbank anzeigt und aktualisiert.

Ich habe eine PHP-Rest-API, die die Anfragen von der App verarbeitet.

Bis jetzt gibt die API alle Elemente in der Datenbank erfolgreich in einem JSON-codierten Array zurück. Es gibt auch einen einzelnen Datensatz zurück, aber ich kann den Datensatz nicht aktualisieren.

Ich kann nicht sehen, wie die geänderten Daten von der App an die API übergeben werden, wenn ich die Schaltfläche zum Speichern im Formular drücken. Soll es als $ _POST-Variable übergeben werden?

Hier ist es die JS Code, den ich in meiner app haben:

angular.module('starter.services', []).factory('List', function ($resource) { 
    return $resource('http://example.com/restAPI/:id', { id: '@id' }, { 
     update: { 
      method: 'PUT' 
     } 
    }); 
}); 

angular.module('starter', ['ionic', 'ngResource', 'starter.controllers', 'starter.services']) 
.config(function($stateProvider, $urlRouterProvider) { 
    $stateProvider 

    .state('list', { 
     url: '/', 
     templateUrl: 'templates/list.html', 
     controller: 'ListController' 
    }) 

    .state('editItem', { 
     url: '/items/:id/edit', 
     templateUrl: 'templates/item-edit.html', 
     controller: 'EditController' 
    }) 

    $urlRouterProvider.otherwise('/'); 
}); 

angular.module('starter.controllers', []) 
.controller('ListController', function ($scope, $state, $stateParams, List) { 
    $scope.items = List.query(); 
}) 

.controller('EditController', function ($scope, $state, $stateParams, List) { 
    $scope.updateItem=function(){ 
     $scope.item.$update(function(){ 
      $state.go('list'); 
     }); 
    }; 

    $scope.loadItem=function(){ 
     $scope.item=List.get({id:$stateParams.id}); 
    }; 

    $scope.loadItem(); 
}); 

Hier wird das Formular Code:

<form class="form-horizontal" role="form" ng-submit="updateItem()"> 
<div class="form-group"> 
    <label for="title" class="col-sm-2 control-label">Title</label> 
    <div class="col-sm-10"> 
     <input type="text" ng-model="item.title" class="form-control" id="title" placeholder="Title Here"/> 
    </div> 
</div> 

<div class="form-group"> 
    <div class="col-sm-offset-2 col-sm-10"> 
     <input type="submit" class="btn btn-primary" value="Save"/> 
    </div> 
</div> 
</form> 

Wenn die App geladen wird, der Anfangszustand ist 'Liste' und alle Elemente aus der Datenbank sind auf der Seite sichtbar.

Jedes Element in der Liste hat eine Bearbeitungsschaltfläche. Wenn ich auf eine Bearbeitungsschaltfläche klicke, ändert sich der Status in 'editItem' und die neue Seite wird mit dem einzelnen Element geladen. So weit, ist es gut.

Wenn ich die Daten ändere und die Schaltfläche zum Speichern drücke, wird die Funktion updateItem mit ng-submit="updateItem()" aufgerufen.

Dies ruft die API, aber ich kann nicht sehen, wie es die aktualisierten Daten übergibt. Wenn ich error_log($_POST["title"]); in der API versuche, sehe ich 'PHP Notice: Undefined index: title' im Fehlerprotokoll. Wie greife ich auf die geänderten Daten in der API zu, damit ich die Datenbank aktualisieren kann?

Dies ist die .htaccess, die ich verwende - könnte es ein Problem damit sein? Es ist eine, die ich im Internet gefunden habe, daher weiß ich sehr wenig darüber, wie es funktioniert.

<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-s 
RewriteRule ^(.*)$ api.php?id=$1 [QSA,NC,L] 

RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.*)$ api.php [QSA,NC,L] 

RewriteCond %{REQUEST_FILENAME} -s 
RewriteRule ^(.*)$ api.php [QSA,NC,L] 
</IfModule> 
+0

Hallo Damian Dieser Code ist, was funktioniert gefunden, was Sie von bekommt: var_dump ($ _POST); – Wils

+0

Ich habe versucht error_log (var_dump ($ _ POST)); aber alles, was ich in der eror log bekam war stderr:, referer: http: // localhost: 4400/index.html – Damian

+0

Hallo, ich möchte das Ergebnis von var_dump nicht: "error_log (var_dump ($ _ POST));". Bitte nur "var_dump ($ _ POST);" und localhost wird nicht für mich zugänglich sein, können Sie mir die IP-Adresse senden. Fügen Sie mich auf skype hinzu, wenn Sie wollen, kann ich einen kurzen Blick haben: wils_br – Wils

Antwort

1

Danke für die Antworten Jungs.

@georgeawg - Sie bringen mich auf den richtigen Weg. Ich habe nur GET und POST verwendet, bevor die Update-Methode PUT verwendet, wie Sie hingewiesen haben.

Einmal habe ich erkannt, dass ich die Antwort hier ... REST request data can't be read in 'put' method

für mich ....

$data = json_decode(file_get_contents("php://input"), true); 
error_log($data['title']); 
Verwandte Themen