【问题标题】:android form to php, php file not sending fields inputted in android formandroid表单到php,php文件不发送以android表单输入的字段
【发布时间】:2014-07-27 06:57:51
【问题描述】:

我开始学习 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
        }
    }
}

此外,当表单在 android 中打开时,即使表单为空,启动时也会显示“ThankYou”消息,我猜邮件也没有发送。

我需要在用户按下表单上的提交按钮后出现感谢消息,并且在用户按下提交按钮后出现所有验证错误(未在给出的 php 代码中编码)。

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

【问题讨论】:

    标签: php android email


    【解决方案1】:

    你的代码有很多问题:

    首先,您不能在主线程上执行网络操作。这里已经说过数千次了,例如,你需要使用AsyncTask。 正如我所见,您关注this tutorial 提出您的发帖请求。在 AsyncTask 的 doInBackground 中复制完全相同的代码。

    其次,您将发布数据函数放在 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。我让代码正常工作,吐司也显示为编码。我修改了下面的 php 文件以接收我的电子邮件中的内容,如下所示,但我没有收到电子邮件。你能解释一下吗..&lt;?php // receive data from app's http request $data=$_POST["myHttpData"]; $subject="AsyncTask"; $to="ab5593@gmail.com"; $body="First Name: .$data."; if(mail($to,$subject,$body)) { echo "SENT"; } else { echo"TRY AGAIN"; } ?&gt;
    • 嘿阿米特,很高兴我能帮上忙。我建议您在 php 标签下的 SO 上发布一个新问题,以便在这方面更有经验的人可以帮助您!
    猜你喜欢
    • 2012-05-02
    • 1970-01-01
    • 2013-03-01
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多