2013-04-11 73 views
0

我想为android实现服务器端。 Forthis android系统中我使用此代码:在服务器端如何从PHP中获取Android的值

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
     // Get the deviceID 
     nameValuePairs.add(new BasicNameValuePair("reg_id", val[1])); 
     nameValuePairs.add(new BasicNameValuePair("App_Name",val[2])); 
     nameValuePairs.add(new BasicNameValuePair("App_Version", val[3])); 

现在我想访问这些值并将其存储在数据库中。我的PHP代码:

include('connectdb.php'); 

$Reg_ID=$_REQUEST['reg_id']; 
$App_Name=$_REQUEST['App_Name']; 
$App_Version=$_REQUEST['App_Version']; 

if($_REQUEST['reg_id']!='NULL' && $_REQUEST['App_Name']!='NULL' && $_REQUEST['App_Version']!='NULL') 
{ 
    mysqli_query($con,"INSERT INTO registration (Reg_ID, APP_Name,App_Version) 
    VALUES ('".$_REQUEST['reg_id']."', '".$_REQUEST['App_Name']."','".$_REQUEST['App_Version']."')"); 

} 
else 
{ 
} 

mysqli_close($con); 

但是在PHP我得到这些错误:

注意:未定义指数:REG_ID在C:\ XAMPP \ htdocs中\ GCM \ addReg.php上 线5

说明:未定义指数:APP_NAME在C:\ XAMPP \ htdocs中\ GCM \ addReg.php上 线6

说明:未定义指数:APP_VERSION在C:\ XAMPP \ htdocs中\ GCM \ addReg.php 第7行

警告:mysqli_close()预计参数1是mysqli的,在C给定的资源 :\ XAMPP \ htdocs中\ GCM \ addReg.php上线24

任何帮助

编辑

public class SendMail extends AsyncTask<String, String, String> { 

    private String endResult; 
    HttpResponse response; 


    @Override 
    protected String doInBackground(String... val) { 

     String url=val[0]; 

     //Log.i("Url", url + ""); 

     // Log.d("C2DM", "Sending registration ID to my application server"); 

     HttpPost post = new HttpPost(url); 



     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 

     nameValuePairs.add(new BasicNameValuePair("reg_id", val[1])); 
     nameValuePairs.add(new BasicNameValuePair("App_Name",val[2])); 
     nameValuePairs.add(new BasicNameValuePair("App_Version", val[3])); 








     HttpParams httpParameters = new BasicHttpParams(); 
     // Set the timeout in milliseconds until a connection is established. 
     int timeoutConnection = 30000; 
     HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
     // Set the default socket timeout (SO_TIMEOUT) 
     // in milliseconds which is the timeout for waiting for data. 
     int timeoutSocket = 30000; 
     HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 

     DefaultHttpClient hc = new DefaultHttpClient(httpParameters); 
     ResponseHandler<String> res = new BasicResponseHandler(); 





     try { 
      post.addHeader("Content-Type","application/x-www-form-urlencoded"); 
      post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     try { 
      response = hc.execute(post); 
     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     Log.i("endResult", "" + endResult); 
     super.onPostExecute(result); 


     publishProgress(endResult); 

    } 

    @Override 
    protected void onProgressUpdate(String... values) { 

     super.onProgressUpdate(values); 
     String result = values[0]; 



    } 

} 
+0

我不是android开发人员,但尝试创建json数组,然后将其传递给php。 IN php解码数组并使用它 – mukund 2013-04-11 10:58:13

回答

1
include('connectdb.php'); 

//First, check whether the values exist and only then use them. 
if(isset($_REQUEST['reg_id'], $_REQUEST['App_Name'], $_REQUEST['App_Version'])) 
{ 
    $id = mysqli_real_escape_string($con, $_REQUEST['req_id']) ; 
    $name = mysqli_real_escape_string($con, $_REQUEST['App_Name']) ; 
    $version = mysqli_real_escape_string($con, $_REQUEST['App_Version']) ; 

    $query = "INSERT INTO registration (Reg_ID, APP_Name, App_Version) 
    VALUES ('{$id}', '{$name}','{$version}') ;" ; 

    $result = mysqli_query($con, $query) ; 
    if ($result){ 
    echo "Success" ; 
    } else { 
    echo "Failure" ; 
    } 
} else { 
    echo "Not sufficient data for request" ; 
} 

我刚刚纠正了条件的基本流程并转义了特殊字符来保护您的数据库。它应该工作。

+0

请你能看到我编辑的问题 – User42590 2013-04-11 11:28:48

+0

嗯,当你在PHP中发生错误时,为什么要向我们展示你的Java代码。顺便说一句我解决了你的'未定义的索引'错误在我的答案。 – vikingmaster 2013-04-11 11:30:45

0

尝试使用$ _POST而不是$ _REQUEST,如果你要发送的数据。为了清楚起见 - 在第7行和下面重新使用分配的变量($ Reg_ID,$ App_Name,$ App_Version)而不是$ _REQUEST [...]。

+0

我也尝试了post方法,但存在相同的错误 – User42590 2013-04-11 11:09:37

+0

这些函数输出了什么:print_r($ _GET)和print_r($ _ POST)?向我们展示您的完整Android表单提交代码,也许您将这些值作为查询字符串传递,而不是形成参数。 – Lauris 2013-04-11 11:23:55

+0

请参阅我编辑的问题 – User42590 2013-04-11 11:28:09