0

私はAndroidフォームを介してmysqlデータベースにデータを投稿しようとしています。サーバーでホストされているPHPスクリプトにデータを投稿しています。MYSQLでnull値を取得しています。Webサービスが呼び出されていますが、以下の空白のデータが取得されています。これは私のAndroidコードコードです。

package com.register;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;



import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.app.Activity;

public class Register extends Activity {




    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        EditText email_id = (EditText)  findViewById(R.id.email_id) ;
        EditText name = (EditText) findViewById(R.id.name);
        EditText password = (EditText) findViewById(R.id.password);
        Button button = (Button) findViewById(R.id.button1) ;

        final String email = email_id.getText().toString();
        final String fullname = name.getText().toString();
        final String mpassword = password.getText().toString();



        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

        StrictMode.setThreadPolicy(policy); 
button.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        //postData();
          HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://xyz/register.php");

            try {
                // Add your data
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                nameValuePairs.add(new BasicNameValuePair("email", email));
                nameValuePairs.add(new BasicNameValuePair("name", fullname));
                nameValuePairs.add(new BasicNameValuePair("password", mpassword));
               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
            }

    }
});

    }

以下は私のPHPコードです:

mysql_connect("server","user","password");
mysql_select_db("testms");
$email =   $_POST['email'];
$name =    $_POST['name'] ;
$password = $_POST['password'] ;

$query_add="INSERT INTO  users (`email` ,`name` ,`password` )
VALUES ('".$email."','".$name."', '".$password."')";
$query_exec=mysql_query($query_add) or die(mysql_error()); 
mysql_close();      

    }
4

4 に答える 4

1

以下のコードは機能するはずですが、テストされていません。作業中のプロジェクトからコピーしただけです。PHPセクションのMySQLインタラクションを数分でmysqli(正しいメソッド)に更新し、答えを編集します。今のところ、mysql_ *の使用は減価償却されていることを知っておいてください。データベースとの間のすべてのエントリを、実際にサニタイズする必要があります。とにかく、これに旋風を与えます:

Java:

@Override
public void onClick(View arg0) {
    // generate your params:
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("email", email));
    nameValuePairs.add(new BasicNameValuePair("name", fullname));
    nameValuePairs.add(new BasicNameValuePair("password", mpassword));

    // send them on their way
    try {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("http://xyz/register.php");
        httpPost.setEntity(new UrlEncodedFormEntity(nameValueParams));

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

PHP(減価償却済み/無害化):

<?php 

    $connection = mysql_connect("hostname", "username", "password")or die(mysql_error());
    $selection = mysql_select_db("database", $connection)or die(mysql_error());

    // You should echo these variables back to your app
    // so you know they are sending.
    // echo "Received: " . $email . " - " . $name . " - " . $password;
    $email = $_POST['email'];
    $name = $_POST['name'];
    $password = $_POST['password'];

    $insert = "INSERT INTO users('email','name','password') VALUES('$email','$name','$password')";
    $run = mysql_query($insert)or die(mysql_error());

?>

より良いPHPの例:

<?php   
    $mysqli_connection = new mysqli("hostname", "username", "password", "database");
    if ($mysqli_connection->connect_errno) {
        echo ("Connection Failure");
        exit();
    }

    $email = mysql_real_escape_string($_POST['email']);
    $name = mysql_real_escape_string($_POST['name']);
    $password = mysql_real_escape_string($_POST['password']);

    $insert = "INSERT INTO users('email','name','password') VALUES('$email','$name','$password')";
    if ($run = $mysql_connection->query($insert)) {
        echo 'Success';
        $run->free();
        $mysql_connection->close();
    } else {
        echo 'Error Inserting Content';
        exit();
    }
?>
于 2012-08-24T19:13:29.023 に答える
1

$ _REQUEST変数を試して、データベースに接続する前にデータを取得してください

$email =   $_REQUEST ['email'];  
$name =    $_REQUEST ['name'] ;  
$password = $_REQUEST ['password'] ;    

mysql_connect("server","user","password");  
mysql_select_db("testms"); 
$query_add="INSERT INTO  users (`email` ,`name` ,`password` )  VALUES ('".$email."','".$name."', '".$password."')";  $query_exec=mysql_query($query_add) or die(mysql_error());   
mysql_close();              
}

私は通常、デバッグの目的でいくつかのデータを送り返します。

echo "some test string";

アプリケーションで次のことを行います。知るために、サーバーからの応答を確認します。

int ResponseCode = response.getStatusLine();

HttpEntity resEntity = response.getEntity();
if( resEntity != null ){
    if( EntityUtils.toString(resEntity).equalsIgnoreCase("some test string") )
    {
        ...do something
    }
    resEntity.consumeContent();
}
于 2012-08-24T19:16:33.253 に答える
0

[...] INTOユーザー(email、、 )[...]YouTubenamepassword引用が間違っているようです。``ではなく''または""を使用してください

于 2012-08-24T18:02:04.480 に答える
0

ボタンクリックイベントで取得するテキストフィールドデータを移動してみてください。変数はfinalであり、アクティビティの作成後にすでにデータがあります。

于 2013-08-04T17:22:29.113 に答える