Site icon Mobilhanem

Android Login Ekran Yapımı 2 (Kayıt İşlemi)

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.

11
Exit mobile version