ساخت پروژه تماس با ما در آندروید + PHP
سوال : سلام ،استاد میتونید یه آموزش برای ارسال اطلاعات از برنامه آندروید به سرور رو برامون قرار بدید !
میخوام یه فرم تماس با ما درست کنم تا کاربرای اپلیکیشن بتونن نظراتشون رو برای من ارسال کنن و این نظرات در دیتابیس mysql ذخیره بشه .
جواب : پروژه ساده و کاربردی رو برای شما کاربران عزیز اماده کرده ام . در مثال پایین یک فرم تماس با ما با ۴ EditTextساخته شده است .
فایل main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="15dp" tools:context="co.tooba.contactus.Main" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="17dp" android:layout_marginTop="20dp" android:text="نام" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginTop="20dp" android:text="ایمیل" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/TextView01" android:layout_below="@+id/TextView01" android:layout_marginTop="20dp" android:text="شماره تماس" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView android:id="@+id/TextView03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/TextView02" android:layout_below="@+id/TextView02" android:layout_marginTop="20dp" android:text="پیام" android:textAppearance="?android:attr/textAppearanceSmall" /> <EditText android:id="@+id/editName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/TextView01" android:layout_toLeftOf="@+id/TextView02" android:ems="10" > <requestFocus /> </EditText> <EditText android:id="@+id/editEmail" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignBottom="@+id/TextView01" android:layout_alignLeft="@+id/editName" android:layout_toLeftOf="@+id/TextView02" android:ems="10" /> <EditText android:id="@+id/editPhone" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignBottom="@+id/TextView02" android:layout_alignRight="@+id/editEmail" android:ems="10" /> <EditText android:id="@+id/editMessage" android:layout_width="wrap_content" android:layout_height="150dp" android:layout_alignLeft="@+id/editPhone" android:layout_alignRight="@+id/TextView03" android:layout_below="@+id/TextView03" android:layout_marginTop="18dp" android:ems="10" android:gravity="top" android:inputType="textMultiLine" /> <Button android:id="@+id/btnSend" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editMessage" android:layout_below="@+id/editMessage" android:layout_centerHorizontal="true" android:layout_marginTop="14dp" android:text="ارسال" /> </RelativeLayout>
فایل Main.jav :
package co.tooba.contactus; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class Main extends Activity { private EditText name ,email ,phone ,message ; private Button send; private String url ; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); send = (Button)findViewById(R.id.btnSend); name = (EditText)findViewById(R.id.editName); email = (EditText)findViewById(R.id.editEmail); phone = (EditText)findViewById(R.id.editPhone); message = (EditText)findViewById(R.id.editMessage); send.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { url = "http://192.168.0.152/contact_us.php?name="+name.getText()+"&email="+email.getText()+"&message="+message.getText()+"&phone="+phone.getText(); Server db = new Server(Main.this , url); db.execute(); } }); } }
فایل Server.jav :
package co.tooba.contactus; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.widget.Toast; public class Server extends AsyncTask<String, String, String> { private ProgressDialog dialog ; private Context myContext; private InputStream data = null; private String url ; private String output = ""; public Server (Context context , String Url){ myContext = context; url = Url; } @Override protected void onPreExecute() { super.onPreExecute(); dialog = new ProgressDialog(myContext); dialog.setTitle("ارتباط با سرو"); dialog.setMessage("در حال ارسال اطلاعات ..."); dialog.setIndeterminate(false); dialog.setCancelable(true); dialog.show(); } @Override protected String doInBackground(String... arg0) { try { DefaultHttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); HttpResponse response = httpClient.execute(httpGet); HttpEntity entity = response.getEntity(); data = entity.getContent(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader( new InputStreamReader(data , "UTF-8"), 8); StringBuilder sb = new StringBuilder(); String row = null; while ((row = reader.readLine()) != null) { sb.append(row + "\n"); } data.close(); output = sb.toString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return output; } @Override protected void onPostExecute(String output) { dialog.dismiss(); try { Toast.makeText(myContext, output, Toast.LENGTH_LONG).show(); } catch (Exception e) { e.printStackTrace(); } } }
فایل PHP :
<?php $con = mysql_connect('localhost','root',''); mysql_select_db('contact_us',$con); mysql_query("SET NAMES 'utf8'"); if(! empty($_GET['name'])){ if(!filter_var($_GET['email'], FILTER_VALIDATE_EMAIL)) echo "ایمیل را به صورت صحیح وارد کنید."; elseif(empty($_GET['message'])) echo "فیلد پیام خالی می باشد."; else{ $name = $_GET["name"]; $email = $_GET["email"]; $phone = (isset($_GET["phone"])) ? $_GET["phone"] : ""; $message = $_GET["message"]; $result = mysql_query("INSERT INTO messages(name, email, phone, message) VALUES ('$name' , '$email' , '$phone' , '$message')"); if($result) echo "پیام شما با موفقیت ارسال شد."; } }else{ echo "فیلدها را به دقت تکمیل کنید."; } ?>
سعی شده تا به صورت کاملا ساده و بدون هیچ کد اضافه ای این پروژه رو براتون آماده کنیم . لذا حواستون باشه که در قسمت امنیت php کاری انجام نشده است و این پروژه جهت آموزش می باشد .
-در لاین ۳۱ فایل Main.java آدرس قرارگیری فایل PHP را باید مشخص کنید تا اطلاعات و دریافت اطلاعات به صورت صحیح انجام شود .
– ارسال اطلاعات از طریق HttpGet به فایل PHP ارسال میشود و پیام مورد نظر از طریق Toast در اکتیویتی نمایش داده میشود .
موفق باشید
-
هنر - 30 سپتامبر 2015
داداش شرمنده این کتابخانه هم لازم داره؟
من تو اکلیپس وارد کردم خطا میده البته فقط استایل هاشو ویرایششون کردم درست شد غیر از values-v14وقتی تبدیلش میکنم به
Theme.AppCompat.Light.DarkActionBar
بازم درست نمیشه -
ali - 30 سپتامبر 2015
سلام
کتابخونه appcompat_v7 رو براتون اپلود کردم. این کتابخانه را در Eclips ایمپورت کنید ،انشالله مشکلتون حل میشه …
http://blog.toobaweb.com/wp-content/uploads/2015/09/appcompat_v7.zip -
هنر - 30 سپتامبر 2015
مشکلم حل شد البته قبل اینکه راهنمایی کنید
هیچ مشکلی ندارم الان به جز یکی
هم روی هاست پولی تست کردم هم هم رایگان حتا افلاین تو خود محیط ویندوز
دیتابیس و ارتباط و … همه چی اوکی ولی موقع ارسال هیچی به جدول ارسال نمیشه
بعد کلیک روی دکمه ی ارسال یه toast خالی نمایش داده میشه
( من تخصصم تحت وب اینو گفتم بدونید در رابطه با php و دیتا مشکلی نداره این برنامه )
سمت اندروید نمیدونم مشکل از کجاست! -
ali - 1 اکتبر 2015
نکاتی که باید چک بشه :
۱ – لاین ۳۱ فایل Main.java -> آدرس سرور به درستی وارد شده باشه .
۲ – در فایل AndroidManifest.xml دسترسی INTERNET رو گرفته باشید .
۳ – دیتابیس رو دانلود و ایمپورت کنید (یوزر نیم + پسورد + نام دیتابیس رو هم به صورت صحیح وارد کنید).
در صورتی که مشکلتون با رعایت این سه نکته حل نشد . ارور های قسمت logcat رو ارسال کنید تا بررسی کنم … -
علی رسالت - 1 اکتبر 2015
هر سه مورد اول درست کار میکنن
در مورد لاگ هم لاگ w هستش
ولی به خاطر یه سری چیزا نمیتونم لاگ و بدم خدمتتون حالا اشکال نداره
ببخشید علی اقا منبع دیگه ای سراغ دارید با همین موضوع ارتباط با ما ارسال نظر هر چند همشون یکین
هر چقدر ساده تر واسه کار من بهتر
هر چند مال شما مشکلی نداره مشکل از منه که زیاد تو اندروید وارد نیستم -
مجی - 6 دسامبر 2015
سلام…خسته نباشید
ممنون از مطالب و آموزشهای کلیدی ک گذاشتی.
من میخام به ایمیل خودم پیام ارسال بشه چون سایت ندارم!!!
کدهاش چی هست ???