Merhaba! Sorununuzun iki farklı kısmı var gibi görünüyor: dosya adı sorunu ve MySQL ile ilgili bir karakter seti uyumsuzluğu hatası.
Dosya Adı Sorunu:
Dosya adında tire işareti kullanmak genellikle sorun yaratmaz. Ancak, belirttiğiniz gibi "openssl_encrypt" fonksiyonu kullanılıyorsa, bu fonksiyonun çıktısı bazen özel karakterler içerebilir. Bu durumda, dosya adını sadece harf, rakam ve basit özel karakterlerle sınırlamak daha iyi bir uygulama olabilir. Örneğin, dosya adını "siteye_konulan_birinci_resim.jpg" gibi bir formata dönüştürebilirsiniz.
MySQL Karakter Seti Uyumsuzluğu:
Hata mesajında belirtilen "Illegal mix of collations" hatası, genellikle veritabanındaki sütunların ve karşılaştırma operatörlerinin farklı karakter setleri veya sıralama düzenleri kullanması durumunda ortaya çıkar. Bu durumu düzeltmek için aşağıdaki adımları izleyebilirsiniz:
Veritabanı Karakter Seti Ayarı:
MySQL veritabanınızın karakter setini kontrol edin ve mümkünse UTF-8 (utf8mb4_general_ci) olarak ayarlayın. Bu, genellikle çeşitli karakterlerin sorunsuzca işlenmesini sağlar.Örneğin:
ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Tablo ve Sütun Karakter Seti Ayarı:
Eğer mümkünse, ilgili tablo ve sütunların karakter setini de kontrol edin ve aynı şekilde ayarlayın.Örneğin:
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Bu adımları izledikten sonra, sorununuz çözülmelidir. Ayrıca, dosya adlarını basitleştirmek ve özel karakterleri kaldırmak, dosya işlemleri sırasında olası sorunları azaltabilir.
Eğer PHP ile bir veri varsa o veriyi kullan, yoksa varsayılan bir değeri kullanmak istiyorsanız, isset()
veya empty()
fonksiyonları ile bir kontrol yapabilirsiniz.
İşte örnek bir kullanım:
<?php
// Admin panelinden gelen Facebook linki
$adminFacebookLink = $linkler['facebook_url'];
// Facebook linki var mı kontrolü
if (!empty($adminFacebookLink)) {
// Facebook linki varsa, görüntüle
$facebook= '<a href="' . $adminFacebookLink . '" target="_blank">Facebook</a>';
} else {
// Facebook linki yoksa, varsayılan bir değer kullanabilirsiniz
$facebook= null;
}
?>
empty()
fonksiyonu, bir değerin boş olup olmadığını kontrol eder. Bu şekilde, Facebook linki verisi varsa görüntülenir, yoksa linki yayınlamaz. Bu sayede hataların oluşmasını önleyebilirsiniz.
Next.js'te sayfaların nasıl oluşturulacağı ve yönlendirileceği konusunda esnek bir yapı vardır. Eğer tek bir sayfa dosyasında tüm bu yolları yönetmek istiyorsanız, dinamik yolları kullanabilirsin
Öncelikle, pages
dizininde [[...slug]].js
adında bir dosya oluşturun. Bu dosyanın adında üç nokta içeren bir kısım, dinamik olarak gelen yolları temsil eder.
[[...slug]].js
içeriği şu şekilde olabilir:
// pages/[[...slug]].js
import { useRouter } from 'next/router';
const DynamicPage = () => {
const router = useRouter();
const { slug } = router.query;
// slug parametresini kullanarak istediğiniz işlemleri yapabilirsiniz
// örneğin slug[0] ile ana kategori, slug[1] ile alt kategori alabilirsiniz
return (
<div>
<h1>Dynamic Page</h1>
<p>Slug: {slug}</p>
</div>
);
};
export default DynamicPage;
Bu sayfa, dinamik olarak gelen yolu alır ve bu yolu kullanarak istediğiniz işlemleri gerçekleştirebilirsiniz.
Örnek URL'ler:
/
/women
/women/skirts
/tr/kadin/ust-giyim
Bu URL'leri kullanarak sayfanıza ulaştığınızda, router.query.slug
içinde ilgili yol bilgisini alabilir ve istediğiniz işlemleri gerçekleştirebilirsiniz.
Bu şekilde, tek bir sayfa dosyasında dinamik yolları yönetmiş olursunuz ve herhangi bir ekstra middleware kullanmanıza gerek kalmaz.
Resmin Classına veri eklemen gerekli o yüzden. kod çalışır halde. test ettim.
Örnek bir kullanım:
// File veya Blob nesnesini alın
var file = /* ... */;
// Blob URL oluşturun
var blobUrl = URL.createObjectURL(file);
// blobUrl'yi kullanarak resim önizlemesi yapın (örneğin, bir img etiketi içinde)
var img = document.createElement('img');
img.src = blobUrl;
document.body.appendChild(img);
// Blob URL'yi serbest bırakmayı unutmayın (performans ve bellek yönetimi için)
URL.revokeObjectURL(blobUrl);
WordPress'u bilgisayarınızda XAMPP üzerinde çalıştırmak için izin sorunları yaşıyorsanız, aşağıdaki adımları takip ederek çözüm bulabilirsiniz:
Klasör ve Dosya İzinleri:
WordPress dosyalarının bulunduğu klasör ve altındaki dosyaların doğru izinlere sahip olduğundan emin olun. Bu, dosya ve klasörlerin XAMPP tarafından okunabilir ve yazılabilir olduğu anlamına gelir.WordPress ana dizini ve altındaki tüm dosyaların ve klasörlerin izinlerini kontrol edin ve gerekirse değiştirin. Örneğin, şu komutları kullanarak terminal veya komut istemcisinde izinleri değiştirebilirsiniz:
chmod -R 755 /path/to/wordpress
veya
chmod -R 777 /path/to/wordpress
"everyone" ya da "herkes" (everyone = herkes) izinlerini verdiyseniz, bu genellikle güvenlik riskleri taşıdığından dolayı önerilmez. Mümkünse sadece gerekli izinleri (örneğin, sadece Apache web sunucusu için gerekli izinleri) vermek daha güvenlidir.
XAMPP İzinleri:
XAMPP'nin çalıştığı kullanıcı veya grup için gerekli izinlere sahip olduğundan emin olun. Bu, Apache ve MySQL gibi servislerin dosya ve klasörlere erişimini sağlar.Dosya Sahipliği:
WordPress dosyalarının doğru sahibi ve grupla ilişkilendirilmiş olmalıdır. Örneğin, Apache'nin sahibi genellikle "www-data" veya "apache" gibi bir kullanıcıdır. Dosya sahibini ve grubunu ayarlamak için aşağıdaki komutları kullanabilirsiniz:chown -R apache:apache /path/to/wordpress
veya
chown -R www-data:www-data /path/to/wordpress
Bu komutlar dosya ve klasör sahibini ve grubunu "apache" veya "www-data" olarak ayarlar.
XAMPP'i Yeniden Başlatın:
Değişikliklerin etkili olması için XAMPP'i yeniden başlatın.Hata Günlüklerini Kontrol Edin:
XAMPP ve WordPress hata günlüklerini kontrol ederek sorunları belirleyebilirsiniz. Apache hata günlüğü genellikle "logs" dizininde "error.log" dosyasında bulunur. WordPress hata günlüğünü ise WordPress dosya dizininde "wp-content/debug.log" olarak kontrol edebilirsiniz.
Maalesef metin yapısı ile kimse yardımcı olamaya bilir. Daha detaylı bir anlatım yapısı olsaydı eğer belki ama kod yapını paylaş ki ilgili kod ile ilgili anlayan arkaşlarımızda yardımcı <olabilirdi class=""></olabilirdi>
Bu alanda ajax veya socket.io ile yapabilirsin, Ajax ile 5 saniye bir sorgu çalıştırarak yaparsın, socket ile dinleme ile yapabilirsin.
<div class="container py-5">
<div class="col-md-6">
<div class="row g-0 border rounded overflow-hidden flex-md-row mb-4 shadow-sm h-md-250 position-relative">
<div class="col-md-8 p-4 d-flex flex-column position-static">
<strong class="d-inline-block mb-2 text-primary-emphasis">World</strong>
<h3 class="mb-0">Featured post</h3>
<div class="mb-1 text-body-secondary">Nov 12</div>
<p class="card-text mb-auto">This is a wider card with supporting text below as a natural lead-in to additional content.</p>
<a href="#" class="icon-link gap-1 icon-link-hover stretched-link">
Continue reading
<svg class="bi"><use xlink:href="#chevron-right"></use></svg>
</a>
</div>
<div class="col-md-4">
<img src=".....">
</div>
</div>
</div>
</div>
SELECT
s.musteriID,
m.musteriAd,
m.musteriSoyad,
m.musteriTelefon,
m.musteriTc,
t.odemeTipi,
SUM(s.acikHesap) AS toplamAcikHesap,
s.resim,
SUM(t.tutar) AS toplamTutar,
t.tMusteriID,
MAX(t.tarih) AS enSonTarih -- Tahsilat tarihleri arasında en son tarihi alır
FROM satislar AS s
INNER JOIN musteriler AS m ON m.ID = s.musteriID
INNER JOIN tahsilatlar AS t ON t.tMusteriID = s.musteriID
WHERE
s.satisTarihi BETWEEN '2023-08-01' AND '2023-11-15'
AND s.subeID = '2'
AND m.ID = '322'
GROUP BY s.musteriID, m.musteriAd, m.musteriSoyad, m.musteriTelefon, m.musteriTc, t.odemeTipi, s.resim, t.tMusteriID;