2016-03-08 35 views
0

我試圖發佈一個整數數組到我的服務器,所以PHP可以使用它。我的問題是它不起作用。我剛開始用PHP編程,所以我沒有太多的知識......從swift發佈一個NSArray到PHP

這裏是我的SWIFT代碼:

let url = NSURL(string: myURL)! 
    var session: NSURLSession! 
    let request = NSMutableURLRequest(URL: url) 
    request.HTTPMethod = "POST" 

    do { 
     dataNotice = try context.executeFetchRequest(fetchRequestForNotice) as! [Notice] 
    } catch { 
     print(error) 
    } 

    //create array of existing IDs 
    var noticeIDs: [Int] = [Int]() 
    for var i = 0; i < dataNotice.count; i++ { 

     noticeIDs.append(dataNotice[i].id as! Int) 
     print("Notice ID: " + String(dataNotice[i].id)) 
    } 

    let postString = "server=\(server)&username=\(username)&password=\(password)&database=\(database)&noticeIDs=\(noticeIDs)" 

    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 

    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 

    session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil) 

    let task = session.dataTaskWithRequest(request) 

    task.resume() 

UPDATE 這是我的PHP代碼趕上陣:

<?php 

$method = $_POST['method']; 
$db_server = $_POST['server']; 
$db_benutzer = $_POST['username']; 
$db_passwort = $_POST['password']; 
$db_name = $_POST['database']; 
$applicationNotices = $_POST['noticeIDs']; 

$databaseNotices; 

$con=mysqli_connect($db_server,$db_benutzer,$db_passwort,$db_name); 

if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$sql = "SELECT * FROM `Notice`"; 
$sqlID = "SELECT `ID` FROM `Notice`"; 

if ($result = mysqli_query($con, $sql)) { 
    if ($resultID = mysqli_query($con, $sqlID)) { 
     $resultArray = array(); 
     $tempArray = array(); 
     $idArray = array(); 
     $tempIDArray = array(); 

     while($rowID = $resultID->fetch_object()) 
     { 
      $tempIDArray = intval($rowID->ID); 
      array_push($idArray, $tempIDArray); 
     } 

     while($row = $result->fetch_object()) 
     { 
      $tempArray = $row; 
      array_push($resultArray, $tempArray); 
     } 

     $neededNotices = array_diff($idArray, $applicationNotices); 

     $array = array_map('intval', $neededNotices); 
     $array = implode("','",$array); 

     $finalSql = "SELECT * FROM `Notice` WHERE `ID` IN ('".$array."')"; 
     if ($finalResult = mysqli_query($con, $finalSql)) { 
      $finalArray = array(); 
      $tempFinalArray = array(); 

      while($finalRow = $finalResult->fetch_object()) 
      { 
       $tempFinalArray = $finalRow; 
       array_push($finalArray, $tempFinalArray); 
      } 

      echo json_encode($finalArray); 
     } 
    } 
} 

mysqli_close($con); 

?> 

此代碼應該在我的核心數據的數據庫現有的IDS,並將其傳輸到我的服務器與我的sql數據庫的ID比較該ID和返回,目前不在applicati所有條目上。

如果我運行代碼我得到的錯誤:

Could not cast value of type '__NSArray0' (0x110469780) to 'NSMutableArray' (0x11046a978).

我怎樣才能將數據正確傳送到服務器?

非常感謝!

+0

什麼不起作用? – RaffAl

回答

0

對我來說,我不會每次都傳遞用戶名和密碼以及主機名,因爲即使它看起來很小而且不太安全,也是過度的網絡連接。其次,你的HTTPMethod設置爲POST,所以在你的php代碼中,你應該從$_POST取回值而不是請求。

+0

好的。我更新了我的問題,但這不起作用... –