در این فصل قصد داریم توضیح دهیم که چطور می توانید PHP/MYSQL در اندروید خود جا دهید. زمانی که شما یک وب سرور دارید و تمایل دارید به داده ی آن روی برنامه ی اندروید خود دسترسی داشته باشید، این برنامه بسیار مفید خواهد بود.

MYSQL به عنوان یک پایگاه داده در وب سرور استفاده می شود و PHP برای گرفتن داده ز این پایگاه استفاده می شود. برنامه ی ما با پارامترهای ضروری صفحه ی PHP ارتباط برقرار خواهد کرد و PHP با پایگاه داده ی MYSQL تماس برقرار می کند و نتایج را به ما گزارش خواهد داد.

ایجاد پایگاه داده در اندروید

پایگاه داده MYSQL می تواند به راحتی و با استفاده از این نسخه ی ساده ایجاد شود. وضعیت CREATE DATABASE پایگاه داده را ایجاد می کند.

 

<?php
   $con=mysqli_connect("example.com","username","password");
   $sql="CREATE DATABASE my_db";
   if (mysqli_query($con,$sql)) {
      echo "Database my_db created successfully";
   }
?>

ایجاد جداول در اندروید

پس از ایجاد پایگاه داده، زمان ایجاد جدول ها در پایگاه داده می باشد. وضعیت CREATE DATABASE پایگاه داده را ایجاد می کند.

 

<?php
   $con=mysqli_connect("example.com","username","password","my_db");
   $sql="CREATE TABLE table1(Username CHAR(30),Password CHAR(30),Role CHAR(30))";
   if (mysqli_query($con,$sql)) {
      echo "Table have been created successfully";
   }
?>

وارد کردن مقادیر در جدول ها در اندروید

وقتی که پایگاه داده و جدول ها ایجاد شدند، زمان آن است که برخی داده ها را وارد جدول ها کنیم. حالت Insert Into پایگاه داده را ایجاد می کند.

 

<?php
   $con=mysqli_connect("example.com","username","password","my_db");
   $sql="INSERT INTO table1 (FirstName, LastName, Age) VALUES ('admin', 'admin','adminstrator')";
   if (mysqli_query($con,$sql)) {
      echo "Values have been inserted successfully";
   }
?>

PHP – GET و روش های پست در اندروید

PHP همچنین برای آوردن رکورد از پایگاه داده mysql پس از ایجاد شدنش، استفاده می شود. برای آوردن رکورد برخی اطلاعات، با توجه به اینکه چه رکوردی آورده می شود، باید به صفحه ی PHP منتقل شوند.

اولین روش برای انتقال اطلاعات استفاده از روش GET می باشد که دستور $_GET استفاده می شود. متغیرها به url منتقل می شوند و رکورد آورده می شود. ترکیب آن را می توانید در زیر ببینید.

 

<?php
   $con=mysqli_connect("example.com","username","password","database name");

   if (mysqli_connect_errno($con)) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
   }

   $username = $_GET['username'];
   $password = $_GET['password'];
   $result = mysqli_query($con,"SELECT Role FROM table1 where Username='$username' 
      and Password='$password'");
   $row = mysqli_fetch_array($result);
   $data = $row[0];

   if($data){
      echo $data;
   }
   mysqli_close($con);
?>

 

دومین راه استفاده از روش POST می باشد. تنها تغییر درنوشته ی بالا جایگزین کردن $_GET با $_POST می باشد. در روش POST متغیرها از طریق URL منتقل نمی شوند.

 اتصال MYSQL به اندروید

اتصال از طریق روش GET

دو راه برای اتصال به MYSQL از طریق صفحه ی PHP می باشد. اولین روش، روش GET نامیده می شود. ما از گروه های HttpGet و HttpClient برای اتصال استفاده می کنیم. ترکیب آنها در زیر ارائه شده است.

 

URL url = new URL(link);
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(link));

 

پس از آن لازم است که شما روش execute را از گروه HttpClient فرا بخوانید و آن را در یک آبجکت HttpResponse دریافت کنید. سپس لازم است جریان ها را باز کنید تا داده را دریافت کنید.

 

