PHP ve JS ile basit bildirim sistemi mantığı

Katılım
8 Nisan 2020
Mesajlar
6.569
Makaleler
7
Çözümler
63
Yer
Mile Marker LN 29.5, 51 Area.
Merhabalar, PHP ve Javascript kullanarak bildirim sisteminin mantığını anlatmaya çalıştım. Javascript konusunda henüz yeterli değilim, hatam varsa aşağıya yazarsanız sevinirim.

Bildirimler okunur, sayfada görünür hale gelmesi için F5 atmak gerek. Onu başaramadım doğrusu.

 
Ajax öğrenmeniz lazım. Sayfa yenilenmeden ilgili PHP sayfasına Ajax ile arka plan üzerinde otomatik gidip oradan bir geri dönüş alıp bunu JavaScript ile ekrana basmanız lazım.

Rehberimi okuyunuz.

 
Çana basmadan sayfayı yenilemeyi denediniz mi? Deneseydiniz bir şeylerin yanlış olduğunu fark edecektiniz :)

PHP kodları sunucu tarafında çalıştırılır, JS kodları ise istemcide (tarayıcıda) çalıştırılır. Sunucu için, <p> etiketi içine yazdığınız metin ile <script> etiketi içine yazdığınız JS kodlarının bir farkı yoktur, ikisi de teksttir. Sunucu sadece PHP kodlarını çalıştırır.

Update işlemini JS kodları arasına yazdığınız için sunucu tarafında çalıştırılıp gönderiliyor. Yani bildirimler sayfayı açarken okundu olarak güncelleniyor. Butona basıldığında bildirimlerin okundu olarak güncellenmesini istiyorsanız, butona basıldıktan sonra sunucuya bir istek (request) gönderip, ilgili PHP kodlarının (Update işlemi) çalıştırılmasını sağlamanız gerekiyor. Sayfa yenilemeden request oluşturmak için @Eray T'un dediği gibi AJAX kullanmalısınız.
 
Çana basmadan sayfayı yenilemeyi denediniz mi? Deneseydiniz bir şeylerin yanlış olduğunu fark edecektiniz :)

PHP kodları sunucu tarafında çalıştırılır, JS kodları ise istemcide (tarayıcıda) çalıştırılır. Sunucu için, <p> etiketi içine yazdığınız metin ile <script> etiketi içine yazdığınız JS kodlarının bir farkı yoktur, ikisi de teksttir. Sunucu sadece PHP kodlarını çalıştırır.

Update işlemini JS kodları arasına yazdığınız için sunucu tarafında çalıştırılıp gönderiliyor. Yani bildirimler sayfayı açarken okundu olarak güncelleniyor. Butona basıldığında bildirimlerin okundu olarak güncellenmesini istiyorsanız, butona basıldıktan sonra sunucuya bir istek (request) gönderip, ilgili PHP kodlarının (Update işlemi) çalıştırılmasını sağlamanız gerekiyor. Sayfa yenilemeden request oluşturmak için @Eray T'un dediği gibi AJAX kullanmalısınız.
Aslında sayfaya girilir girilmez otomatik olarak okundu yapmıyor, çan ikonuna tıklandığında update işlemini gerçekleştiriyor ancak çan ikonunun yanındaki bildirim sayısını güncellemiyor. Halledemediğim şey oydu. Yine de teşekkür ederim.
Ajax öğrenmeniz lazım. Sayfa yenilenmeden ilgili PHP sayfasına Ajax ile arka plan üzerinde otomatik gidip oradan bir geri dönüş alıp bunu JavaScript ile ekrana basmanız lazım.

Rehberimi okuyunuz.

Henüz yeni yeni öğrenmeye çalışıyorum, okuyup uygulamaya çalışacağım. Teşekkürler.
 
