2012-09-06 61 views
2

我正在製作一個小應用程序來獲取REST的掛件,並且在DELETE方法中遇到了一些麻煩。我以前從未使用過,所以我不確定它的行爲。使用PHP刪除HTTP方法與REST API使用PHP

無論如何,我跟着this tutorial去了解一些基礎知識。我修改了它,所以用戶可以提交數據並從MySQL數據庫查看,而不是使用預製數組。

我有3個文件:

  • server.php - 的 「API」,其確定所使用的方法和相應地動作

  • input.php - 顯示用戶輸入的數據的形式

  • viewinput.php - 顯示已輸入的輸入。

我想現在在viewinput.php上放置一個「刪除」按鈕,以便可以刪除一個條目。這是我的代碼,顯示輸入的信息。

while ($result = mysql_fetch_array($sql)){ 
     ?> 
     <tr><td><? echo $result['id']." "; ?></td><td><? echo $result['text']; ?></td> 
     <form method = "delete" > 
      <td><input type="submit" name="delete" value="delete"></input></td></tr> 
      <input type="hidden" name = "hidden_delete" value="<? echo $result['id']; ?>"></input> 
     </form> 
     <? 
    } 

現在,在我的server.php文件(API),這是被稱爲其確定的方法和打破了URL到用於進一步處理的組件的非常第一功能。

public function serve() { 
    $uri = $_SERVER['REQUEST_URI']; 
    echo $method = $_SERVER['REQUEST_METHOD']; //GET and POST are displayed, DELETE isn't 
    $paths = explode('/', $this->paths($uri)); 
    array_shift($paths); // 
    $resource = array_shift($paths); 

當我按下刪除鍵,URL從

/rest/viewinput 

/rest/viewinput?delete=delete&hiddendelete=3 //assuming I deleted the 3rd entry 

據我瞭解,網址應該是/ REST/viewinput/3時,提交DELETE方法

在我的server.php文件中,當我回顯方法時,「DELETE」不會像顯示POST一樣顯示,並且GET方法。

我發現 this resource關於DELETE,並從我的理解一個標識符將通過URL傳遞,但應該有一些方法接收就像GET和POST(這意味着我的代碼應顯示DELETE時,我回聲的方法)。

+1

你在運行什麼服務器 - 有時你需要在服務器上允許DELETE http動詞。 – Fenton

+1

它是html 4.0規範的限制。你只是不能使用除GET和POST之外的東西。看到這個答案:http://stackoverflow.com/a/166501/1515540 – complex857

+0

@索尼我在localhost – user1104854

回答

2

以下是PUTDELETE的當前內部情況。

如果您是「普通瀏覽」,大多數瀏覽器並不實際使用這些動詞中的任何一個。但是,它們支持XML Http請求(即AJAX)。所以從客戶端,你不能直接在HTML表單元素上直接使用PUTDELETE,並使其工作。您需要使用Complex857建議的解決方法,即在請求中包含意圖。

如果您使用的是後臺AJAX調用,或者確實如果您未使用瀏覽器發出請求,則可以使用全套HTTP動詞,包括PUTDELETE。有一點需要注意的是,在IIS上,您可能需要更改設置以允許使用這些動詞,因爲您可以設置服務器接受的特定動詞。