- PHP Hatalarını sunucunuz üzerinden tamamen aktif edin veya sunucunuzdaki error_log dosyalarını kontrol edin.
- Sunucunuzdaki PHP eklentilerini kontrol edin, boilerplate videosunda kurulan paketler bazı eklentilerin aktif olmasını istiyor olabilir. Bu eklentiler sunucunuzda pasif durumdaysa aktifleştirin.
- 500 hatası alıyorsanız sunucu taraflı bir problem olduğu anlamına geliyor. Sorunu hiçbir şekilde çözemiyorsanız hosting sağlayıcınızla iletişime geçmekte fayda var
Merhaba, veritabanı kullanmadan yapmak istiyorsanız eğer counter.php dosyası oluşturup veriyi dosya içerisinde değişken oluşturup bu değişkeni siteye her girildiğinde güncelleyecek şekilde çalıştırabilirsiniz.
Örnek:
- 1.Adım: Değişkenimizi counter.php dosyasının içerisinde barındıracağımız için dosyayı oluşturmamız gerekiyor.
- 2.Adım: counter.php dosyasında oluşturduğumuz $counter değişkenini siteye her girişte +1 olarak güncellemek için dosya içeriğini güncellememiz gerekiyor.
counter.php
<?php
$counter = 0;
?>
Dosya içeriğini güncelleme
<?php
// $counter değişkenine erişebilmek için dosyayı sayfamıza dahil ediyoruz.
include "counter.php";
// $counter değişkenini +1 olarak güncellemek için dosya içeriğimizi çekiyoruz.
$fileContent = file_get_contents('counter.php');
// $counter değerini +1 arttırma
$newCounter = $counter + 1;
// Yeni $counter değerini dosya içeriğine yazdırma
$newFileContent = preg_replace('/\$counter\s*=\s*\d+/', '$counter = ' . $newCounter, $fileContent);
// Dosyamızı güncelliyoruz
file_put_contents("counter.php", $newFileContent);
?>
$counter değişkeninin güncellenmesini istediğin her sayfaya bu kodları fonksiyon haline getirip ekleyebilirsin. $counter değişkenine erişmek için counter.php dosyasını erişmek istediğin php dosyasına include edip kullanabilirsin.
Güncellenmiş counter.php dosyası
<?php
$counter = 1;
?>
Üye kaydını yapıp verileri veritabanına kaydettikten sonra, oluşturmanız gereken sessionları oluşturun ve daha sonrasında header fonksiyonunu kullanarak yeni kayıt olan kullanıcıyı istediğiniz sayfaya yönlendirin.
# Burada kontroller ve veri tabanı işlemleri
if($kayit){
# Kayıt işlemleri başarılı ise sessionları oluşturuyoruz ve kullanıcıyı
# istediğimiz sayfaya yönlendiriyoruz.
$_SESSION['user_id'] = "...";
$_SESSION['user_login'] = true;
header("Location: anasayfa.php");
exit; // Kodun devam etmesini engellemek için exit kullanılır
}else{
# Burada hata mesajı vs.
}
Merhaba, popup içerisine ajax ile çektiğiniz verileri json değilde html formatında gönderiyorsanız gönderdiğiniz html şablonunun içerisine çalışmasını istediğiniz javascript kodlarını yazmanız gerekiyor.
Araştırmadım ve nedenini tam olarak bilmesem de muhtemelen ajax request attığınız sayfa sıfırdan çağırıldığı için ve içerisindeki kodları sayfanıza javascript ile sonradan dahil ettiğiniz için sayfanızda yüklü olan javascript kodları çalışmıyor.
Aşağıdaki kod ile DOMDocument sınıfını kullanarak sayfada bulunan img etiketindeki src'de bulunan resim yollarını alabiliyoruz.
Ancak ufak bir sorun mevcut: img etiketinin src kısmında ne yazıyor ise onu çekiyor. Yani örneğin src="/img/logo.png" şeklinde yazıyorsa sadece "/img/logo.png" şeklinde alabiliyoruz.
// Hedef site url
$site = 'https://www.example.com';
// Site içeriğini çekiyoruz
$html = file_get_contents($site);
// DOMDocument kullanarak resim linklerini bulalım
$dom = new DOMDocument();
@$dom->loadHTML($html); // @ kullanmamız hataları bastırmak için, HTML parse edilirken bazı hatalar olabilir.
$imageLinks = array();
foreach ($dom->getElementsByTagName('img') as $img) {
$src = $img->getAttribute('src');
$imageLinks[] = $src;
}
// Sonuçları görmek için dizi içeriğini yazdırabilirsiniz:
print_r($imageLinks);
Ek olarak yukarıdaki kod sayfada bulunan img etiketindeki tüm resim yollarını çekiyor, belirli bir kısmı almıyor. Kodu kendine göre düzenlemelisin.
Merhaba, sorunu biraz daha detaylandırabilirsen yardımcı olmaya çalışacağım :)
Merhaba, diğer soruna cevap vermiştim aynı veritabanı örneği ile beraber kod örnekleri aşağıya bıraktım. Bu sefer veritabanı işlemleri için düz PDO yerine BasicDB kullandım.
"categories" tablosu:
Sütun | Açıklama |
---|---|
category_id | |
category_title | Kategori başlığı |
category_create | Kategori oluşturulma tarihi |
"blogs" tablosu:
Sütun | Açıklama |
---|---|
blog_id | |
blog_category | Blog yazısının bağlı olduğu kategori id |
blog_title | Blog başlığı |
blog_content | Blog yazısının içeriği |
blog_create | Blog oluşturulma tarihi |
Kategorilerin listelenmesi ve kategoriye ait blog yazılarının sayısının alınması
Back-end
# Tüm kategorileri çekiyoruz.
$categories = $db->from('categories')->all();
# $data isminde yeni bir dizi değişkeni oluştuyoruz, kategorileri ve
# kategoriye ait blog yazılarının sayısını burada depolayacağız.
$data = [];
if($categories){
# Eğer kategori mevcut ise foreach döngüsü
foreach($categories as $category){
# Kategori ismini $data dizisine ekliyoruz.
$data[$category['category_id']['name'] = $category['category_title'];
# Kategoriye ait blog yazılarının sayısını alıyoruz.
$blogs = $db->from('blogs')
->where('blog_category', $category['category_id'])
->select('count(blog_id) as total')
->total();
if($blogs){
# Toplam blog sayısını $data dizisine ekliyoruz.
$data[$category['category_id']['total_blog_count'] = $blogs;
}
}
}
Front-end
<ul>
<?php foreach($data as $category): ?>
<li>
<?= $category['name'] ?>
<span>Toplam Blog Sayısı: <?= $category['total_blog_count'] ?></span>
</li>
<?php endforeach; ?>
</ul>
BasicDB ile yaptığım veritabanı sorgularını yapay zeka (chatgpt vs.) kullanarak PDO sorgularına çevirebilirsin.
Ek olarak sorunu "Kategorilerle birlikte, kategorilerde bulunan blog yazılarının sayısını nasıl yazdırabilirim?" benzeri sorabilirsen daha anlaşılır olacağını düşünüyorum :)
Tayfun hocam emeğinize sağlık, çok faydalı bir platform olmuş. Benim de deneyimlediğim kadarıyla bir kaç önerim mevcut :)
Tam Ekran Cevap Yazma
Tam ekran moduna geçildiği zaman mesaj düzenleme ekranında olduğu gibi önizleme sağ tarafta ve markdown kısmı sol tarafta olursa daha kullanışlı olur.
Markdown Editör için Ek Özellikler
- Editörde fare ile bir metin seçildiği zaman, seçim yapılan metnin üzerinde ufak bir pop-up belirir ve bu pop-up'da yer alan seçeneklere tıklandığı zaman otomatik olarak seçilen metin o biçime geçer. (Editörün amacının dışına çıkıyor olabilir belki ama çok kullanışlı olur. Discord'da mevcut olan bir özellik bu.)
- Editörde çok uzun bir metin yazıldığı zaman bir otomatik alt satıra geçmesi. (Bu bence baya iyi olur uzun metinler yazınca düzenlemesi çok yoruyor)
Makaleler
- Makaleler kısmının bence tüm kullanıcılara açılması güzel olur, sitedeki içerikler ve kaynaklar artmış olur.
- Makalelere yorum yazma özelliği.
- Onaylanan makalelerin dersler kısmında yayınlanması.
Beğeni
Herhangi bir şey beğendiğimiz zaman beğeniyi geri çekemiyoruz, beğeni kaldırma ve fareyi kalp ikonunun üzerinde tuttuğumuz zaman kimlerin beğendiğini görebiliriz.
Moderatör
Sitenin daha aktif olması ve belirli bir düzende olması için Gönüllü Moderatör alımı yapılması baya iyi olur bence. Cevaplanmış ancak soru sahibi tarafından "doğru cevap" olarak işaretlenmemiş pek çok soru, düzgün bir şekilde anlatılmadığından dolayı cevaplanmamış pek çok soru mevcut. Moderatörler soru-cevap kısmının düzenini sağlayabilir.
Ders İstekleri
Ders istekleri kısmı beğenilere göre çalışıyorsa, haftalık ve aylık olarak 2 kategoriyle ayrılabilir. Haftalık en çok beğenilen istek ve aylık en çok beğenilen isteklerin videoları/anlatımları yapılabilir.
Videosu Çekilmiş veya Anlatımı yapılmış isteği video linkiyle beraber "Yayınlandı" benzeri bir işaret atılabilir, başka bir kullanıcının beklediği bir videoysa erişimi kolaylaşır.
Cevaplama
Bir soruyu soru sahibi cevapladığı zaman "Soru Sahibi" şeklinde bir ibare olması güzel olabilir.
Merhaba, çalıştırdığın cron dosyasında ilgili veri güncellenirken bazı değişkenler null olarak gönderiliyor olabilir.
Çözüm önerileri;
- Veriyi güncellemek için kullandığın değişkenleri kontrol et. Muhtemelen veriyi NULL'a döndüren veya boşaltan bir kod parçacığı olabilir.
- Veri güncellerken eski ve yeni veriyi değişken isimleriyle beraber bir dizi içerisinde log olarak bir dosyaya veya veritabanında farklı bir tabloya kaydet. Bu sayede sorunun kaynağını tespit edebilirsin.
- Veriyi güncellemek için API kullanıyorsan, API'den gelen yanıt boş olduğu için NULL olarak güncelliyor olabilir. API'den gelen verileri kontrol et.
- Sorunu sadece cron dosyasında aramak yerine ilgili veriyi güncelleyen tüm php dosyalarını kontrol et. Manuel olarak veri üzerinde düzenleme yaptığın zaman da NULL olarak güncelleniyor olabilir.
Örnek Log Kaydı
$eskiVeri = [
'1. Sütun' => $veritabanindan_gelen_veri['sutun_1'],
'2. Sütun' => $veritabanindan_gelen_veri['sutun_2'],
'3. Sütun' => $veritabanindan_gelen_veri['sutun_3'],
'4. Sütun' => $veritabanindan_gelen_veri['sutun_4'],
];
$yeniVeri = [
'1. Sütun' => $guncellenmis_veri['sutun_1'],
'2. Sütun' => $guncellenmis_veri['sutun_2'],
'3. Sütun' => $guncellenmis_veri['sutun_3'],
'4. Sütun' => $guncellenmis_veri['sutun_4'],
];
$insert = $db->insert('log')->set(array(
'guncellenen_veri_id' => $veri_id,
'eski_veri' => json_encode($eskiVeri),
'yeni_veri' => json_encode($yeniVeri),
'tarih' => date('Y-m-d H:i:s')
));
Kaynak kodlarını resimli bir şekilde paylaşabilirsen kodlarını inceleyebilirim.
Merhaba, kesin bir çözüm olur mu emin değilim ancak iki önerim mevcut.
- Veriyi şifrelenmiş olarak sayfada yükletin, daha sonrasında şifrelediğiniz veriyi sayfa yüklendikten sonra javascript ile decode ederek gösterin.
- Mail adresinin gözükeceği kısımda "Mail Adresini Göster" benzeri bir buton koyun, butona tıklandığı zaman javascript ile mail adresini yerleştirin.
İlk önerimde sayfa ilk yüklendiğinde mail adresi şifrelenmiş olarak gözükecek ancak javascript ile decode edip göstereceğiniz için botların okuma ihtimali yine de mevcut.
İkinci önerimde butona tıklayana kadar sayfanın kaynağında mail adresi bulunmayacağı için daha kesin bir çözüm olacaktır.