2015-11-08 35 views
1

我现在已经读了不少关于请求方法,而且我发现,提供这个PHP例如一个例子:PHP请求使用

<?php 
    // Read request parameters 
    $firstName= $_REQUEST["firstName"]; 
    $lastName = $_REQUEST["lastName"];// Store values in an array 
    $returnValue = array(“firstName”=>$firstName, “lastName”=>$lastName); 
    // Send back request in JSON format 
echo json_encode($returnValue); 
?> 

我已经在迅速写了一个IOS应用程序,将数据发送到本php,然后我将使用网站并将收到的数据写入服务器上的文本文件,是否是$ _Request方法的正确方法?

IOS部分将数据发送到该网站(不完整的代码):

let request = NSMutableURLRequest(URL: NSURL(string: "http://localhost/test.php")!) 
    request.HTTPMethod = "POST" 
    let postString = "firstName=Neil&lastName=Johnson" 

注:此代码不缝工作(未定义指数在4号线,5和6,但林不知道为什么作为我不能在这里使用isset方法,某些线程都表示删除错误)

谢谢你的问候

+0

尝试使用'$ _POST'而不是'$ _REQUEST' –

+0

$ _REQUEST超全球包含$ _GET和$ _POST的内容,因此无论如何它都能正常工作 –

+0

检查您的报价。并安装一个合适的文本编辑器/ IDE支持语法高亮 – PeeHaa

回答

2

首先,$_REQUEST是不是一个“法”,这是一个“超全局变量”。使用圆括号()调用方法。数组(如此)可通过方括号[]访问。

“未定义的索引”表示您试图访问不存在的数组元素,这向我建议您没有正确地向PHP发送firstName和/或lastName。

通常你不应该手动编写你的POST消息。在iOS/Swift中没有东西来形式化编码你的变量?如果没有,您是否将内容类型设置为application/x-www-form-urlencoded?这也可以。

最后,你在这条线

$returnValue = array(“firstName”=>$firstName, “lastName”=>$lastName); 

怪异的报价。您需要使用键盘上的标准"。如果你是从博客复制东西,WordPress可能会为你改变它们。

+0

耶对不起只看到现在的引号,很奇怪。我的数据现在已成功发送到网站,所以感谢您的帮助!欢呼 – MADJAR

+0

所以我得到它使用$ _request变量工作得很好......我现在能够发送值到网站,这也可以用来从网站检索数据到我的设备?我的下一步就是能够检索值! thanx – MADJAR

1

这一个混淆了很多人,所以我会试图尽可能客观地解释这一点。

PHP有几个super global variables它是根据某些条件自动填充。

当使用$_POST

您应该使用$_POST超全局访问您的数据,当您预计 HTTP请求方法到资源是POST而已。 POST请求动词通常用于非幂等请求(,如检出购物车或向网络论坛添加帖子)。

请注意,$_POST只在Content-type标头为www-form-urlencodedmulti-part编码时填充。否则,您将不得不检查php://input,因为PHP可能不会将其解码为$_POST。 PHP也将这些名称弄糟了一点(,例如,它用下划线替换空格和点)。有关更多详细信息,请参见Handling External Variables

当使用$_GET

造成负面,你应该期望时,输入要查询字符串,或者在你请求method明确设置为GET形成其一部分使用$_GET。注意,这并不一定意味着你每次都希望HTTP请求动词为GET

当使用$_REQUEST

您使用$_REQUEST当你真正不在乎HTTP请求动词是否POSTGET,因为$_REQUEST结合了成一个阵列。在这种情况下,重要的是要认识到,如果POSTGET中存在a specific order in which they will be overwritten这两个相同的名称。


它总是更好地明确指明,RESTful方式,你很少会依靠$_REQUEST。在你的情况下,你似乎是明确发送POST请求,所以我坚持在这种情况下$_POST。但你很可能会发送POST请求,并仍然希望在查询字符串中输入,在这种情况下$_GET是合适的。在大多数情况下,我很少看到$_REQUEST的真实需求。

+0

这是如何回答这个问题的? –

+0

它解释了什么时候适当地从哪个超级全局获取输入,而不对OP的实现做出假设。例如,它解释了'$ _POST'需要一个url编码的Content-type。它还解释了处理'$ _REQUEST'时的'variable_order'配置。它还解释了外部名称如何在'$ _POST' /'$ _GET' /'$ _REQUEST'键中被破坏。你觉得这样做不会*回答这个问题?我很乐意修改答案。 – Sherif

+0

您提供的附加信息很有用,但他的问题是未定义索引的错误。 mpen以上已经向OP指出了这一点。 Perhpas修改你的答案,指出mpen已经解决了这个问题,你正在提供有关$ _REQUEST变量的更多信息。 –