Evet kesinlikle sadece dosya isimlerini tut, hem veritabanında daha az yer kaplarlar veri arttıkça gecikme yaşamazsın hem de client-side tarafında linklendirmek daha esnek olur senin için.
Güncel sürümünü kullanıyorsan şu şekilde yapabilirsin;
$db->update('uyeler')
->set('bildirim', '+1');
$db->update('uyeler')
->set('bildirim', '-1');
ilk olarak 2. bir sunucun olmalı. Bu sunucu, güncellemeleri vereceğin sunucun olacak. Örneğin şu adreste versiyonu json formatında tutacaksın;
https://site.com/version.json
Ve mevcut script'de yönetim tarafında bu adrese istek atıp güncel versiyonu kontrol edeceksin. Bu arada mevcut scriptinde de versiyon'u tutacağın bir php dosyan olmalı.
Eğer mevcut scriptindeki versiyon ile 2. sunucudaki versiyon aynı değilse yeni versiyon var gibi kabul edip yükleme sayfasına yönlendireceksin.
Yükleme sayfasında, 2. sunucudaki güncel dosyalarının zipli halini curl yardımı ile indirteceksin.
Ve phpdeki zip sınıfı yardımıyla bunu açacaksın, otomatik olarak varolanların üzerine yazılacak zaten dosyalar. Böylece versiyonun güncellenmiş olacak.
Burada dikkat etmen gereken şey, güncelleme yaptığın dosyaların tamamen sistem dosyası olması gerek ve üzerinde oynanmamış olması gerek. Tıpkı wordpressde olduğu gibi, core dosyaları üzerinde kimse değişiklik yapmadığı için güncelleme işlemi yapılabiliyor. Eğer sen core dosyalarında bir değişiklik yapıp yeni versiyona güncellersen bu güncellemelerin gidecektir.
domain ve hosting olduktan sonra, ftp ile hostinge bağlanıp resmini yükleyebilirsin.
tam olarak takıldığın yer nedir?
kısaca;
.elem {
position: sticky;
position: -webkit-sticky;
top: 0;
}
ob = output buffering = çıktı tamponlama diyebiliriz.
Örneğin yorum gönderme işlemini ajax ile yaptığını düşünelim. Ve listelenen yorumlarıda bir php dosyasında tutuyorsun. Ve ajax ile yorum gönderdiğinde bu yorum sayfasını kullanmak istiyorsun.
Fakat require ya da include kullanırsan direk çıktıyı bastıracaktır. Bu durumda ob kullanarak çıktıyı sonradan yazdırmak üzere saklayabilirsin.
ob_start();
require 'view/comment.php';
$output = ob_get_clean();
//echo $output;
echo etmediğin sürece çıktın gözükmeyecektir.
Çok güzel bir soru olmuş aslında :) Normal şartlarda eğer şöyle bir yapın olsaydı;
let array = ['test', 'deneme'];
let clone_array = array;
clone_array.push('yeni değer');
console.log(clone_array); // ["test", "deneme", "yeni değer"]
console.log(array); // ["test", "deneme", "yeni değer"]
referans alarak kopyalayacaktı. Ancak ES6 ile spread operatörünü kullanarak referanssız bir şekilde kopyalayabiliyoruz.
let array = ['test', 'deneme'];
let clone_array = [...array];
clone_array.push('yeni değer');
console.log(clone_array); // ["test", "deneme", "yeni değer"]
console.log(array); // ["test", "deneme"]
Ancak aynı örneği senin örneğindeki gibi dizi içerisinde obje tutarak yaparsak diziyi referanssız kopyalasada içindeki objeyi referanslı kopyalıyor. Dolayısı ile kopya dizide değişiklik yapınca mevcut diziyide etkiliyor.
let array = [
{
"name": "Tayfun",
"surname": "Erbilen"
}
];
let clone_array = [...array];
clone_array[0].name = "Recep";
console.log(clone_array); // {name: "Recep", surname: "Erbilen"}
console.log(array); // {name: "Recep", surname: "Erbilen"}
Biraz araştırma yaparak şöyle objeleride referanssız kopyalamak için JSON objesini kullanabilirsin.
let array = [
{
"name": "Tayfun",
"surname": "Erbilen"
}
];
let clone_array = JSON.parse(JSON.stringify(array));
clone_array[0].name = "Recep";
console.log(clone_array); // {name: "Recep", surname: "Erbilen"}
console.log(array); // {name: "Recep", surname: "Erbilen"}
Yani senin örneğinde ise şöyle olacak;
let sourceList = [
{
sourceName: 'ASdasd',
channels: [{
channelName : 'aaa'
}]
},
{
sourceName: 'ASdasd',
channels: [{
channelName : 'bbb'
}]
},
{
sourceName: 'ASdasd',
channels: [{
channelName : 'ddd'
}]
},
{
sourceName: 'ASdasd',
channels: [{
channelName : 'ggg'
}]
},
{
sourceName: 'ASdasd',
channels: [{
channelName : 'ssss'
}]
}
];
let arr = JSON.parse(JSON.stringify(sourceList));
const searchParameter = 'bbb'
for(let source of arr) {
let _arr = source.channels.filter(c => {
return c.channelName.indexOf(searchParameter) > -1;
})
source.channels = _arr;
}
console.log(arr);
console.log(sourceList);
İlk olarak yapacağın şey, giriş yaptığında e-posta adresini SESSION'da tutmak.
İkinci olarak yapacağın şey, veritabanında e-posta alanını unique olarak ayarlamak. Yani benzersiz olacak, dolayısı ile hiçbir kontrol yapmadan güncelleme işlemini doğrudan yaptığında zaten 2. bir kişi aynı e-posta adresini kullanıyorsa bu güncelleme işlemi başarısız olacak çünkü e-posta alanın unique olduğu için hata verecek. Böylece 2. sorgu yapmadan işini çözeceksin. Kısaca;
$sessionEposta = $_SESSION['eposta'];
$eposta = "[email protected]";
$uye_id = 5;
if ($eposta == $sessionEposta){
echo "Şu an güncel olarak kullandığın e-posta adresin aynı.";
} else {
$update = $db->prepare('UPDATE uyeler SET eposta = :eposta WHERE uye_id != :uye_id');
$result = $update->execute([
'eposta' => $eposta,
'uye_id' => $uye_id
]);
if ($result){
echo "E-posta adresin başarıyla değiştirildi.";
} else {
echo "E-posta adresi, bir başkası tarafından kullanılıyor. Lütfen kontrol et.
}
}
yok ya aslında çok ciddi cevap yazmadım ama emoji falan kullanmayınca çok ciddi bir cevapmış gibi görünmüş olabilir :D Sadece demek istediğim bu kadar küçük şeylerde büyük sonuçlar beklemenin bir anlamı yok demek istedim :) İşler ilerledikçe, kodlar karmaşıklaştıkça, sayfalar çoğaldıkça, db büyüdükçe vs. bunların hepsi birer etken olacak. Ve yine kazanan sen olacaksın :)
Bence burada bir yanlış anlaşılma var. Spagetti php yazmakla oop yazmak arasında farklar olduğu doğru ancak bu kadar basit bir örnekte bunu ölçüp oop yavaş mı diye sormak mantıksız :)
Bu kadar basit örneğin varsa zaten php bile kullanma, normal html sayfası yap geç. Burada önemli olan sonrasında ne olacağı. Ayrıca doğru oop yapısını kurduğunu her şeyi doğru yaptığına emin ol ki ondan sonra oop yavaş mı acaba diye sor.
Ve allah aşkına, şunun için benchmark testi yapmaya bile değmezdi :)