Tekrardan merhaba arkadaşlar. Vatani görevimi yerine getirdiğim için uzunca bir süre ders paylaşamadım. Bundan sora daha sık ders paylaşımlarına devam edeceğim.Bugünkü dersimiz bir önceki dersimizin devamı niteliğindedir ve diğer bu dersteki örnek kodu geliştirmeye devam ettim.Geçen derste sunucudan üye kontrolü yaparak login olmayı yapmıştık. Login olduğumuzda ise bilgilerimiz SQLİTE veritabanına kaydedilip her seferinde tekrar login olmakla uğraşmıyorduk.
Bu dersimizde ise kayıt olmayı yapacağız. Login ekranında kayıt ol butonuna tıklayınca yeni Kayıt Ol activity si açılacak ve gerekli bilgiler doldurulduktan sonra sunucuya gönderilecektir. Sunucuda kontroller yapıldıktan sonra MYSQL veritabanına keydedilecektir ve kayıt başarılı ise uygulamada otomatik olarak login işlemi gerçekleşecektir.
Arkadaşlar sözü fazla uzatmadan kod kısmına geçelim.Ancak şunu belirtmeliyim ki bu dersi iyi anlamanız için muhakkak geçen dersi incelemeniz gerekir.
Gerekli olan açıklamaları kod üzerinde yapmaya çalıştım…
Login classı inceleyelim.
package com.mobilhanem.loginkontrol; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONException; import org.json.JSONObject; import android.os.AsyncTask; import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; public class LoginPage extends Activity { Button giris,kayit_ol; EditText mail_input,sifre_input; String mail,sifre,sonuc,tarih; String hata_mesaji=""; String URL_POST= "http://www.mobilhanem.com/test/login.php"; Boolean hata = false; PostClass post = new PostClass(); JSONObject cevap=null; public String donus_hata_mesaji; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.loginpage); mail_input = (EditText) findViewById(R.id.editText1); sifre_input = (EditText) findViewById(R.id.editText2); giris = (Button) findViewById(R.id.button1); kayit_ol= (Button) findViewById(R.id.button2); giris.setOnClickListener(new View.OnClickListener() {//giriş butonu tıklandığında public void onClick(View v) { mail = mail_input.getText().toString();//edittext değerini alıyoruz sifre = sifre_input.getText().toString();//edittext değerini alıyoruz //Tarih bilgisini almak için Calendar c = Calendar.getInstance(); SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy"); tarih = format.format(c.getTime()); //Edittextlerden aldığımız mail ve şifreleri kontrol ediyoruz if(mail.matches("")){ hata_mesaji += "Üye No yada E-Mail Alanı Boş Olamaz\n"; hata = true; } if(!Fonksiyonlar.isEmailValid(mail)){//Mail format kontrol hata_mesaji += "Yanlış e-mail formatı\n"; hata=true; } int sifre_karakter = sifre.length(); if(sifre_karakter<6){ hata_mesaji += "Şifre 6 Karakterden Az Olamaz\n"; hata=true; } if(hata){//hata varsa AlertDialog ile kullanıcıyı uyarıyoruz. AlertDialog alertDialog = new AlertDialog.Builder(LoginPage.this).create(); alertDialog.setTitle("Hata"); alertDialog.setMessage(hata_mesaji); alertDialog.setCancelable(false); alertDialog.setButton(RESULT_OK,"Tamam", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { sifre_input.setText(""); hata_mesaji = ""; hata = false; } }); alertDialog.show(); }else{//Hata yoksa Asynctask classı çağırıyoruz.İşlemlere orda devam ediyoruz new GirisKontrol().execute(); } } }); kayit_ol.setOnClickListener(new View.OnClickListener() {//Kayıt Ol butonu tıklanınca public void onClick(View v) {//Kayit Activiysini çağırıyoruz. // TODO Auto-generated method stub Intent intent = new Intent(getApplicationContext(), Kayit.class); startActivity(intent); } }); } class GirisKontrol extends AsyncTask<Void, Void, Void> { private String sonucmesaji; ProgressDialog pDialog; protected void onPreExecute() { // progress dialog pDialog = new ProgressDialog(LoginPage.this); pDialog.setMessage("Giriş Yapılıyor..."); pDialog.setIndeterminate(true); pDialog.setCancelable(false); pDialog.show(); } protected Void doInBackground(Void... unused) { // Building Parameters String sifre_sha1 = Fonksiyonlar.sha1(sifre); // sha1 şifreleme fonksiyonunu kullandık.Çünkü databasede sha1 ile saklıyoruz List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("mail", mail)); params.add(new BasicNameValuePair("sifre", sifre_sha1)); String json = post.httpPost(URL_POST,"POST",params,20000); Log.d("Gelen Json",""+json);//Gelen veriyi logluyoruz.Log Catten kontrol edebiliriz try { cevap = new JSONObject(json); sonucmesaji = cevap.getString("sonucmesaji"); if (cevap.getString("sonuc") != null) { sonuc = cevap.getString("sonuc"); if(Integer.parseInt(sonuc) == 1){ //Eğer giriş başarılı ise Database db = new Database(getApplicationContext()); db.resetTables(); db.kullanıcıEkle(mail, sifre, tarih); //kullanıcıyı ekliyoruz.Ve Main activitye yönlendiriyoruz. //Sonuc başarılı ise main activitye yönlendirdk. Intent anasayfa = new Intent(getApplicationContext(),MainActivity.class ); startActivity(anasayfa); finish(); } } } catch (JSONException e) { e.printStackTrace(); } return null; } // Sonuç başarılı ise bu kod çalışmıcak çünkü Main activitye yönlenmiş durumda protected void onPostExecute(Void unused) { // closing progress dialog pDialog.dismiss(); // updating UI from Background Thread runOnUiThread(new Runnable() { public void run() { if(Integer.parseInt(sonuc) == 0){// Sonuç başarılı değil ise AlertDialog alertDialog = new AlertDialog.Builder(LoginPage.this).create(); alertDialog.setTitle("Hata"); alertDialog.setMessage(sonucmesaji);//Sonuc mesajıyla bilgilendiriyoruz. alertDialog.setCancelable(false); alertDialog.setButton(RESULT_OK,"Tamam", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { sifre_input.setText(""); } }); alertDialog.show(); } } }); } } }
Burda aldığımız verileri sunucuya gönderiyoruz ve sunucudaki databaseden PHP yardımıyla kontrol ediyoruz. Eğer veriler eşleşiyorsa login işlemini gerçekleştiriyoruz.
Şimdi Kayit classını inceleyelim.
package com.mobilhanem.loginkontrol; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; public class Kayit extends Activity{ Button kayit; EditText isim_edit,mail_edit,sifre_edit,sifre_tekrar_edit,telefon_edit; String isim,mail,sifre,sifre_tekrar,hata_mesaji,telefon=""; boolean hata = false; PostClass post = new PostClass(); String URL_POST= "http://www.mobilhanem.com/test/kayit.php"; JSONObject cevap=null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.kayit); kayit = (Button)findViewById(R.id.kayit); isim_edit = (EditText)findViewById(R.id.editText1); mail_edit = (EditText)findViewById(R.id.editText2); sifre_edit = (EditText)findViewById(R.id.editText3); sifre_tekrar_edit = (EditText)findViewById(R.id.editText4); telefon_edit = (EditText)findViewById(R.id.editText5); kayit.setOnClickListener(new View.OnClickListener() {//Kayıt ol butonuna tıklanınca @Override public void onClick(View v) { // TODO Auto-generated method stub //Edittextlerden bilgileri aldık isim = isim_edit.getText().toString(); mail = mail_edit.getText().toString(); sifre = sifre_edit.getText().toString(); sifre_tekrar = sifre_tekrar_edit.getText().toString(); telefon = telefon_edit.getText().toString(); int sifre_karakter = sifre.length(); if(isim.matches("") || mail.matches("") || sifre.matches("") || sifre_tekrar.matches("")){// boş veri var mı kontrolü hata = true; hata_mesaji = "Gerekli Alanları Doldurunuz!!!"; }else if(!sifre.matches(sifre_tekrar)){//şifreler uyuşuyor mu kontrolü hata = true; hata_mesaji = "Şifreler Farklı!!!"; }else if(sifre_karakter<6){//şifre karakter sayısı kontrolü hata_mesaji += "Şifre 6 Karakterden Az Olamaz!!!"; hata=true; }else if(!Fonksiyonlar.isEmailValid(mail)){//Mail format kontrol hata_mesaji += "Yanlış e-mail formatı!!!"; hata=true; } if(hata){//hata varsa hatayı alertDialog ile gösteriyoruz AlertDialog alertDialog = new AlertDialog.Builder(Kayit.this).create(); alertDialog.setTitle("Hata"); alertDialog.setMessage(hata_mesaji); alertDialog.setCancelable(false); alertDialog.setButton(RESULT_OK,"Tamam", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { sifre_edit.setText(""); sifre_tekrar_edit.setText(""); hata_mesaji = ""; hata = false; } }); alertDialog.show(); }else{//hata yoksa new KayitOl().execute();//KayıtOl asynctask classı cagırıyoruz } } }); } class KayitOl extends AsyncTask<Void, Void, Void> { private String sonucmesaji,sonuc,tarih; ProgressDialog pDialog; protected void onPreExecute() { // progress dialog pDialog = new ProgressDialog(Kayit.this); pDialog.setMessage("Kayıt İşleminiz Gerçekleştiriliyor..."); pDialog.setIndeterminate(true); pDialog.setCancelable(false); pDialog.show(); } protected Void doInBackground(Void... unused) { sifre = Fonksiyonlar.sha1(sifre);//şifreyi sha1 ile şifreledik //Parametreleri ekliyoruz List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("isim", isim)); params.add(new BasicNameValuePair("mail", mail)); params.add(new BasicNameValuePair("sifre",sifre )); params.add(new BasicNameValuePair("telefon",telefon)); //Tarih bilgisini almak için Calendar c = Calendar.getInstance(); SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy"); tarih = format.format(c.getTime()); String json = post.httpPost(URL_POST,"POST",params,20000); Log.d("Gelen Json",""+json);//Gelen veriyi logluyoruz.Log Catten kontrol edebiliriz try { cevap = new JSONObject(json); sonucmesaji = cevap.getString("sonucmesaji"); if (cevap.getString("sonuc") != null) { sonuc = cevap.getString("sonuc"); if(Integer.parseInt(sonuc) == 1){ //Eğer kayıt başarılı ise //Sqlite database baglanıp gerekli verileri kaydediyoruz. Database db = new Database(getApplicationContext()); db.resetTables(); db.kullanıcıEkle(mail, sifre, tarih); //kullanıcıyı ekliyoruz.Ve Main activitye yönlendiriyoruz. //Sonuc başarılı ise main activitye yönlendirdk. Intent anasayfa = new Intent(getApplicationContext(),MainActivity.class ); startActivity(anasayfa); finish(); } } } catch (JSONException e) { e.printStackTrace(); } return null; } // Sonuç başarılı ise bu kod çalışmıcak çünkü Main activitye yönlenmiş durumda protected void onPostExecute(Void unused) { // closing progress dialog pDialog.dismiss(); // updating UI from Background Thread runOnUiThread(new Runnable() { public void run() { if(Integer.parseInt(sonuc) == 0){// Sonuç başarılı değil ise AlertDialog alertDialog = new AlertDialog.Builder(Kayit.this).create(); alertDialog.setTitle("Hata"); alertDialog.setMessage(sonucmesaji);//Sonuc mesajıyla bilgilendiriyoruz. alertDialog.setCancelable(false); alertDialog.setButton(RESULT_OK,"Tamam", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { sifre_edit.setText(""); sifre_tekrar_edit.setText(""); } }); alertDialog.show(); } } }); } } }
Burda ise kullanıcıdan bilgilerini alıyoruz .Gerekli kontrollerden sonra sunucuya gönderiyoruz ve MYSQL veritabanına kaydediyoruz. Kayıt başarılı ise otomatik login oluyoruz.Eğer başarılı değil ise AlertDialog ile sorunu bildiriyoruz.Burda SQLite veritabanı nasıl işlediğini anlamadıysaniz bir önceki dersimizi incelemeniz gerekir orada daha detaylı anlattım.
Arkadaşlar amacımız android kodlama öğrenmek olsada PHP bilmeyen arkadaslar için PHP kodlarınıda paylaşacağım.Bunlar üzerindede gerekli açıklamaları yapmaya çalıştım.
Öncelikle database bağlantısı için kullandığım baglan.php dosyasını paylaşıyorum.
<?php define('DB_NAME', '********');//kendi database adınız /** MySQL veritabanı kullanıcısı */ define('DB_USER', '*********');//kendi kullanıcı adınız /** MySQL veritabanı parolası */ define('DB_PASSWORD', '**********');//kendi şifreniz /** MySQL sunucusu */ define('DB_HOST', 'localhost'); /** Yaratılacak tablolar için veritabanı karakter seti. */ define('DB_CHARSET', 'utf8'); $con=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME); // Check connection if (mysqli_connect_errno()) { echo "Bağlanırken hata oluştu : " . mysqli_connect_error(); } ?> [/sourcecode] login.php : [sourcecode language="php"][/sourcecode] <?php require_once("baglan.php");//database bağlantısı gercekleştirdik if($_POST){//eğer posttan geliyorsa işlem yapacak $mail = $_POST["mail"];//mail adresini aldık $sifre = $_POST["sifre"];//sifreyi aldık //mail ve şifreyi androidde kontrol etmiştik .Güvenlik acısından burdada kontrol edeceğiz. $hata = false; $sonucmesaji = ""; if($mail==""){//mail bos mu $hata = true; $sonucmesaji = "Mail Adresiniz Boş Olamaz."; } if(strlen($sifre)<6){//şifre 6 haneden kısamı $hata =true; $sonucmesaji = "Şifre 6 Haneden kısa olamaz."; } if (!filter_var($mail, FILTER_VALIDATE_EMAIL)) {//mail format kontrol $hata =true; $sonucmesaji = "Mail Formatı Yanlış."; } if(!$hata){//eğer hata yoksa database sorgusu yapılacak $sql ="SELECT * FROM wp_uyeler WHERE mail='$mail' AND sifre='$sifre'";//mail ve şifre kontrolü $sonuc = mysqli_query($con,$sql); if(mysqli_num_rows($sonuc)>0){//0 dan fazla veri varsa $sonucmesaji = "Giriş Başarılı."; $cevap = array('sonuc' => "1", 'sonucmesaji' => $sonucmesaji); }else{ $sonucmesaji = "Kullanıcı Bulunamadı."; $cevap = array('sonuc' => "0", 'sonucmesaji' => $sonucmesaji); } mysqli_close($con);//database bağlantısını kapattık }else{ $cevap = array('sonuc' => "0",'sonucmesaji' => $sonucmesaji); } echo json_encode($cevap);// json verisini yazdırdık }else{ echo "Giriş Engellendi"; } ?>
kayit.php :
<?php require_once("baglan.php");//database bağlantısı gercekleştirdik if($_POST){//eğer posttan geliyorsa işlem yapacak $telefon = "";//telefon değerini zorunlu tutmadık $isim = $_POST["isim"];//isimi aldık $mail = $_POST["mail"];//mail adresini aldık $sifre = $_POST["sifre"];//sifreyi aldık $telefon = $_POST["telefon"];//telefonu aldık //isim,mail ve şifreyi androidde kontrol etmiştik .Güvenlik acısından burdada kontrol edeceğiz. $hata = false; $sonucmesaji = ""; if($isim==""){ $hata = true; $sonucmesaji = "İsim Boş Olamaz.\n"; } if($mail==""){//mail boş mu $hata = true; $sonucmesaji = "Mail Adresiniz Boş Olamaz.\n"; } //Mailin önceden eklenip eklenmediğni kontrol ediyoruz. Çünkü mail unique olmalı. $sql ="SELECT * FROM wp_uyeler WHERE mail='$mail'"; $sonuc = mysqli_query($con,$sql); if(mysqli_num_rows($sonuc)>0){//0 dan fazla veri varsa $hata =true; $sonucmesaji = "Bu Mail Adresi İle Önceden Kayıt olunmuş.\n"; } if (!filter_var($mail, FILTER_VALIDATE_EMAIL)) {//mail format kontrol $hata =true; $sonucmesaji = "Mail Formatı Yanlış.\n"; } if(!$hata){//eğer hata yoksa $sql="INSERT INTO wp_uyeler (isim, mail, sifre,telefon,tarih) VALUES ('$isim','$mail','$sifre','$telefon',NOW())";//NOW() fonksiyonu şimdiki zamanı alır if (!mysqli_query($con,$sql)){//Kaydedilemediyse $sonucmesaji = mysqli_error($con);//mysqln döndüğü hata mesajını aldık $cevap = array('sonuc' => "0", 'sonucmesaji' => $sonucmesaji); }else{//Kayıt Başarılı ise $sonucmesaji = "Kayıt Başarılı."; $cevap = array('sonuc' => "1", 'sonucmesaji' => $sonucmesaji); } mysqli_close($con);//database bağlantısını kapattık }else{//Eğer posttan gelen verilerde hata varsa calısacak $cevap = array('sonuc' => "0",'sonucmesaji' => $sonucmesaji); } echo json_encode($cevap);// json verisini yazdırdık }else{ echo "Giriş Engellendi"; } ?>
Oluşturduğum MYSQL tablosunun yapısı ise şöyle:
Arkadaşlar PHP dosyaları için detaylı anlatıma girmeyeceğim. Kaynak kod içerisinde hem PHP hemde Android Kodlarını paylaşacağım.Kaynak kodu indirip incelemeniz anlamanıza çok daha yardımcı olacaktır.Çünkü androiddeki tüm sınıfları yazımda paylaşmadım.Anlamadığınız yer olursa çekinmeden soru sorabilirsiniz. Elimden geldiğince sizlere cevap vermeye çalışacağım.
Birdaha ki dersimizde bu iki dersimizin devamı niteliğinde olup Facebook Login ekleyeceğim.
Sizlerden dileğim derslerimizi alttaki linklerden paylaşmanızdır. Bir dahaki derste görüşmek ve bu dersimizin faydalı olması dileğiyle…
Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.