v2.5.2
Giriş yap

Veritabanından Gelen Değerleri Class içinde Basmak

yerdemli
692 defa görüntülendi

Merhaba Arkadaşlar,

Aşağıdaki şekilde statik bir bir class ile doğum günü gelen kişilerin bir listesini basıyorum.

    class Birthday {
    	private $birthDays;
    	public $today;
    	public $notifications;
    	public function __construct() {
    		global $DogumGunuListesi;
    		$this->today = new DateTime('today');
    		$this->birthDays = [
    		    //echo $DogumGunuListesi;
    			'Ali' => '17-09-1997',
    			'Veli' => '11-09-1993',
    			'Zeki' => '15-09-1991'
    		];
    		$this->notifications = [];
    		
    	}
    	public function birthReminder() {
    		foreach ($this->birthDays as $name => $birthDay) {
    			$birthDate = new DateTime($birthDay);
    			
    			if($this->compareDay($birthDate) && $this->compareMonth($birthDate)) {
    			
    				array_push($this->notifications, [
    					"age" => $birthDate->diff($this->today)->y,
    					"name" => $name,
    					"dob" => $birthDay
    				]);
    			} 
    		}
    	}
    	protected function compareDay($birthDate) {
    		return $birthDate->format('d') == $this->today->format('d');
    	}
    	protected function compareMonth($birthDate) {
    		return $birthDate->format('m') == $this->today->format('m');
    	}
    }
    
    $person = new Birthday();
    $person->birthReminder();

Aşağıdaki bilgileri mediumtext olarak veritabanında tutuyorum.

	'Ali' => '17-09-1997',
	'Veli' => '11-09-1993',
	'Zeki' => '15-09-1991'

Bununla birlikte veritabanından çekip class'a basarak kullanamıyorum.
Veritabanından çektiğim ve $DogumGunuListesi değişkenine eşitlediğim bilgileri basmak için global $DogumGunuListesi; tanımı yaptım, olmadı.
Sorguyu class'ın içinde yaptım yine olmadı.

Nerede hata yaptığımı bir türlü bulamadım. Yardımcı olabilirseniz memnun olurum.

Şimdilik manuel olarak listeyi koda yapıştırarak çalıştırabiliyorum.

Teşekkürler.

Cevap yaz
Cevaplar (5)
yerdemli
1535 gün önce

Sorgu ile gelen dizi görünümlü metni diziye çeviremedim bununla birlikte kodu aşağıdaki şekle getirip çözdüm.

	/* Doğumgünü Listesi */
	$DogumGunuListesi = db'den gelen sonuç;

	$veri = str_replace(" ","",$DogumGunuListesi);
	$veri = str_replace("'","",$veri);

	$parcala = explode(",", $veri);
  
	foreach ($parcala as $values) {
		if(trim($values)!="") {
			$tarih = date(d).".".date(m);
			$konum = strpos($values, $tarih);

			if ($konum === false) {
			} else {
				$parcala2[] = explode("=>", trim($values));
			}			
		}
	}
	
	foreach ($parcala2 as $ekranbas) {
		$myBirthdayList .= "<li>".$ekranbas[0]."</li>";
	}
  
	if($myBirthdayList=="") {
		$myBirthdayList = "<li><b>[%LNG|dogumgunuyok%]</b></li>";
	}

	$myBirthdayList = "<ul class='myBirthdayList'>".$myBirthdayList."</ul>";
	/* Doğumgünü Listesi */

Emeği geçen hepinize teşekkürler.

yerdemli
1535 gün önce

Tek bir sorun kaldı. $DogumGunuListesi aslında dizi değil.
Sorumda da belirttiğim gibi bilgileri mediumtext olarak veritabanında tutuyorum.
Sorumu yazarken bahsettim bununla birlikte çok yüzeysel kalmış olabilir.

Bu ekran alıntısındaki gibi array görünümlü bir metin aslında. Bunu diziye çevirmeliyim.
Sanırım parçalayıp tekrar dizi olarak birleştirmem gerekiyor.

makifgokce
1536 gün önce

print_r fonsiyonu ekrana yazdırmak için kullanılır.
aşağıda 2 örnek var.İster global olarak tanımla istersende parametre olarak.

$DogumGunuListesi = [
	'Ali' => '17-09-1997',
	'Veli' => '11-09-1993',
	'Zeki' => '15-09-1991'
];
class Birthday{
	private $birthDays = [];
	public function __construct() {
		global $DogumGunuListesi;
		$this->birthDays = $DogumGunuListesi;
	}
}
$birth = new Birthday;
var_dump($birth);
// veya
class Birthday{
	private $birthDays = [];
	public function __construct($DogumGunuListesi) {
		$this->birthDays = $DogumGunuListesi;
	}
}

$birth = new Birthday($DogumGunuListesi);
var_dump($birth);
yerdemli
1536 gün önce

Class dışında $DogumGunuListesi değişkenine eşitledim.
Sonucu class içinde 6'ıncı satırda global $DogumGunuListesi; ile çağırdım.
7'inci satırda echo "$DogumGunuListesi"; ile bastım. Ekran Alıntısı Ekran alıntısında Doğum günü yok yazmasının sebebi statik tanımların commentli olmasıdır.

Bununla birlikte asıl 11'inci satırdaki $this->birthDays = [] arasında olması gerekiyor.
Burada print_r() ile basınca 'Ali' => '21-09-1997', 'Veli' => '11-09-1993', 'Zeki' => '15-09-1991' çıktısını veriyor ve duruyor.
Ekran Alıntısı

Ekran alıntısı aldığım araç, görsel uzantısı olan bir bağlantı vermediği için böyle bağlantı şeklinde ekliyorum.

	class Birthday {
		private $birthDays;
		public $today;
		public $notifications;
		public function __construct() {
		global $DogumGunuListesi;
		echo "$DogumGunuListesi";
			$this->today = new DateTime('today');
			// for demo purpose we set harry's birthday for every day
			$this->birthDays = [
				//print_r ($DogumGunuListesi)
				//'Ali' => '21-09-1997',
				//'Veli' => '11-09-1993',
				//'Zeki' => '15-09-1991'
				//'Harry' => $this->today->format('d-m').'-1991'
			];
			$this->notifications = [];
			
		}
mehmetemin17
1536 gün önce

Class içinde veritabanı sorgusu çalıştırmak için fonksiyon içine global $pdo; değerini tanımlamalısın