artık inceden https://www.youtube.com/watch?v=hmCiKvzNkkw şu kıza bağladım. dedim ki belki veri yüklenmeden koşullar çalışıyordur, promise kullanayım
const obj = new Promise(resolve =>{
resolve(this.storageLocal());
}).then(obj => { return obj });
this.conf = await obj;
console.log(
this.conf,
this.conf.lang,
this.conf['lang']
)
yine olmuyor. tüm objeyi basıyor, anahtar belirtince basmıyor.
ilk şoku atlatıp, sinir krizim geçince oturup yazmaya devam ettim : )
ama mantıksız olan bir noktada takıldım.
burada diyorum ki, chrome.storage.local.get
yönteminde belirtilen anahtar yoksa yenisini oluştur, daha sonrasında callback ile boş nesneye dönen sonucu aktarıyorum;
let conf = {};
Object.entries(this.storageData().data).forEach(([key, val]) => {
chrome.storage.local.get(key, object => {
if(!object[key])
chrome.storage.local.set(
{[key]:val},
function(){
Object.assign(conf, {[key]:val})
}
);
});
});
yukarıdaki kod, ilk girişte çalıştırılacak bir kod, daha sonraki oturumlarda ihtiyaç duyulmayacak. dolayısıyla bu seferde mevcut depolanan verileri okumam gerkekiyor;
chrome.storage.local.get(null, items => {
Object.assign(conf, items);
});
onu da bununla hallediyorum.
<a href="https://imgur.com/LZjSic1.png" target="_blank">şimdi sorun tam şu noktada ortaya çıkıyor;</a>
console.log(
this.conf,
this.conf.lang,
conf,
conf.lang
);
this.conf
ve conf
tuttuğu tüm objeleri consola basıyor, ama this.conf.lang
ve conf.lang
undefined
dönüyor.
bitti mi bitmedi,
new Intl
.DateTimeFormat(conf.lang, {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
timeZoneName: 'longGeneric',
timeZone: conf.timeZone
}).format(new Date(Date.now()));
aynı bloğun içinde olan bu kodda conf.lang
undefined
dönmüyor.
<span style="color:red;font-size:16px;font-family:sans">bu durumun sebebi ne olabilir?</span>
tam kod örneği;
let conf = {};
Object.entries(this.storageData().data).forEach(([key, val]) => {
chrome.storage.local.get(key, object => {
if(!object[key])
chrome.storage.local.set(
{[key]:val},
function(){
Object.assign(conf, {[key]:val})
}
);
});
});
chrome.storage.local.get(null, items => {
Object.assign(conf, items);
});
//conf["data"] = conf.langs[conf.lang];
conf["now"] = new Intl
.DateTimeFormat(conf.lang, {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
timeZoneName: 'longGeneric',
timeZone: conf.timeZone
}).format(new Date(Date.now()));
this.conf = new Object(conf);
console.log(
this.conf,
this.conf.lang,
conf,
conf.lang
);
sorgunun yavaşlama nedeni tüm kolonlarda arama yapıyor olman. örneğin kullanıcının eposta adresini arıyorsun ve bunu kullanıdı adına göre yapıyorsun, kodun şöyle olmalıdır;
SELECT email FROM tablo WHERE username LIKE "%value%"
birden fazla kolon için virgülle kullanacağın verileri çoğaltabilirsin
SELECT email, image, birthday FROM tablo WHERE username LIKE "%value%"
hiçbir sorgunda * işareti kullanmamanı şiddetle tavsiye ederim.
edit: ayrıca başlayan veya biten ifadeleri ile arama yapman daha hızlı sonuçlar döndürecektir.
bu başlayan araması örneği
SELECT email FROM tablo WHERE username LIKE "%r00t"
bu da biten
SELECT email FROM tablo WHERE username LIKE "r00t%"
var div = document.body;
div.scrollTop = div.scrollHeight;
önce yukarıdakini dene, scrollbar body'de ise aşağıya iner farklı bir elementte ise inmez.
var div = document.querySelector("main");
div.scrollTop = div.scrollHeight;
farklı elementte olduğunda da bunu kullanacaksın. buradaki main benim sayfama özel, senin scrollbar'ın nerede onu kontrol etmen gerekiyor.
değiştirmen için bazı örnekler;
<main>Bu benim divimdi doğrudan elementi seçtim, sayfada tek olduğu için</main>
<html></html>
<section></section>
<div class="container"></div>
<div id="container"></div>
var div = document.querySelector("html");
var div = document.querySelector("section");
var div = document.querySelector(".container");
var div = document.querySelector("#container");
bunlar da düzenlemen gerekirse, örnek seçiçiler.
varsayılan ayarlayabilirsin. tarayıcıya bakıp türkçe ise türkçeye yönlendirebilir, türkçe değilse else kısmına ingilizce falan koyabilirsin. veya referans url'i alıp, dili seçtikten sonra sayfaya yönlendirebilirsin. birkaç soru geride benzer bir soru var, yönlendirme için yanıtlara bakabilirsin https://prototurk.com/soru/6099-php-login
sunucu lazım her şeyden önce. sonra protokol seçmen gerekiyor, smtp veya imap. aralarında pek bir fark yok, smtp ssl yerine tls ile şifreleme yapıyor. birkaç ufak ayarlamadan sonrada, backend programlama gerekecektir diye düşünüyorum.
kurulum ve yapılandırma detayları için aşağıdaki bağlantıyı inceleyebilirsin
https://docs.microsoft.com/en-us/biztalk/install-and-config-guides/appendix-d-create-the-smtp-server
sunucu lazım her şeyden önce. sonra protokol seçmen gerekiyor, smtp veya imap. aralarında pek bir fark yok, smtp ssl yerine tls ile şifreleme yapıyor. birkaç ufak ayarlamadan sonrada, backend programlama gerekecektir diye düşünüyorum.
kurulum ve yapılandırma detayları için aşağıdaki bağlantıyı inceleyebilirsin
https://docs.microsoft.com/en-us/biztalk/install-and-config-guides/appendix-d-create-the-smtp-server
tekrar tekrar sunucuya istekte bulunmanın manası yok, zaten değer döndüğünde yine koşul yazacaksın. benim tavsiyem, çok farklı unsurlar yoksa ve byte açısından dönen değer uzun değilse, tek seferde aldığın veriyi farklı farklı alanlarda kullanmaya bak. hem performans açısından, hemde kullanılabilirlik açısından sürekli elinin altında bulunur. veri büyüksede, bir sınıf oluşturup, özelliklere göre ayrıştırarak kullan. gerekiyorsa sorgu başına önbelleğe de alabilirsin.
sayfada session başlattın mı? bence session da kupon bilgisini tutman tutarsızlıklara davetiye çıkartabilecek bir durum.
if($_POST["kupon"){
$kupon = $db->prepare("SELECT tutar FROM kupon where kod=:kod");
$ka = $kupon->execute(array(":kod"=>$_POST['kupon']));
$ka = $kupon->fetch(PDO::FETCH_ASSOC);
$toplam = $ka->rowCount() > 0 ?
$cek['uyelik_fiyati'] - (($cek['uyelik_fiyati'] * $ka['tutar']) / 100):
$cek['uyelik_fiyati'];
return $toplam;
}
ufak bir detay select de yıldız kullanma, ihtiyacın olan kolonu seç, daha performanslı olur. sorguladığın alanı seçmenede gerek yok, tutarı seçtim ama kod'u sorguladım örneğin.
böyle bi deneyi ver session'lardan da kurtulmaya bak. kupon için gereksiz.
element.SetAttribute('value', 'değer')
aldigin veriyi key => value seklinde dizi haline getir, daha sonra donguye al, dongu icinde de yukaridaki ornek ile inputlari doldur.