Android将长字符串发送到PHP脚本

时间:2013-08-06 00:59:27

标签: php android database

我无法从Android向我的数据库发送GCM registration_id。我的服务器上有一个脚本,如果我键入“.... name.php?regid = APA91bHmcD3_yZijf7dmmWlPiyi39Zx2kRTVHdI”它将起作用。但是,当我尝试通过Android发送它时,它不会。

这是我的代码:

public void postData() {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://www.domain.com/newnotifier.php");
    Log.d("TAG", regid);
    try {
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
        nameValuePairs.add(new BasicNameValuePair("regid", regid));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }
} 

只需要知道为什么这不起作用。我查看了我的logcat,它显示了整个id被发送过来。

谢谢,

编辑:它没有出错,它只是没有在数据库中显示任何内容。 编辑2:PHP代码

$con = mysql_connect($mysql_host,$mysql_user,$mysql_password);
if (!$con)
{
   die('Could not connect: ' . mysql_error());
}

if ($con) 
{

}

 mysql_select_db($mysql_database, $con);
 name1 = $_REQUEST['regid'];
$sqldo = mysql_query("INSERT into users(regid) VALUES('".$name1."')");

2 个答案:

答案 0 :(得分:0)

在原始问题的示例中(&#34;工作&#34;),您正在使用GET来检索值regid。当您从上面的代码发送值时,它使用POST发送regid。使用以下内容应该适用于您的脚本:

<?php
    $regid = $_POST['regid'];
?>

另外,将此添加到try语句以获取服务器响应:

HttpEntity httpEntity = httpResponse.getEntity();

这是一种非常糟糕的方法,但这是已弃用代码的清理版本,以便它可以正常工作。原始代码中的name1必须为$name1。您还有冗余且无用的if语句。 echo语句将以httpEntity的形式返回到您的设备,如果您按照上一个上述提示操作:

$con = mysql_connect($mysql_host,$mysql_user,$mysql_password);

if ($con) {

    if (mysql_select_db($mysql_database, $con)) {
        $name1 = $_POST['regid'];
        $insert = "INSERT into users(regid) VALUES('$name1')";
        $sqldo = mysql_query($insert);

        if ($sqldo) {
            echo "query run";
        } else {
            echo "query failed";
        }

    } else {
        echo "could not select database";
    }

} else {
    echo "could not connect to server";
}

这将有效,授予您使用正确的凭据连接到您的数据库并正确复制和粘贴它。是的,您可以直接在双引号(")中使用变量,这就是为什么我没有使用.来附加字符串。

如上所述,请阅读以下内容:

  

Please, don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

答案 1 :(得分:0)

nameValuePairs用于传递POST HTTP请求的参数。 但是,我看到你的PHP代码正在等待GET请求(?regid)。

将您的网址编辑为

HttpPost httppost = new HttpPost("http://www.domain/newnotifier.php?param1=value1&param2=value...");