【问题标题】:Android Sending long string to PHP scriptAndroid将长字符串发送到PHP脚本
【发布时间】:2013-08-06 00:59:26
【问题描述】:

我在从 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."')");

【问题讨论】:

  • 发布您的 PHP 脚本。从您的 OG 问题来看,您有一个使用 GET 的示例“它可以工作”,但您正在使用 Java 代码进行 POST。这两种方法是有区别的。

标签: php android database


【解决方案1】:

在原始问题的示例中(“有效”),您使用 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

【讨论】:

  • 我刚做了。问题是,当我通过浏览器手动执行此操作时,它可以工作。当我通过Android进行时,它不起作用..字符串是否可能太长而无法通过Android端发送?
  • @SohelMansuri 不,您的 PHP 代码混乱且不正确。请查看 MySQLi 或 PDO,因为您的代码已被弃用并且将来无法运行。不过,我确实用您正在寻找的内容更新了我的答案。它应该可以正常工作。
【解决方案2】:

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

修改你的网址

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多