• 02-06-2021, 17:38:00
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba, php pdo yapısında basit bir işlem yapamaya çalışıyorum fakat sorgulama işleminde nasıl yapacağımı bir türlü beceremedim. Tam olarak yapmak istediğim aşağıdaki gibidir.

    Veri tabanında islemler diye tablo var burada "islemtipi" sütununda aktif veya pasif içeriği bulunuyor. yani ben son kayıt edilen verinin "islemtipi" aktif olanları ekrana yazdırmak istiyorum. yani en son girilen son 3 verinin islemtipi aktif olanı yazdırcak. mesela son girilen 3 veriden 2 si aktif biri pasif ise. yani aktif,aktif,pasif ise bunu ekrana yazmasın. peş peşe yani son girilen 3 değer örneğin: 3. aktif 2.aktif 3.pasif ise ekrana yazmayacak boş cıktı yazıcak veya mesaj yazabılır herhangıbır. eğer son 3 veri örneğin 3. aktif 2. aktif 1. aktif ise ekrana 3 tane aktif | aktif | aktif şeklinde yazsın istiyorum.

    Buradaki istenen asıl şey peş peşe / ardı ardına 3 tane aktif varsa yazdırmak. son 3 verinin herhangibirinde pasif olursa yazdırmayacak sadece enson 3 tane veri ekledim bu 3ü peş peşe aktif ise yazsın. eğer eson girdiğim 3 işlemin 3 üde aktif ise ekrana basıcak fakat tekrar yeniden işlem girdiğimde son veriye dahil olan pasif işlemi olursa bir önceki ekrana yazan 3 işlem kaybolması gerek. bu konuda bilgisi olan kişiseler örneklendirbilirse çok memnun olurum. şuan kullandığım php kodu aşağıya paylaşıyorum.


    $tip= "aktif";
    $stmt_edit = $DB_con->prepare('SELECT islemtipi FROM islemler WHERE islemtipi=:tip ORDER BY islemtipi DESC LIMIT 0,3');
    $stmt_edit->execute(array(':tip'=>$tip));
    $edit_row = $stmt_edit->fetch(PDO::FETCH_ASSOC);
    
    
    extract($edit_row);
    
    if($stmt_edit->rowCount() > 0)
        {
            while($edit_row=$stmt_edit->fetch(PDO::FETCH_ASSOC))
            {
                extract($edit_row);
                
                $durum = $edit_row["islemtipi"];
    
    if($durum == "aktif"){
    
    break;
    }
    
        ?>
                <?php
                
                echo $edit_row['islemtipi'];
            
                
                ?>
                <?php
            }
        }
    
            ?>
  • 02-06-2021, 17:52:57
    #2
    Hocam if öncesine $status şeklinde bir tanımlama yapın. döngü içinde koşul bozulursa false a cevirin

    Örn:

    $status = true;
    if(/*....*/){
        while (/*....*/) {
            if( $durum != "aktif" ){
                $status = false;
                break;
            }
        }
    }
    
    
    if( $status ){
        echo "Son 3 İşlem Aktif";
    }else{
        echo "Son 3 işlem aktif değil !";
    }

    Ekstra olarak aşağıda ki gibi bir metod da denenebilir

    $data = array(
        (object)[ 'id' => 1, 'durum' => 'aktif'],
        (object)[ 'id' => 1, 'durum' => 'aktif'],
        (object)[ 'id' => 1, 'durum' => 'aktif'],
    );
    // Veritabanından Gelen Data Örneği
    
    $arr_col = array_column($data, 'durum');
    
    if( implode('', $arr_col) == str_repeat('aktif', 3) ){
        echo "Hepsi Aktif";
    }
    $data vei tabanından gelen son 3 row u sembolize etmektedir.
    array_column fonksiyonu ile durumkolunun değerlerini alıyoruz ve implode ilebirleşik string e ceviriyoruz. str_repeat 3 tekrar aktif e eşitse koşul sağlanmış oluyor.
  • 02-06-2021, 17:58:39
    #3
    yukarıdaki benim kullandığım koda nasıl uyarlayabilirim bunu. ... yerlere kullandıgımı yaptım fakat çıktı vermiyor.
  • 02-06-2021, 18:02:18
    #4
    Cigabit adlı üyeden alıntı: mesajı görüntüle
    yukarıdaki benim kullandığım koda nasıl uyarlayabilirim bunu. ... yerlere kullandıgımı yaptım fakat çıktı vermiyor.
    Ana sorgunuza baktığımda islemtipi=:tip şeklinde bir alan var. Bu kısımda sadece aktif olan islemtipini cekmektesiniz. Bu kosuşulu kaldırıp son 3 girdiyi çekerseniz hem aktif olan kaytlar hem pasif olan kayıtlar gelecektir. Ayrıca sıralama işlemini de islem tipine göre yapmaktasınız bu da son 3 kaydı değil sıralamaya uygun olan 3 kaydı verecektir.

    Sorgunuz aşağıda ki gibi olursa son 3 girdiyi alabilirsiniz
    SELECT islemtipi FROM islemler LIMIT 0,3
  • 02-06-2021, 18:18:41
    #5
    Yardımın için teşekkür ederim kardeşim.
  • 02-06-2021, 19:56:29
    #6
    $stmt = $DB_con->prepare('SELECT islemtipi FROM islemler ORDER BY islem_id DESC LIMIT 0,3');
    $stmt->execute();
        
    if($stmt->rowCount() > 0) {
       while($row=$stmt->fetch(PDO::FETCH_ASSOC))
    {
     extract($row);
     ?>
     <?php
    $data = array(
    (object)[ 'id' => 1, 'durum' => $islemtipi],
    (object)[ 'id' => 1, 'durum' => $islemtipi],
    (object)[ 'id' => 1, 'durum' => $islemtipi],
    );
    $arr_col = array_column($data, 'durum');
     if( implode('', $arr_col) == str_repeat('aktif', 3) ){
        echo "3 tane aktif mevcut! kontrol et.";
    }
    }
    }
    ?>
    işlemleri yukarıdaki gibi hallettim. fakat şöyle bir sorun var. son gelen 3 işlem de 2 pasif 1 aktif olursa ekrana 1 tane aktif yazıyor. benim istediğim ise 3 tane peş peşe aktif olursa ekrana yazması. bunu nasıl yapabilirim. yani son işlemi çektik bu son 3 işlemin 3 ü aktif ise ekrana çıktı versin. eğer 2si pasif 1 aktif veya tam tersi olursa ekrana birşey yazmasın gibi. işlem tipi 3 te 3 olursa çıktı versin istiyorum.


    Yardım konusu ve istenen işlem @mikropiks; tarafından aşağıdaki şekilde çözümlenmiştir. Kendisine bu konuda Teşekkürlerimi sunuyorum.

    // islemler tablosundan son 3 kaydı çek, id değerine göre en son eklenenden başla
    $stmt = $DB_con->prepare('SELECT id, islemtipi FROM islemler ORDER BY id DESC LIMIT 3');
    $stmt->execute();
    // Varsayılan Durum False
    $status = false;
    // Gelen veri kontrol. Veri var ise işleme devam et.
    if( $stmt->rowCount() ){
       // Gelen tüm veriyi fetchAll ile dizeleştir. Dizenin 'islemtipi' kolon değerilerini al.
       $arr_col = array_column($stmt->fetchAll(PDO::FETCH_ASSOC), 'islemtipi');
       // 'islemtipi' değerlerinin boşluksuz string'e çevir. String değerin tamamı aktif ise $status = true yap.
       if( implode('', $arr_col) == str_repeat('aktif', 3) ){
          $status = true;
       }
    }
    // Status true ise işlem yap
    if( $status ){
       echo 'Son 3 işlem aktif!';
    }