Aslında sayfaya girilir girilmez otomatik olarak okundu yapmıyor, çan ikonuna tıklandığında update işlemini gerçekleştiriyor ancak çan ikonunun yanındaki bildirim sayısını güncellemiyor. Halledemediğim şey oydu. Yine de teşekkür ederim.
O halde sayfa yüklendikten sonra veri tabanını kontrol edin, tüm bildirimlerin okundu olarak güncellendiğini göreceksiniz. Sayfa kaynağını görüntüleyip (Ctrl+U) JS kodunuzu da kontrol edebilirsiniz. Çana tıklandığında, konsola "Bildirimler okundu." yazdırmak dışında bir işlem yapmadığını göreceksiniz.

Daha önce belirttiğim gibi sunucu tüm PHP kodlarını çalıştırdıktan sonra ürettiği sonucu (HTML, JSON vs.) istemciye gönderir. İstemci tarafında PHP kodu çalıştırılmaz.
 
O halde sayfa yüklendikten sonra veri tabanını kontrol edin, tüm bildirimlerin okundu olarak güncellendiğini göreceksiniz. Sayfa kaynağını görüntüleyip (Ctrl+U) JS kodunuzu da kontrol edebilirsiniz. Çana tıklandığında, konsola "Bildirimler okundu." yazdırmak dışında bir işlem yapmadığını göreceksiniz.

Daha önce belirttiğim gibi sunucu tüm PHP kodlarını çalıştırdıktan sonra ürettiği sonucu (HTML, JSON vs.) istemciye gönderir. İstemci tarafında PHP kodu çalıştırılmaz.
Hocam zaten benim istediğim çana tıklandığında bütün bildirimleri okundu olarak işaretlemesiydi, başka bir şey yapmadım ki zaten. Sizin istediğiniz şey nedir anlamadım, biraz daha açma şansınız var mı acaba?
 
Hocam zaten benim istediğim çana tıklandığında bütün bildirimleri okundu olarak işaretlemesiydi, başka bir şey yapmadım ki zaten. Sizin istediğiniz şey nedir anlamadım, biraz daha açma şansınız var mı acaba?
Elbette.
Şimdi siz çana tıklandığında bildirimlerin okundu olarak işaretlemesini istiyorsunuz. Bunun için aşağıda belirttiğim bir JS kodu yazmışsınız. Bu kodun, çana tıklandığında bildirimleri okundu olarak işaretleyip (veri tabanını güncelleyip) konsola "Bildirimler okundu." yazmasını bekliyorsunuz.
HTML:
<script type="text/javascript">
        $(document).ready(function(){
            $("#notifications").click(function(){
                <?php
                $oldStat = 'Unread';
                $newStat = 'Read';
                $notquery = $db -> prepare("UPDATE notifications SET status = ? WHERE status = '$oldStat'");
                $notquery -> bindParam(1, $newStat, PDO::PARAM_STR);
                $notquery -> execute();
                if($notquery) {
                    ?>
                    console.log("Bildirimler okundu.");
                    <?php
                } else {
                    ?>
                    console.log("Bildirimler okundu.");
                    <?php
                }
                ?>
            });
        });
</script>

Fakat sunucu JS kodlarını algılamaz, sadece <?php ?> arasındaki kodları yorumlar (çalıştırır). JS kodları arasına yazdığınız PHP kodları sunucuda çalıştırıldıktan sonra sayfa yüklenir. Yani bırakın çana basmayı, daha sayfa yüklenmeden PHP kodları çalıştırıldığı için sayfa yüklendiğinde veri tabanı çoktan güncellenmiş olur.

Yazmanız gerek kod şu şeklide:
HTML:
<script type="text/javascript">
        $(document).ready(function(){
            $("#notifications").click(function(){
               //Çana tıklandığında AJAX ile istek oluşturulsun (örneğin, veri tabanınının güncelleneceği notificationsRead.php dosyası çalıştırılsın)
               //Gelen yanıta göre (örneğin update işlemi başarılı/başarısız) JS ile bildirim sayısı güncellensin.
            });
        });
</script>
 