HttpResponse response = client.execute(request);
BufferedReader in = new BufferedReader
(new InputStreamReader(response.getEntity().getContent()));

 

استفاده از روش POST

در روش POST گروه های URLEncoder و URLConnection استفاده خواهند شد. Urlencoder اطلاعات متغیرهای در حال انتقال را کد گذاری می کند. ترکیب آن را در زیر می بینید.

 

URL url = new URL(link);
String data  = URLEncoder.encode("username", "UTF-8") 
+ "=" + URLEncoder.encode(username, "UTF-8");
data += "&" + URLEncoder.encode("password", "UTF-8") 
+ "=" + URLEncoder.encode(password, "UTF-8");
URLConnection conn = url.openConnection();

 

آخرین کاری که باید انجام دهید، نوشتن این داده روی لینک می باشد. پس از نوشتن لازم است جریان را برای دریافت داده های پاسخ باز کنید.

 

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
wr.write( data ); 
BufferedReader reader = new BufferedReader(new 
InputStreamReader(conn.getInputStream()));

 

مثال

مثال زیر یک مثال کامل می باشد از چگونگی اتصال برنامه ی اندروید با پایگاه داده ی MYSQL از طریق صفحه ی PHP. این مثال یک برنامه ی پایه ایجاد می کند که به شما اجازه می دهد تا با استفاده از روش GET و POST وارد شوید.

بخش PHP/MYSQL در اندروید

در این مثال یک پایگاه داده با نام temp در 000webhost.com ایجاد شده است. در این پایگاه داده جدولی با نام table1 ایجاد شده است. این جدول دارای سه فیلد می باشد، نام کاربری، رمز عبور، نقش (Username, Password, Role) و جدول دارای تنها یک رکورد می باشد که عبارت است از (“admin”,”admin”,”adminstrator”).

صفحه ی php ارائه شده در زیر پارامتر ها با روش post می گیرد.

 

<?php
   $con=mysqli_connect("mysql10.000webhost.com","username","password","db_name");

   if (mysqli_connect_errno($con)) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
   }
  
   $username = $_POST['username'];
   $password = $_POST['password'];
   $result = mysqli_query($con,"SELECT Role FROM table1 where 
   Username='$username' and Password='$password'");
   $row = mysqli_fetch_array($result);
   $data = $row[0];

   if($data){
      echo $data;
   }
  
   mysqli_close($con);
?>

بخش اندروید

این مثال را باید روی دستگاهی اجرا کنید که اینترنت Wi-Fi متصل باشد.

مرحله  توضیحات
1 برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان PHPMYSQL تحت بسته ی com.example.phpmysql نام گذاری کنید.
2 فایل src/MainActivity.java را برای افزودن کد فعالیت تغییر دهید.
3 فایل src/SiginActivity.java را برای افزودن کد PHPMYSQL ایجاد کنید.
4 لی اوت XML فایل res/layout/activity_main.xml را تغییر داده و اگر لازم است مولفه ی GUI به آن اضافه کنید.
5 فایل res/values/string.xml را تغییر دهید و مولفه های رشته ی لازم را اضافه کنید.
6 AndroidManifest.xml را برای افزودن اجازه های لازم تغییر دهید.
7 برنامه را اجرا کنید و یک دستگاه اجرایی اندروید انتخاب کرده و برنامه را روی آن نصب کنید و نتایج را بررسی کنید.

در اینجا محتوای src/com.example.phpmysql/MainActivity.java می باشد.

 

package com.example.phpmysql;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

   private EditText usernameField,passwordField;
   private TextView status,role,method;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      usernameField = (EditText)findViewById(R.id.editText1);
      passwordField = (EditText)findViewById(R.id.editText2);

      status = (TextView)findViewById(R.id.textView6);
      role = (TextView)findViewById(R.id.textView7);
      method = (TextView)findViewById(R.id.textView9);
   }



   public void login(View view){
      String username = usernameField.getText().toString();
      String password = passwordField.getText().toString();
      method.setText("Get Method");
      new SigninActivity(this,status,role,0).execute(username,password);

   }

   public void loginPost(View view){
      String username = usernameField.getText().toString();
      String password = passwordField.getText().toString();
      method.setText("Post Method");
      new SigninActivity(this,status,role,1).execute(username,password);
   }
}

 

