使用PHP删除HTTP方法与REST API使用PHP

问题描述:

我正在制作一个小应用程序来获取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

以下是PUTDELETE的当前内部情况。

如果您是“普通浏览”,大多数浏览器并不实际使用这些动词中的任何一个。但是,它们支持XML Http请求(即AJAX)。所以从客户端,你不能直接在HTML表单元素上直接使用PUTDELETE,并使其工作。您需要使用Complex857建议的解决方法,即在请求中包含意图。

如果您使用的是后台AJAX调用,或者确实如果您未使用浏览器发出请求,则可以使用全套HTTP动词,包括PUTDELETE。有一点需要注意的是,在IIS上,您可能需要更改设置以允许使用这些动词,因为您可以设置服务器接受的特定动词。