2015-11-08 71 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變量的更多信息。 –