android表单到php,php文件不发送android表单中输入的字段

android表单到php,php文件不发送android表单中输入的字段,php,android,email,Php,Android,Email,我开始学习android编程,我对php完全是新手 在发布这个问题之前,我已经尝试了所有与之相关的答案,但没有一个对我有效,所以我决定发布一个新问题 我有一个应用程序,用户在其中输入一个表单,表单内容通过电子邮件发送给我 我成功接收电子邮件,但字符串仅在php中定义。我还希望用户的输入也能发送到我的电子邮件中 请检查下面的php代码和java代码,并提出合适的建议 收到的电子邮件: “名字:姓氏:您的电子邮件:您的手机:” 没有android表单中的用户输入:( email2.php <?

我开始学习android编程,我对php完全是新手

在发布这个问题之前,我已经尝试了所有与之相关的答案,但没有一个对我有效,所以我决定发布一个新问题

我有一个应用程序,用户在其中输入一个表单,表单内容通过电子邮件发送给我

我成功接收电子邮件,但字符串仅在php中定义。我还希望用户的输入也能发送到我的电子邮件中

请检查下面的php代码和java代码,并提出合适的建议

收到的电子邮件:

“名字:姓氏:您的电子邮件:您的手机:”

没有android表单中的用户输入:(

email2.php

<?php

$ed1=$_POST['fname'];
$ed2=$_POST['lname'];
$ed3=$_POST['email'];
$ed4=$_POST['phone'];
$to="ab5593@gmail.com";
$subject="android_email";
$from="$ed3";
$body="First Name:" .$ed1."\n Last Name:" .$ed2. "\n Your Email:".$ed3."\n Your Phone:"     .$ed4."\n";
$header="From :".$from."\n";

if(mail($to,$subject,$body,$header))
{
    echo "Thank you";
}
else
{
    echo"Try Again";
}

?>

FormActivity.java

package com.example.getpost;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
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 org.apache.http.util.ByteArrayBuffer;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class FormActivity extends Activity {
    TextView txtvw;
    String text;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_form);

        txtvw = (TextView)findViewById(R.id.textView1);
        text = "";

        postData();
    }

    public void postData(){  
        // Create a new HttpClient and Post Header
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://www.amit.comeze.com/email2.php");  
        EditText ed1 = (EditText)findViewById(R.id.editText1);
        EditText ed2 = (EditText)findViewById(R.id.editText2);
        EditText ed3 = (EditText)findViewById(R.id.editText3);
        EditText ed4 = (EditText)findViewById(R.id.editText4);

        try {
            // Add your data
            List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("fname", ed1.getText().toString()));
            nameValuePairs.add(new BasicNameValuePair("lname", ed2.getText().toString()));
            nameValuePairs.add(new BasicNameValuePair("email", ed3.getText().toString()));
            nameValuePairs.add(new BasicNameValuePair("phone", ed4.getText().toString()));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));  

            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);
            InputStream is = response.getEntity().getContent();
            BufferedInputStream bis = new BufferedInputStream(is);
            ByteArrayBuffer baf = new ByteArrayBuffer(20);

            int current = 0;

            while((current = bis.read()) != -1){
                baf.append((byte)current);
            }  

            /* Convert the Bytes read to a String. */
            text = new String(baf.toByteArray());
            txtvw.setText(text);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
        } catch (IOException e) {
            // TODO Auto-generated catch block
        }
    }
}
package com.example.getpost;
导入java.io.BufferedInputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.http.HttpResponse;
导入org.apache.http.NameValuePair;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.entity.UrlEncodedFormEntity;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.message.BasicNameValuePair;
导入org.apache.http.util.ByteArrayBuffer;
导入android.app.Activity;
导入android.os.Bundle;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.TextView;
公共课堂形式活动扩展了课堂活动{
TextView-txtvw;
字符串文本;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_表单);
txtvw=(TextView)findViewById(R.id.textView1);
text=“”;
postData();
}
public void postData(){
//创建一个新的HttpClient和Post头
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://www.amit.comeze.com/email2.php");  
EditText ed1=(EditText)findViewById(R.id.editText1);
EditText ed2=(EditText)findViewById(R.id.editText2);
EditText ed3=(EditText)findViewById(R.id.editText3);
EditText ed4=(EditText)findViewById(R.id.editText4);
试一试{
//添加您的数据
List nameValuePairs=新的ArrayList();
添加(新的BasicNameValuePair(“fname”,ed1.getText().toString());
添加(新的BasicNameValuePair(“lname”,ed2.getText().toString());
添加(新的BasicNameValuePair(“email”,ed3.getText().toString());
添加(新的BasicNameValuePair(“电话”,ed4.getText().toString());
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
HttpResponse response=httpclient.execute(httppost);
InputStream is=response.getEntity().getContent();
BufferedInputStream bis=新的BufferedInputStream(is);
ByteArrayBuffer baf=新ByteArrayBuffer(20);
int电流=0;
而((当前=bis.read())!=-1){
baf.append((字节)当前值);
}  
/*将读取的字节转换为字符串*/
text=新字符串(baf.toByteArray());
txtvw.setText(文本);
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
}捕获(IOE异常){
//TODO自动生成的捕捉块
}
}
}
另外,当表单在android中打开时,即使表单为空,也会在启动时显示“谢谢”消息,我猜邮件也没有发送

我需要在用户按下表单上的submit按钮后显示感谢消息,并在用户按下submit按钮后显示所有验证错误(未在给定的php代码中编码)

期待您的宝贵建议,这些建议将对我大有帮助,我们将不胜感激。

注意。

您的代码中有很多问题:

首先,你不能在主线程上做网络工作。这里已经说过几千次了,要做到这一点,你需要使用例如。 正如我所看到的,您遵循了发布请求。在异步任务的
doInBackground
中复制完全相同的代码

其次,在用户可以与应用程序交互之前,您正在将post data函数放在onCreate上,这是一个在活动启动时调用的函数,这就是它向php代码发送空表单的原因。要解决此问题,您应该只在onCreate上初始化视图

public void postData(){   
EditText ed1 = (EditText)findViewById(R.id.editText1);
EditText ed2 = (EditText)findViewById(R.id.editText2);
EditText ed3 = (EditText)findViewById(R.id.editText3);
EditText ed4 = (EditText)findViewById(R.id.editText4);
}
还可以放置一个按钮,通过调用asyncTask的execute方法发送所有这些信息(请参阅上面的链接以了解asyncTask的工作原理)

我想在那之后你就可以让你的“应用程序”工作了


希望能有所帮助。

AsyncTask真的很省时……而且DoInBackground()是必须在代码中实现的。谢谢你让我注意到它。我从这里遵循了Asynctask教程-mobiledevtuts.com/android/android-http-with-Asynctask-example。我正确地执行了代码,toast也显示为编码。我修改了php文件,如下所示,以接收电子邮件中的内容,但我没有收到电子邮件.你能解释一下吗..
嘿,阿米特,很高兴我能帮上忙。我建议你在这里的php标签下发布一个新问题,这样在这方面更有经验的人可以帮助你!