当php文件被android应用程序调用时使用$_POST


Use of $_POST when php file is called by android app

我试图在数据库中上传一些数据与android应用程序。直到现在一切都很好,但现在我需要添加另一列,所以我修改了代码,现在看起来像手机发送的数据是不可读的我的php文件。我的应用程序代码的重要部分如下:

private static void post(String endpoint, Map<String, String> params)
        throws IOException {
    URL url;
    try {
        url = new URL(endpoint);
    } catch (MalformedURLException e) {
        throw new IllegalArgumentException("invalid url: " + endpoint);
    }
    StringBuilder bodyBuilder = new StringBuilder();
    Iterator<Entry<String, String>> iterator = params.entrySet().iterator();
    // constructs the POST body using the parameters
    while (iterator.hasNext()) {
        Entry<String, String> param = iterator.next();
        bodyBuilder.append(param.getKey()).append('=')
                .append(param.getValue());
        if (iterator.hasNext()) {
            bodyBuilder.append('&');
        }
    }
    String body = bodyBuilder.toString();
    Log.v(TAG, "Posting '" + body + "' to " + url);
    byte[] bytes = body.getBytes();
    HttpURLConnection conn = null;
    try {
        Log.e("URL", "> " + url);
        conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setUseCaches(false);
        //conn.setFixedLengthStreamingMode(bytes.length);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded;charset=UTF-8");
        // post the request
        OutputStream out = conn.getOutputStream();
        Log.v(TAG, "Has posted" + bytes);
        out.write(bytes);
        out.close();
        // handle the response
        int status = conn.getResponseCode();
        if (status != 200) {
            Log.v(TAG, "Post Failed");
            throw new IOException("Post failed with error code " + status);
        }
    } finally {
        if (conn != null) {
            conn.disconnect();
        }
    }

在Logcat上,看起来应用程序已经能够有效地以字节格式发布代码:

V/Alvaro Lloret GCM﹕ Posting email=llor&name=hola&arduinoweb=jaj&regId=APA' to http://youdomotics.com/mysecurity1/register.php
E/URL﹕ > http://website.com/mysecurity1/register.php
V/RenderScript﹕ Application requested CPU execution
V/RenderScript﹕ 0xaec16400 Launching thread(s), CPUs 4
V/Alvaro Lloret GCM﹕ Has posted[B@16d173b0
V/GCMRegistrar﹕ Setting registeredOnServer status as true until 2015-09-11 20:21:30.364
V/GCMBaseIntentService﹕ Releasing wakelock

然后,用php接收post的代码如下:

<?php
// response json
$json = array();
if (isset($_POST["name"]) && isset($_POST["email"]) && isset($_POST["regId"]) ) { 
     require("config.php");
    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
    $name = $_POST["name"];
    $email = $_POST["email"];
    $arduinoweb = $_POST["arduinoweb"];
    $gcm_regid = $_POST["regId"]; // GCM Registration ID
    include_once './gcm.php';
    $query = "INSERT INTO gcm_users_new(name, email, gcm_regid, arduinoweb, created_at) VALUES('$name', '$email', '$gcm_regid', '$arduinoweb', NOW())";
    mysqli_query($con, $query);
} else {
    // user details missing
}
?>

这段代码在没有新参数arduinoweb的情况下工作得很好,但是因为我添加了这个其他参数,所以没有将该行添加到数据库中。如果我注释条件If (isset…),那么文件将在表中添加一行,但它是空的…

任何想法?

谢谢! !

我解决了!

完美的答案在这里

我只好改到www。当我调用URL时,它就工作了!