2013-08-07 112 views
0

我嘗試從Android向ArrayList發送ArrayList,然後將此ArrayList插入到MySQL表中時出現問題。ArrayList <String> Android to PHP。插入MySQL

所以,首先我發送列表與所有參數。

List<NameValuePair> list = new ArrayList<NameValuePair>(); 
     list.add(new BasicNameValuePair("tag", "registerCall")); 
     list.add(new BasicNameValuePair("hourMatch", hourMatch)); 
     list.add(new BasicNameValuePair("dateMatch", dateMatch)); 
     list.add(new BasicNameValuePair("listPlayers", seleccionados 
       .toString())); //ARRAYLIST<String> 
     list.add(new BasicNameValuePair("idMatch", idMatch)); 

如果我打印參數列表:[標籤= registerCall,hourMatch = 0931,dateMatch = 2013年8月7日,listPlayers = [8,10],idMatch = 7]。

然後在PHP中,我收集參數並將其發送給函數。

if ($tag == 'registerCall') { 

    $hourMatch = $_POST['hourMatch']; 
    $dateMatch = $_POST['dateMatch']; 
    $idMatch = $_POST['idMatch']; 
    $listPlayers = $_POST['listPlayers']; 


    $call = $db->registerCallMatch($dateMatch, $hourMatch, $idMatch, $listPlayers); 

    if ($call != false) { 

     $response["success"] = 1; 
     $response["msg"] = "Insertados"; 

     echo json_encode($response); 

    } else { 

     $response["error"] = 1; 
     $response["error_msg"] = "Error en la inserción"; 

     echo json_encode($response); 
    } 


} 

而且功能:

public function registerCallMatch($dateCall, $timeCall, $idMatch, $listPlayers) 
{ 
    $result = mysql_query("INSERT INTO call_match (date_call, time_call, idMatch) VALUES ('$dateCall', '$timeCall', '$idMatch')"); 

    if ($result != null) { 

     $idCall = mysql_insert_id(); 

     if (is_array($listPlayers)) { 

      foreach ($listPlayers as $idPlayer) { 

       $result = mysql_query("INSERT INTO call_player (idCall, idPLayer) VALUES ('$idCall','$idPlayer')")or 
       die ('unable' . mysql_error()); 

       return true; 

      } 

     } else { 

      return false; 

     } 

    } else { 

     return false; 

    } 

} 

的問題是,PHP不承認ArrayList中,所以我不能插入字符串到數據庫中。但是,如果我在PHP中創建一個數組,該函數運行良好。

編輯:好的。我發現了這個問題。如果我發送了一個字符串,我不能將它用作數組。現在我必須將字符串轉換爲數組。任何想法?這是字符串:[8,10]。我必須將8和10放在一起。

編輯:我找到了解決方案。

我們有一個ArrayList,我們必須創建一個字符串。我們可以使用很多方法,但我用:

Iterator it = seleccionados.iterator(); 
     StringBuilder listIdPlayers = new StringBuilder(); 
     int i = 0; 
     while (it.hasNext()) { 
      if (i > 0) { 
       listIdPlayers.append(" ").append(it.next()); 
       i++; 
      } else { 
       listIdPlayers.append(it.next()); 
       i++; 
      } 
     } 

有了這個,我們有這樣的字符串XX XX XX XX XX。兩個字之間有一個空格。

現在我們去我們的php,我們使用explode()方法。用explode()我們創建數組。

$players = explode(" ", $listPlayers); 

然後我們檢查結果是一個數組並重復它。

if ($result != null) { 

     $idCall = mysql_insert_id(); 

     if (is_array($players)) { 

      foreach ($players as $idPlayer) { 

       $result = mysql_query("INSERT INTO call_player (idCall, idPLayer) VALUES ('$idCall','$idPlayer')")or 
       die ('unable' . mysql_error()); 

      } 

      return true; 


     } 

非常重要的,把回出的foreach。

謝謝

+0

所以你的問題是? –

+0

首先,您可以使用'echo'來檢查數據是否正在獲取或不在php端。那麼你的收益進一步。 –

+0

如何讓PHP識別我在參數中發送的ArrayList。我會檢查它Patrik。謝謝。 – Filowk

回答

1

我認爲問題在於您將數據發送到服務器的方式。你發送Java對象到PHP,它不能識別它。

將其轉換爲具有特殊分隔字符的字符串,並在php中爆炸(壞習慣)。

OR

我在C#中解決這樣的問題在下面的方式(我敢肯定,現在沒有在java類似的方式):

MultipartFormDataContent form = new MultipartFormDataContent(); 
form.Add(new StringContent(this.date_start), "data[DateSearch][date_start]"); 
form.Add(new StringContent(this.date_end), "data[DateSearch][date_end]"); 

你可以看到「[聲明。 ..]「被認爲是數組內容。所以,也許你可以找到你的代碼的方式:

MultipartFormDataContent list = new MultipartFormDataContent(); 
list.add("registerCall","data[tag]")); 
list.add(hourMatch.ToString(), "data[hourMatch]")); 
... 
+0

但我發送ArrayList像一個字符串。因爲我在做arraylist.toString(); – Filowk

+1

然後檢查php正在接收的數據。您必須執行一些操作才能從該字符串中獲取數組。一個(PHP)不會簡單地將一個數組從字符串中轉換出來而沒有明確的功能;) –

+0

好的。你幫了我很多忙。現在我必須從字符串開始創建數組。謝謝。任何想法? – Filowk

0

PHP不承認的Java對象,該列表轉換成XML或JSON字符串,並將其上傳到服務器。在PHP方面,您可以使用標準的PHP XML/JSON解析器來解析字符串。

+0

是的,但我發送ArrayList像一個字符串,因爲我發了arraylist.toString() – Filowk