6

Question:

So the problem is that this doesn't post to the online database hosted by goDaddy. So my question is why, and how do i fix it to have it post to it?

Issue: The php page is not receiving the name value pairs being passed to it.

Edit:

Modified code on suggestion to use HttpURLConnection... I've narrowed down the problem to it not retrieving the fbid.

As you can tell I’ve done a lot of my homework here... Here's my logcat of what is being set in the postthread class Here's my class that does the post:

07-02 16:41:45.108: I/PROJECTCARUSO(12308): response: {"posts":[null]}

HttpPostThread:

public class HttpPostThread extends Thread {
    public static final int FAILURE = 0;
    public static final int SUCCESS = 1;


    private URL url;
    ArrayList<NameValuePair> pairs;

    public HttpPostThread(URL sERVICE_URL, ArrayList<NameValuePair> pairs, final Handler handler)
    {
        Log.i("PROJECTCARUSO", "Posting to URL: " + sERVICE_URL);
        this.url =sERVICE_URL;
        this.pairs = pairs;
        if(pairs==null){
            Log.i("PROJECTCARUSO", "URL parms were null");
            this.pairs = new ArrayList<NameValuePair>();
        }
    }

    @Override
    public void run()
    {
        try {
            HttpURLConnection conn;
            String param="";

            for (NameValuePair nvp : pairs) {
                //you need to encode ONLY the values of the parameters
                if (param == "") {
                    param=nvp.getName() + "=" + URLEncoder.encode(nvp.getValue(),"UTF-8");
                } else {
                    param+= "&" + nvp.getName() + "=" + URLEncoder.encode(nvp.getValue(),"UTF-8");
                }
            }

            Log.i("PROJECTCARUSO", "param: " + param.toString());
            // Create connection
            conn=(HttpURLConnection)url.openConnection();
            //set the output to true, indicating you are outputting(uploading) POST data
            conn.setDoOutput(true);
            //once you set the output to true, you don't really need to set the request method to post, but I'm doing it anyway
            conn.setRequestMethod("POST");

            //Android documentation suggested that you set the length of the data you are sending to the server, BUT
            // do NOT specify this length in the header by using conn.setRequestProperty("Content-Length", length);
            //use this instead.
            conn.setFixedLengthStreamingMode(param.getBytes().length);
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            //send the POST out
            PrintWriter out = new PrintWriter(conn.getOutputStream());
            out.print(param);
            out.close();

            //build the string to store the response text from the server
            String response= "";

            //start listening to the stream
            Scanner inStream = new Scanner(conn.getInputStream());

            //process the stream and store it in StringBuilder
            while(inStream.hasNextLine())
            response+=(inStream.nextLine());

            Log.i("PROJECTCARUSO","response: " + response);
        }
        //catch some error
        catch(MalformedURLException ex){  
            Log.i("PROJECTCARUSO", ex.toString());

        }
        // and some more
        catch(IOException ex){

            Log.i("PROJECTCARUSO", ex.toString());

        }

    }

    public static boolean isNumeric(String str)  
    {  
      try  
      {  
        double d = Double.parseDouble(str);  
      }  
      catch(NumberFormatException nfe)  
      {  
        return false;  
      }  
      return true;  
    }
}

Here's the php:

        <?php 

//Make connection
$con = mysqli_connect('...','...','...') ;


//check connection
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

//change db to andriodnfp db
mysqli_select_db($con, 'andriodnfp');

$table= 'USER';
$id=0;

$fbid = htmlspecialchars($_GET["fbid"]);
$social = htmlspecialchars($_GET["social"]);


$name = htmlspecialchars($_GET["name"]);
$name = !empty($name) ? "'$name'" : "NULL";

$fname = htmlspecialchars($_GET["fname"]);
$fname = !empty($fname) ? "'$fname'" : "NULL";

$username = htmlspecialchars($_GET["username"]);
$username = !empty($username) ? "'$username'" : "NULL";

$email = htmlspecialchars($_GET["email"]);
$email = !empty($email) ? "'$email'" : "NULL";

$picture = htmlspecialchars($_GET["picture"]);
$picture = !empty($picture) ? "'$picture'" : "NULL";

$other = htmlspecialchars($_GET["other"]);
$other = !empty($other) ? "'$other'" : "NULL";