در اینجا محتوای src/com.example.phpmysql/SigninActivity.java می باشد.

 

package com.example.phpmysql;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.content.Context;
import android.os.AsyncTask;
import android.widget.TextView;

public class SigninActivity  extends AsyncTask{
   private TextView statusField,roleField;
   private Context context;
   private int byGetOrPost = 0;

   //flag 0 means get and 1 means post.(By default it is get.)
   public SigninActivity(Context context,TextView statusField,TextView roleField,int flag) {
      this.context = context;
      this.statusField = statusField;
      this.roleField = roleField;
      byGetOrPost = flag;
   }

   protected void onPreExecute(){
   }

   @Override
   protected String doInBackground(String... arg0) {
      if(byGetOrPost == 0){ //means by Get Method

         try{
            String username = (String)arg0[0];
            String password = (String)arg0[1];
            String link = "http://myphpmysqlweb.hostei.com/login.php?username="+username+"& password="+password;

            URL url = new URL(link);
            HttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet();
            request.setURI(new URI(link));
            HttpResponse response = client.execute(request);
            BufferedReader in = new BufferedReader(new 
               InputStreamReader(response.getEntity().getContent()));

            StringBuffer sb = new StringBuffer("");
            String line="";

            while ((line = in.readLine()) != null) {
               sb.append(line);
               break;
            }
        
            in.close();
            return sb.toString();
         } catch(Exception e){
            return new String("Exception: " + e.getMessage());
         }
      } else{
         try{
            String username = (String)arg0[0];
            String password = (String)arg0[1];

            String link="http://myphpmysqlweb.hostei.com/loginpost.php";
            String data  = URLEncoder.encode("username", "UTF-8") + "=" +
               URLEncoder.encode(username, "UTF-8");
            data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + 
               URLEncoder.encode(password, "UTF-8");

            URL url = new URL(link);
            URLConnection conn = url.openConnection();

            conn.setDoOutput(true);
            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());

            wr.write( data );
            wr.flush();

            BufferedReader reader = new BufferedReader(new
               InputStreamReader(conn.getInputStream()));

            StringBuilder sb = new StringBuilder();
            String line = null;

            // Read Server Response
            while((line = reader.readLine()) != null) {
               sb.append(line);
               break;
            }
        
            return sb.toString();
         } catch(Exception e){
            return new String("Exception: " + e.getMessage());
         }
      }
   }

   @Override
   protected void onPostExecute(String result){
      this.statusField.setText("Login Successful");
      this.roleField.setText(result);
   }
}

 

در ادامه محتوای activity_main.xml را مشاهده می کنید.

 

