2017-04-09 14 views
1

我是Swift 3的新手,我試圖將一些數據傳遞給使用PHP的服務器。我確定這兩種語言都是初學者。使用file_get_contents從Swift向JSON傳遞數據?

我正在嘗試從SWIFT接收數據到PHP。

但是,我意識到在PHP中使用$ _POST或$ _REQUEST對JSON不起作用。相反,我聽說有必要使用'file_get_contents'或'PHP:// input'。

所以我認真地花了很多時間弄清楚如何使它工作。

以下是PHP端的代碼。但是,它似乎只適用於原始數據,而不適用於JSON編碼。

有沒有人認爲下面的代碼是不正確的從SWIFT接收數據?

<?php 
header("Content-Type: application/json"); 
$con=mysqli_connect("localhost","123","123!!","123"); 

$menu_main_item_store_id = file_get_contents('php://input'); 
$menu_main_item_store_id_received = $menu_main_item_store_id; 

if (mysqli_connect_errno()) { 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
$sql = "SELECT * FROM menu_main_items WHERE menu_main_item_store_id=$menu_main_item_store_id_received AND menu_main_item_in_use_check = 'yes'"; 
if ($result = mysqli_query($con, $sql)) { 
    $resultArray = array(); 
    $tempArray = array(); 
    while($row = $result->fetch_object()){ 
     $tempArray = $row; 
     array_push($resultArray, $tempArray); 
    } 
echo json_encode($resultArray); 
} 

mysqli_close($con); 
?> 
+2

請將您的相關代碼發佈到代碼中,而不是代碼的屏幕截圖。 – segFault

+0

謝謝。我把代碼放在裏面。:) – Jay

回答

-1

//你可以試試這個代碼

<?php 
define('HOST','localhost'); 
define('USER','DatabaseUserName'); 
define('PASS','Password'); 
define('DB','DataBaseName'); 
$con = mysqli_connect(HOST,USER,PASS,DB); 
$sql = "select * from DATABAS_TABLE_NAME"; 
$res = mysqli_query($con,$sql); 
$result = array(); 
while($row = mysqli_fetch_array($res)){ 
array_push($result, 
array('Username'=>$row[0], 
'Cell'=>$row[1], 
)); 
} 
echo json_encode(array("result"=>$result)); 
mysqli_close($con); 
?> 
+1

您可以添加一個解釋,說明與問題相比,您做了哪些不同,以及如何在其他示例中應用相同的方法? – IMSoP

+0

謝謝你的建議。你的解釋給了我一個提升。然而,我發現的問題是,無論收到什麼PHP,它都會發送到正在發送的數組,我想。 – Jay

0

file_get_contents('php://input')會給你包含任何數據被張貼到PHP的字符串。它不會自動計算出該數據的格式,因此您需要以某種方式解析數據,例如與json_decode()

記得檢查JSON格式的錯誤,並且所有的輸入都是不可信的 - 你不知道它是你的應用程序發送數據,有人可以找出URL併發送奇怪的東西來破壞你的PHP碼。

0

Swift似乎使用POST發送正確的數據。

let url:NSURL = NSURL(string: url)! 
let session = URLSession.shared 
let request = NSMutableURLRequest(url: url as URL) 
    request.httpMethod = "POST" 

let paramString = "table_id='1'" 
    request.httpBody = paramString.data(using: String.Encoding.utf8) 

但是,當PHP收到它, 它什麼也沒有返回。

$contents = $_REQUEST['table_id']; 
$abc = $contents; 


if (mysqli_connect_errno()) 
{ 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
$sql = "SELECT * FROM menu_main_items WHERE table_id='".$abc."'"; 

if ($result = mysqli_query($con, $sql)) { 
    $resultArray = array(); 
    $tempArray = array(); 
    while($row = $result->fetch_object()){ 
     $tempArray = $row; 
     array_push($resultArray, $tempArray); 
    } 
    echo json_encode($resultArray); 

} 

如果我手動輸入$ content =「1」;然後數據被檢索。

您認爲這個問題似乎是什麼?