آموزش PHP/MYSQL اندروید
آموزش PHP/MYSQL اندروید
در این آموزش قصد داریم توضیح دهیم که چطور می توانید PHP و MYSQL را در برنامه ی اندروید خود بکار بگیرید. زمانی که شما یک وب سرور دارید و تمایل دارید به داده ی آن روی برنامه ی اندروید خود دسترسی داشته باشید، این برنامه بسیار مفید خواهد بود.
MYSQL به عنوان یک پایگاه داده در وب سرور استفاده می شود و PHP برای گرفتن داده ز این پایگاه استفاده می شود. برنامه ی ما با پارامترهای ضروری صفحه ی PHP ارتباط برقرار خواهد کرد و PHP با پایگاه داده ی MYSQL تماس برقرار می کند و نتایج را به ما گزارش خواهد داد.
ایجاد پایگاه داده
پایگاه داده MYSQL می تواند به راحتی و با استفاده از این نسخه ی ساده ایجاد شود. وضعیت CREATEDATABASEپایگاه داده را ایجاد می کند.
<?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 و متد های پست
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 متصل باشد
- برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان PHPMYSQL تحت بسته ی com.example.phpmysql نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDK و Compile With در آخرین ورژن Android SDK هستند تا از سطوح بالاتر API استفاده کنید.
- فایل src/MainActivity.java را برای افزودن کد فعالیت تغییر دهید.
- فایل src/SiginActivity.java را برای افزودن کد PHPMYSQL ایجاد کنید.
- لی اوت XML فایل res/layout/activity_main.xml را تغییر داده و اگر لازم است مولفه ی GUI به آن اضافه کنید.
- فایل res/values/string.xml را تغییر دهید و مولفه های رشته ی لازم را اضافه کنید.
- AndroidManifest.xml را برای افزودن اجازه های لازم تغییر دهید.
- برنامه را اجرا کنید و یک دستگاه اجرایی اندروید انتخاب کرده و برنامه را روی آن نصب کنید و نتایج را بررسی کنید.
در اینجا محتوای src/com.example.phpmysql/MainActivity.java.می باشد.
package com.example.phpmysql;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
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);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
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<String,Void,String>{
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 را مشاهده می کنید.
<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"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<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>
اجازه بدهید برنامه ی PHPMYSQL شما را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی ازفایل های فعالیت پروژه را باز کرده و روی آیکن Run از تولبار کلیک کنید.
دستگاه موبایل خود را به عنوان یک گزینه انتخاب کرده و سپس آن را بررسی کنید که صفحه زیر را نمایش می دهد.
حالا نام کاربری و رمز عبور خود را تایپ کنید. من هر دو را با عنوان admin تایپ می کنم، که می توانید در تصویر زیر ببینید.
حال دکمه ی Get را فشار داده و چند ثانیه منتظر بمانید. پاسخ به شما نشان داده خواهد شد. در این مورد پاسخ ROLE می باشد که در مورد admin بودن نام کاربری و رمز عبور، آورده شده است. در تصویر زیر می توانید مشاهده کنید.
حال روی دکمه ی POST بزنید که همان نتیجه ظاهر خواهد شد، که در تصویر زیر می توانید ببینید.
- نوشته شده توسط سعید نوشادی
- بازدید: 5646