Elbette.
Şimdi siz çana tıklandığında bildirimlerin okundu olarak işaretlemesini istiyorsunuz. Bunun için aşağıda belirttiğim bir JS kodu yazmışsınız. Bu kodun, çana tıklandığında bildirimleri okundu olarak işaretleyip (veri tabanını güncelleyip) konsola "Bildirimler okundu." yazmasını bekliyorsunuz.
HTML:
<script type="text/javascript">
        $(document).ready(function(){
            $("#notifications").click(function(){
                <?php
                $oldStat = 'Unread';
                $newStat = 'Read';
                $notquery = $db -> prepare("UPDATE notifications SET status = ? WHERE status = '$oldStat'");
                $notquery -> bindParam(1, $newStat, PDO::PARAM_STR);
                $notquery -> execute();
                if($notquery) {
                    ?>
                    console.log("Bildirimler okundu.");
                    <?php
                } else {
                    ?>
                    console.log("Bildirimler okundu.");
                    <?php
                }
                ?>
            });
        });
</script>

Fakat sunucu JS kodlarını algılamaz, sadece <?php ?> arasındaki kodları yorumlar (çalıştırır). JS kodları arasına yazdığınız PHP kodları sunucuda çalıştırıldıktan sonra sayfa yüklenir. Yani bırakın çana basmayı, daha sayfa yüklenmeden PHP kodları çalıştırıldığı için sayfa yüklendiğinde veri tabanı çoktan güncellenmiş olur.

Yazmanız gerek kod şu şeklide:
HTML:
<script type="text/javascript">
        $(document).ready(function(){
            $("#notifications").click(function(){
               //Çana tıklandığında AJAX ile istek oluşturulsun (örneğin, veri tabanınının güncelleneceği notificationsRead.php dosyası çalıştırılsın)
               //Gelen yanıta göre (örneğin update işlemi başarılı/başarısız) JS ile bildirim sayısı güncellensin.
            });
        });
</script>
Tamamdır hocam, şimdi anladım anlatmak istediğinizi. Bunu bilmiyordum, öğrendiğim iyi oldu teşekkür ederim. Peki sorum şu, "notificationsRead.php" dosyasını nasıl çağıracağım? Herhalde "include("notificationsRead.php"); şeklinde değildir, farklı bir JS kodu vardır.
 
Tamamdır hocam, şimdi anladım anlatmak istediğinizi. Bunu bilmiyordum, öğrendiğim iyi oldu teşekkür ederim. Peki sorum şu, "notificationsRead.php" dosyasını nasıl çağıracağım? Herhalde "include("notificationsRead.php"); şeklinde değildir, farklı bir JS kodu vardır.
Yapacağınız işlem bir çağırma işlemi değil. AJAX ile yeni bir istek (request) oluşturacaksınız. Sunucu bu istek doğrultusunda "notificationsRead.php" dosyasını çalıştırıp (bu dosyada veri tabanı güncellenecek) bir sonuç (response) dönecek. Projede jQuery kullandığınız için AJAX post işlemini kolayca yapabilirsiniz.

Google ve Youtube'da "php jquery ajax" şeklinde arama yaparak pek çok örnek kod/proje bulabilirsiniz.
 
Yapacağınız işlem bir çağırma işlemi değil. AJAX ile yeni bir istek (request) oluşturacaksınız. Sunucu bu istek doğrultusunda "notificationsRead.php" dosyasını çalıştırıp (bu dosyada veri tabanı güncellenecek) bir sonuç (response) dönecek. Projede jQuery kullandığınız için AJAX post işlemini kolayca yapabilirsiniz.

Google ve Youtube'da "php jquery ajax" şeklinde arama yaparak pek çok örnek kod/proje bulabilirsiniz.
Tamamdır, çok teşekkürler.

@Yuspro

Projeyi güncelledim, anlattığınız gibi olmuş mu inceleme şansınız var mı?

Ajax öğrenmeniz lazım. Sayfa yenilenmeden ilgili PHP sayfasına Ajax ile arka plan üzerinde otomatik gidip oradan bir geri dönüş alıp bunu JavaScript ile ekrana basmanız lazım.

Rehberimi okuyunuz.

Teşekkür ederim, faydası dokundu gerçekten. Repoyu güncelledim.
 

Yeni konular

Geri
Yukarı