if (!$fbid == '') {

    if (!mysqli_query($con, 'INSERT INTO '.$table.' ( facebookID, social_outlet, Name, first_name, username, email, picture, significant_other) VALUES ("'.$fbid.'","'.$social.'","'.$name.'","'.$fname.'","'.$username.'","'.$email.'","'.$picture.'","'.$other.'")')) {
        printf("Errormessage: %s\n", mysqli_error($con));
        die();
    } else {
        $posts = array('auto_increment_id'=>mysqli_insert_id($con));
    };
} else {
    printf("Errormessage: %s\n", "Facebook ID was null");
    printf("Errormessage: %s\n", $fbid );
    printf("Errormessage: %s\n", $social);
    printf("Errormessage: %s\n", $name);
    printf("Errormessage: %s\n", $fname);
    printf("Errormessage: %s\n", $username);
    printf("Errormessage: %s\n", $email);
    printf("Errormessage: %s\n", $picture);
    printf("Errormessage: %s\n", $other);
    die();
}

mysqli_close($con);

//$posts = array($json);
$posts = array($posts);
header('Content-type: application/json');
echo json_encode(array('posts'=>$posts));

?>

Apache logs:

166.147.72.174 - - [19/Jun/2013:16:47:41 -0700] "POST ...post.php? HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 195224
166.147.72.174 - - [19/Jun/2013:16:49:08 -0700] "POST ...post.php? HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 13848
166.147.72.174 - - [19/Jun/2013:16:50:57 -0700] "POST ...post.php? HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 17899
166.147.72.174 - - [19/Jun/2013:16:52:14 -0700] "POST ...post.php HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 12514
166.147.72.174 - - [19/Jun/2013:16:53:35 -0700] "POST ...post.php HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 15190
166.147.72.174 - - [19/Jun/2013:16:54:56 -0700] "POST ...post.php HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 14373
166.147.72.174 - - [19/Jun/2013:16:56:50 -0700] "POST ...post.php HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 12017

EDIT:

I even tried the java as so:

public void run() {
    try {
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setReadTimeout(10000);
    conn.setConnectTimeout(15000);

        conn.setRequestMethod("POST");

    conn.setDoInput(true);
    conn.setDoOutput(true);

    List<NameValuePair> params = new ArrayList<NameValuePair>();
    for (NameValuePair nvp : pairs) {
    //you need to encode ONLY the values of the parameters
        params.add(new BasicNameValuePair(nvp.getName(), nvp.getValue()));
        Log.i("PROJECTCARUSO", "NVP: " + nvp.getName() + " - " + nvp.getValue());
    }


    OutputStream os = conn.getOutputStream();
    BufferedWriter writer = new BufferedWriter(
            new OutputStreamWriter(os, "UTF-8"));
    writer.write(getQuery(params));
    writer.close();
    os.close();

    conn.connect();

    //build the string to store the response text from the server
    String response= "";

    //start listening to the stream
    Scanner inStream = new Scanner(conn.getInputStream());

    //process the stream and store it in StringBuilder
    while(inStream.hasNextLine())
    response+=(inStream.nextLine());

    Log.i("PROJECTCARUSO","response: " + response);

    } catch (ProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

     catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
    }
10
  • Why are you adding single quotes around the variables string values? Commented Jun 20, 2013 at 0:22
  • For the insert statement... while testing it i found that when i did the insert if it didn't have quotes around it, it would fail. It thus ends up looking line insert into user(_id, name, ...) values ('0121', 'Jason', ...) This worked fine when i went to the page in my browser and added all the paramaters Commented Jun 20, 2013 at 0:25
  • 1
    @Jonast92 Your comment is not constructive. However if you do have a suggestion to make, though off topic, i'd love to hear it. Commented Jun 20, 2013 at 0:25
  • does this ever show "SUCCESS SENDING REQUEST" ? You also don't check the response to see if it is 200,etc. So,verify that. Also, break up this question into specifically android and php issues. They are not related. Commented Jun 20, 2013 at 0:51
  • It does show "SUCCESS SENDING REQUEST". I didn't break it up because it seemed to both be on the android side of things however i maybe incorrect. As for checking for responses are you referring to the sql response for the insert or are you talking about the response on the android side of things? Commented Jun 20, 2013 at 0:56

2 Answers 2

1
+50

You have to use $_POST instead of $_GET everywhere.

Sign up to request clarification or add additional context in comments.

1 Comment

That's the longest answer I can make :)
1

Assuming your use of apache HttpClient as your DefaultClient.

You need more data about WIRE and HEADERs. Apache logger docs show you how to turn those loggers on. read the apache docs on logging

example below of what you will see ( u will know exactly what is going on between client and server).

Full logging in apache HttpClient:

D/ch.boye.httpclientandroidlib.wire( 1175): >> "PUT /1/classes/Books/8NUX0YP5XK HTTP/1.1[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): >> "Content-Length: 375[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): >> "Content-Type: text/plain; charset=ISO-8859-1[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): >> "Host: api.parse.com[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): >> "Connection: Keep-Alive[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): >> "X-Parse-Application-Id: 3[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): >> "X-Parse-REST-API-Key: kVl9[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): >> "[\r][\n]"
D/ch.boye.httpclientandroidlib.headers( 1175): >> PUT /1/classes/Books/8NUX0YP5XK HTTP/1.1
D/ch.boye.httpclientandroidlib.headers( 1175): >> Content-Length: 375
D/ch.boye.httpclientandroidlib.headers( 1175): >> Content-Type: text/plain; charset=ISO-8859-1
D/ch.boye.httpclientandroidlib.headers( 1175): >> Host: api.parse.com
D/ch.boye.httpclientandroidlib.headers( 1175): >> Connection: Keep-Alive
D/ch.boye.httpclientandroidlib.headers( 1175): >> X-Parse-Application-Id: 3K
D/ch.boye.httpclientandroidlib.headers( 1175): >> X-Parse-REST-API-Key: kVl5Z
D/ch.boye.httpclientandroidlib.wire( 1175): >> "{"pages":{"__op":"Add","objects":[{"__type":"Pointer","ClassName":"TestVoiceObject","objectId":"bsKyc8mKV7"},{"__type":"Pointer","ClassName":"TestVoiceObject","objectId":"hehlqEUJw8"},{"__type":"Pointer","ClassName":"TestVoiceObject","objectId":"rtbhCb37tq"},{"__type":"Pointer","ClassName":"TestVoiceObject","objectId":"84zjWpJy6y"}]},"ACL":{"*":{"read":true,"write":true}}}"
D/ch.boye.httpclientandroidlib.wire( 1175): << "HTTP/1.1 200 OK[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "Access-Control-Allow-Origin: *[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "Access-Control-Request-Method: *[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "Cache-Control: max-age=0, private, must-revalidate[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "Content-Type: application/json; charset=utf-8[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "Date: Mon, 08 Apr 2013 19:51:59 GMT[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "ETag: "172e8ee0c4828b5fce3303c078b8f2ad"[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "Server: nginx/1.2.2[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "Set-Cookie: _parse_session=BAh7BkkiD3d989bfe; domain=.parse.com; path=/; expires=Sat, 08-Apr-2023 19:51:59 GMT; secure; HttpOnly[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "Status: 200 OK[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "X-Runtime: 0.041462[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "X-UA-Compatible: IE=Edge,chrome=1[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "Content-Length: 500[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "Connection: keep-alive[\r][\n]"
D/ch.boye.httpclientandroidlib.wire( 1175): << "[\r][\n]"
D/class ch.boye.httpclientandroidlib.impl.conn.DefaultClientConnection( 1175): Receiving response: HTTP/1.1 200 OK
D/ch.boye.httpclientandroidlib.headers( 1175): << HTTP/1.1 200 OK
D/ch.boye.httpclientandroidlib.headers( 1175): << Access-Control-Allow-Origin: *
D/ch.boye.httpclientandroidlib.headers( 1175): << Access-Control-Request-Method: *
D/ch.boye.httpclientandroidlib.headers( 1175): << Cache-Control: max-age=0, private, must-revalidate
D/ch.boye.httpclientandroidlib.headers( 1175): << Content-Type: application/json; charset=utf-8
D/ch.boye.httpclientandroidlib.headers( 1175): << Date: Mon, 08 Apr 2013 19:51:59 GMT
D/ch.boye.httpclientandroidlib.headers( 1175): << ETag: "172e8ee0c4828b5fce3303c078b8f2ad"
D/ch.boye.httpclientandroidlib.headers( 1175): << Server: nginx/1.2.2
D/ch.boye.httpclientandroidlib.headers( 1175): << Set-Cookie:

8 Comments

Spoke too soon... there are apache logs on godaddys side... Let me look at this, look at the above edit.
Well i see this explanation: stackoverflow.com/questions/3938477/…
my mistake.. not looking like server-side issue
test your php from the cli using curl . before you start using the android client, you should be certain that your server is posting good json in the response body.
The cli using curl? Please explain?
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.