<?xml version="1.0" encoding="utf-8"?>
<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:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context=".MainActivity" >

   <EditText
      android:id="@+id/editText2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignRight="@+id/editText1"
      android:layout_below="@+id/editText1"
      android:layout_marginTop="25dp"
      android:ems="10"
      android:inputType="textPassword" >
   </EditText>

   <EditText
      android:id="@+id/editText1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_alignParentTop="true"
      android:layout_marginTop="44dp"
      android:ems="10" >

   <requestFocus android:layout_width="wrap_content" />

   </EditText>

   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignBottom="@+id/editText1"
      android:layout_alignParentLeft="true"
      android:text="@string/Username" />

   <TextView
      android:id="@+id/textView3"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:text="@string/App"
      android:textAppearance="?android:attr/textAppearanceLarge" />

   <TextView
      android:id="@+id/textView7"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignBottom="@+id/textView5"
      android:layout_alignLeft="@+id/textView6"
      android:text="@string/Role"
      android:textAppearance="?android:attr/textAppearanceMedium"
      android:textSize="10sp" />

   <TextView
      android:id="@+id/textView5"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_below="@+id/textView6"
      android:layout_marginTop="27dp"
      android:layout_toLeftOf="@+id/editText1"
      android:text="@string/LoginRole" />
   <TextView
      android:id="@+id/textView8"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_above="@+id/textView6"
      android:layout_alignLeft="@+id/textView5"
      android:layout_marginBottom="27dp"
      android:text="@string/method" />

   <TextView
      android:id="@+id/textView4"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignLeft="@+id/textView8"
      android:layout_below="@+id/button1"
      android:layout_marginTop="86dp"
      android:text="@string/LoginStatus" />


   <TextView
      android:id="@+id/textView6"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignTop="@+id/textView4"
      android:layout_centerHorizontal="true"
      android:text="@string/Status"
      android:textAppearance="?android:attr/textAppearanceMedium"
      android:textSize="10sp" />

   <TextView
      android:id="@+id/textView9"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignBottom="@+id/textView8"
      android:layout_alignLeft="@+id/textView6"
      android:text="@string/Choose"
      android:textAppearance="?android:attr/textAppearanceMedium"
      android:textSize="10sp" />

   <Button
      android:id="@+id/button2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerVertical="true"
      android:layout_toRightOf="@+id/textView6"
      android:onClick="loginPost"
      android:text="@string/LoginPost" />

   <Button
      android:id="@+id/button1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignBaseline="@+id/button2"
      android:layout_alignBottom="@+id/button2"
      android:layout_alignLeft="@+id/textView2"
      android:onClick="login"
      android:text="@string/LoginGet" />

   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignBaseline="@+id/editText2"
      android:layout_alignBottom="@+id/editText2"
      android:layout_alignParentLeft="true"
      android:text="@string/Password" />

</RelativeLayout>

 

در اینجا محتوای Strings.xml می باشد.

 

<?xml version="1.0" encoding="utf-8"?>
<resources>

   <string name="app_name">PHPMYSQL</string>
   <string name="action_settings">Settings</string>
   <string name="hello_world">Hello world!</string>
   <string name="Username">Username</string>
   <string name="Password">Password</string>
   <string name="LoginGet">Login - Get</string>
   <string name="LoginPost">Login - Post</string>
   <string name="App">Login Application</string>
   <string name="LoginStatus">Login Status</string>
   <string name="LoginRole">Login Role</string>
   <string name="Status">Not login</string>
   <string name="Role">Not assigned</string>
   <string name="method">Login Method</string>
   <string name="Choose">Choose Method</string>
  
</resources>

 

در اینجا محتوای AndroidManifest.xml می باشد.

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.phpmysql" >

      <uses-permission android:name="android.permission.INTERNET"/>
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.phpmysql.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

 

اجازه بدهید برنامه ی PHP/MYSQL در اندروید شما را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی ازفایل های فعالیت پروژه را باز کرده و روی آیکن RunEclipse Run Icon از تولبار کلیک کنید. قبل از شروع برنامه ی شما، Eclipse پنجره ی زیر را برای انتخاب گزینه ی محل اجرای برنامه ی اندرویدتان، نمایش خواهد داد.

Anroid PHP/MySQL Tutorial

دستگاه موبایل خود را به عنوان یک گزینه انتخاب کرده و سپس آن را چک کنید که صفحه زیر را نمایش می دهد.

Anroid PHP/MySQL Tutorial

حالا نام کاربری و رمز عبور خود را تایپ کنید. من هر دو را با عنوان admin تایپ می کنم، که می توانید در تصویر زیر ببینید.

Anroid PHP/MySQL Tutorial

اکنون دکمه ی Get را فشار داده و چند ثانیه منتظر بمانید. پاسخ دانلود شده و به شما نشان داده خواهد شد. در این مورد پاسخ ROLE می باشد که در مورد admin بودن نام کاربری و رمز عبور، آورده شده است. در تصویر زیر می توانید ببینید.

Anroid PHP/MySQL Tutorial

اکنون روی دکمه ی Post فشار دهید که همان نتیجه ظاهر خواهد شد، که در تصویر زیر می توانید ببینید.

Anroid PHP/MySQL Tutorial