2016-04-22 3 views
0

Ich fragte eine andere Frage im Zusammenhang mit RESTful Dienste here, und haben eine andere Frage mit DELETE (PUT):
Gleiche Art von Situation, in der ich Benutzer Anmeldeinformationen (Benutzername/Passwort) senden möchte mit meinem PUT. Das ist mein DELETE-Dienst so weit:PHP RESTful Dienste; AJAX und DELETE Methode mit Benutzername/Passwort Anmeldeinformationen

$http_req = $_SERVER["REQUEST_METHOD"]; 
switch ($http_req) { 
    case DELETE: 
     $user = $acct->read($_REQUEST["usernameDel"], $_REQUEST["passwordDel"]); // this method used to read db table with 1 record 
     if (!empty($_REQUEST["delTaskId"]) && isset($_REQUEST["usernameDel"]) && isset($_REQUEST["passwordDel"])) { 
      if ($user == true) { 
       $delete  = fopen("php://input", "r"); 
       $data  = stream_get_contents($deleted); 
       $params; 
       parse_str($data, $params); 
       $dropped = $mgr->delete($params["id"]) // calls the method that deletes a particular row based on its id 
       echo $dropped; 
      } 
     }     
} 

Dies ist die HTML-Seite, mit der ich arbeite. Ich kann es aktualisiert in einem sein:

<form action="TaskService.php" method="POST"> 
<label for="usernameDel">Username</label> 
    <input type="text" name="usernameDel" id="usernameDel" required/><br /> 
<label for="passwordDel">Password</label> 
    <input type="password" name="passwordDel" id="passwordDel" required/><br /> 
<label for="delTaskId">Task ID</label> 
    <input type="text" name="delTaskId" id="delTaskId" required/><br /><br /> 
<button type="button" id="btnDelete">Delete Task</button><br /><br /> 
</form> 

Das ist mein Ajax-Code ist (edit-jetzt @Devs Modifikationen verwenden):

$("#btnDelete").click(function() { 

    $.ajax({ 
      method: "DELETE", 
      url: "TaskService.php", 
      data: { 'username':$("#usernameDel").val(), 'password': $("#passwordDel").val(), 'id': $("#delTaskId").val()}, 
      success: function(theResponse) { 
       alert(theResponse); 
      } 
     }); 
}); 

Zeit es gibt eine 200-Antwort, sondern gibt mir die Fehlermeldungen Ich habe mich für meine Account-Klasse angemeldet (kommt zurück mit "Konnte Konto nicht finden".

Mein Bauchgefühl sagt mir, dass es etwas mit meinen Superglobalen $_REQUEST[] zu tun hat, da es nichts mit einer Formularaktion macht, aber ich nicht nur allzu vertraut mit der Weitergabe von Informationen über Ajax
Gedanken?

+0

In der obigen Frage: Ist der erste Block von PHP-Codes in TaskService.php? –

+0

@Devs ja, es ist alles Teil dieser TaskService.php Datei – kmancusi

Antwort

0

Just arrangiert das Ajax-Format, auch einige Syntaxfehler im PHP-Code.

Hinweis: nie getestet

Ajax

$(document).ready(function(){ 

    $("#btnDelete").click(function() { 

     $.ajax({ 
       method: "DELETE", 
       url: "TaskService.php", 
       data: { 'username':$("#usernameDel").val(), 'password': $("#passwordDel").val(), 'id': $("#delTaskId").val()}, 
       success: function(theResponse) { 

        // Output 
        alert(theResponse); // comment this 

        } 
      }); 
    }); 
});     

TaskService.php

<?php 
$http_req = $_SERVER["REQUEST_METHOD"]; 

switch ($http_req) { 
    case DELETE: 
     $user = $acct->read($_REQUEST["username"], $_REQUEST["password"]); // this method used to read db table with 1 record 
     if ($user == true) { 
      $delete  = fopen("php://input", "r"); 
      $data  = stream_get_contents($deleted); 
      $params; 
      parse_str($data, $params); 
      $dropped = $mgr->delete($params["id"]); // calls the method that deletes a particular row based on its id 
      echo $dropped; 
     } 
    break; 
} 
?> 
+0

Nicht zu knifflig klingen, aber gibt es eine Möglichkeit, es umzuformieren, um "" Methode "zu verwenden:" löschen "'anstatt eine'POST' zu machen? – kmancusi

+0

bearbeitet über AJAX –

+0

Ich gab dies eine Aufnahme und es gibt immer noch die gleiche Fehlerantwort, die ich erstellt habe "Konnte Konto nicht finden". Es sieht so aus, als würde der Benutzername/pw nicht richtig validiert. Hinweis: Mein HTML-Code-Snippet befindet sich nicht in einem Formular ... es sind einfach Labels und Eingabeelemente. Hätte das etwas damit zu tun, die richtigen Informationen nicht zu finden? – kmancusi

0

herausgefunden, warum meine Validierung nicht funktioniert! Ich fühle mich so blind!
Ich ignorierte die Tatsache, dass die Löschaktion Benutzername, Passwort und ID als Parameter verwendete .... als solche, Validierung wurde nicht funktionieren, weil die "php: // Eingabe" -Datei nicht geöffnet wurde durch alle 3 Parameter analysieren.
Hier ist PHP meines aktualisiert, das funktioniert:

// I needed to access the file FIRST before doing anything with the parameters passed from AJAX 
$deleted = fopen("php://input", "r"); 
$data  = stream_get_contents($deleted); 
$params; 
parse_str($data, $params); 

$user_auth = $acctMgr->readAcct($params["username"], $params["password"]); 
     if ($user_auth == true) { 
      $rows = $mgr->delete($params["id"]); 

      echo $rows; 
     } else { 
      echo "User not authenticated"; 
     }