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 :)
User sınıfını DB sınıfından extend edebilmenin yolu DB'nin construct metodunu User'da çağırmaktır. Diğer türlü DB'de construct metodu olduğu için User metodunun hata vermesi normal.
toLocaleUpperCase()
metodunu kullanabilirsin toUpperCase()
yerine böylece türkçe karakterlerde sorun yaşamazsın.
window.location.reload(true)
kodunu denedin mi?
geliştirici aracını açıp ajax isteğini gerçekleştirin network'da giden dataları bir kontrol edin, yani tek bir ihtimali var o da bu değerin gelmiyor oluşu. Yoksa istisna yapmaz php bu konularda.
appstore'dan "Microsoft Remote Desktop" uygulamasını kurman yeterli.
https://apps.apple.com/us/app/microsoft-remote-desktop-10/id1295203466?mt=12