$("#yayinci").animate({ scrollTop: $("#yayinci").attr("scrollHeight") }, 1500);
satırındaki
$("#yayinci").attr("scrollHeight")
ifadesi size #yayinci
elementinin scrollHeight
attribute'sindeki değeri verir. Ama bu elementinizin böyle bir attribute'si yok.
Ayrıca siz #yayinci
elementi içinde bir scroll yapmaya çalışıyorsunuz. Oysaki muhtemelen body
elementinin scroll'unu kaydırmak istiyorsunuz.
Yani sanırım siz orda şunu demek istediniz: $("body").animate({ scrollTop: $("#yayinci").offset().top}, 1500);
Hata diyor ki:
C:\xampp\htdocs\datayukle\class.upload.php dosyasındaki 2662.satırda, küme parantezleri ile bir array veya string elemanına erişim söz dizimi kullanılmış ama bu söz dizimi artık desteklenmiyor.
Kullandığınız Verot class'ının uyumlu olduğu PHP sürümü ile sizin sunucunuzdaki PHP sürümü uyumsuz gibi görünüyor.
Muhtemelen kullandığınız Verot class'ı PHP'nin 7.4 versiyonundan önceki versiyonlara göre yazılmış ve şöyle bir kullanımla array veya string bir değişkenin index'ine ulaşılmaya çalışılmış: $degisken{0}
PHP 7.4'ten itibaren bu yöntem kullanımdan kaldırıldı ve şu şekilde köşeli parantezli kullanım zorunlu oldu: $degisken[0]
3 yoldan biriyle çözebilirsiniz:
1) Sunucunuzdaki PHP versiyonunu 7.4'ün altında bir sürüme düşürün. Tabi bu başka sorunlara neden olabilir.
2) Hatalı satırı düzeltin: Örnek verdiğim gibi küme parantezli bir kullanım varsa bunu köşeli paranteze çevirin.
3) Verot class'ınızı daha güncel bir versiyonuyla değiştirin. (tavsiyem)
Roblox oyununu ve API'ını hiç bilmediğim için kısa bir araştırdım.
Google'da "roblox api" yazdığım zaman karşıma https://api.roblox.com/docs çıktı. Burada API'ın hangi endpoint'lerine nasıl istek atılacağı açıklanmış.
1) https://api.roblox.com/users/get-by-username?username=thandito şeklinde GET isteği attım ve sonuçta thandito adlı kullanıcının verileri geldi. Yani kullanıcı adından kullanıcı id'sini almak mümkün.
2) https://api.roblox.com/users/1 şeklinde istek atınca da id'si 1 olan kullanıcının verileri geldi. Yani id'den kullanıcı adı almak da mümkün.
Sizin işinize yarayacak olan endpoint 1.si olabilir. Ama bu endpoint, kullanıcı adının tamamının doğru şekilde (büyük-küçük harf duyarlı değil) yazılmasını istiyor. Yani thandito yazdığınızda Thanditoy, thanditop2k11, thanditoni gibi diğer kullanıcı adlarını bu yolla alamıyorsunuz.
Bu durumda tüm kullanıcıları kendi sisteminize çekmeyi denemeyi düşünebilirsiniz. Yani id ile arama yapıp 1'den x'e kadar kaç kullanıcı varsa hepsini kendi sisteminize ekleyip, aramaları kendi sisteminiz içinde kendi algoritmanıza göre yapmayı düşünebilirsiniz.
Az sayıda kullanıcı olsa bu uygun bir çözüm olabilirdi ama acaba kaç kullanıcı var diye bi'deneme yaptım ve yüksek bir Id değeri denedim.
https://api.roblox.com/users/3629318000 şeklinde istek attım ve sonuç döndü. Yani sistemlerinde şu an kayıtlı 3.629.318.000'den fazla kullanıcı kaydı var ve sürekli artmaya devam ediyor.
Bir script yapıp şu ana kadar kaydolmuş tüm kullanıcıların verilerini almak amacıyla tek tek her kullanıcı için istek atmak isterseniz ve bu işlemi çok hızlı yaparsanız sistem sizi saldırı yaptığınızı düşünerek engelleyecektir. 1 saniyede 1 istek atarsanız da işleminiz 40 günden uzun sürer.
Yani kullanıcı adı üzerinden arama yapıp kullanıcı adının tamamının doğru girilmesini sağlamalısınız.
Yine de bu API'ı kullanmanız geçici bir çözüm olacak gibi görünüyor. Çünkü şöyle bir uyarı koymuşlar:
Merhaba geliştiriciler. Platformumuzun güvenilirliğini artırmak ve ölçeklenebilirliği geliştirmek için ApiProxy'yi kullanımdan kaldırıyoruz. Daha fazla bilgi için https://devforum.roblox.com/t/action-needed-sunsetting-apirobloxcom/1796897 adresine bakın.
Bahsettiği linkte de demiş ki:
15 Temmuz 2022'den itibaren, api.roblox.com'dan API endpoint'leri kaldırmaya başlayacağız. Tüm endpoint'lerin yıl sonuna kadar kaldırılması planlanıyor.
Bu değişiklik yalnızca üçüncü taraf sunuculardan, tarayıcı eklentilerinden veya araçlardan api.roblox.com'a istekte bulunan geliştiricileri etkiler.
Sadece Roblox oyun motorunun içinde geliştirme yapıyorsanız herhangi bir değişiklik yapmanıza gerek yok.
Lütfen api.roblox.com'a dayanan tüm araçları, tarayıcı eklentilerini veya üçüncü taraf sitelerini aşağıda listelenen daha yeni uç noktalara güncelleyin.
Buralarda dolaşırken bir API daha gördüm: https://users.roblox.com/docs
Şöyle bir istek attım: https://users.roblox.com/v1/users/search?keyword=thandito&limit=10
10 kullanıcıyla sınırlı olmak üzere "thandito" kelimesiyle arama yapıp birkaç kullanıcıyı döndürdü. Bu tam aradığınız şey.
Ama sanırım bunun da kullanımını kaldıracaklar. Zaman ayırıp detaylı okumak lazım. Şu an benim gibi herhangi birine veri sunan bu API'ların kullanımını sonlandırıp sadece kayıtlı geliştiriciler için bi'şeyler sunmayı mı planlıyorlar bilemedim.
Muhtemelen herkesin istek atmasını önleyerek hem saldırıların bir kısmının önüne geçmek hem de sunucularını biraz daha rahatlatmak istiyorlar.
Demem o ki, buraları kurcalayıp işinize yarar bi'şeyler bulabilirsiniz.
Deneyip yapamadığınız bi'şey varsa doğrudan kodlarınız üzerinden yorum yapabiliriz.
// input olayı gerçekleştiğinde sayı veya "." karakteri hariç her şeyi sil:
<input oninput="this.value=this.value.replaceAll(/[^\d\.]/g, '');">
Doğru. Bir fonksiyon çalıştırılırken return ifadesine denk geldiği anda fonksiyon sonlanır. return ifadesinden sonraki satırlar çalıştırılmaz.
Örneğin:
function test() {
const a = 10;
const b = 15;
const c = 35;
return a + b;
return a + b + c;
}
// Çıktı: 25
function test() {
const a = 10;
const b = 15;
const c = 35;
if(a+b >= 30) { return a + b; } // Koşul sağlanmadığı için if bloğu çalışmadı ve bu return işletilmedi.
return a + b + c;
}
// Çıktı: 70
function test() {
let a = 0;
for(let i=0; i < 30; i++) {
if(a > 10) return a; // a değeri 11'e ulaştığı zaman if koşulu sağlanacağı için return işletilir ve fonksiyon sonlanır. Haliyle for döngüsü de bu noktadan sonra çalışmaz.
a++;
}
return a;
}
// Çıktı: 11
Aşağıdaki örnekte myButton id'li bir butona click olayını işliyoruz.
Butona tıklandığında butonda wait adında bir class var mı diye kontrol ediyoruz. Varsa hiçbir işlem yapılmaması için return ifadesi koyuyoruz.
Sonraki satır işletiliyorsa wait adında bir class yok demektir. Bu class'ı butona ekliyoruz.
setTimeout yardımıyla 5 saniye sonra wait class'ını butondan siliyoruz.
Haliyle butona ilk tıkladığımızda konsola "BUTON ÇALIŞTI" yazacak. Sonra 5 saniye boyunca butona ne kadar tıklarsak tıklayalım "BUTON ŞU AN MEŞGUL" yazacak ve return sayesinde bundan sonraki satırlar işletilmeyecek.
Bu şekilde mesela bir ajax isteği yapıyorsanız, ajax isteği sonlanıncaya kadar butona tekrar tekrar basıldığında tekrar tekrar ajax isteği atılmasını önleyebilirsiniz.
$("#myButton").on("click", function() {
const $thisButton = $(this);
if($thisButton.hasClass("wait")) {
console.log("BUTON ŞU AN MEŞGUL");
return;
}
$thisButton.addClass("wait");
console.log("BUTON ÇALIŞTI");
setTimeout(function() { $thisButton.removeClass("wait"); }, 5000);
});
name ve class bölümlerini doğru şekilde eklemişsiniz.
value ekleme işini label'i clone'ladığımız yerde yapabiliriz.
$item.find("span").text(sehir.ilceleri[i]);
satırının hemen altına
$item.find("input[type=checkbox]").val(sehir.ilceleri[i]);
satırını ekleyebilirsiniz.
codepen.io pen'ini de düzenledim.
Direkt çalışmasını istiyorsan da aynı yöntemi kullanabilirsin. Mesela:
<div class="ekleyen">
İlanı Kim Ekledi ?:
<div id="ekleyen">...</div>
<script>
function ekleyenn(parametre1, parametre2, parametre3) {
const element = document.getElementById("ekleyen");
// Bu elemente ulaştıktan sonra üzerinde istediğin manipülasyonu yapabilirsin.
// Mesela biz ilk parametreyi ve diğer 2 parametrenin toplamını elementin içine yazalım:
element.innerHTML = parametre1 + ": " + (Number(parametre2) + Number(parametre3));
}
ekleyenn("Ekleyen Adı",10, 20);
</script>
</div>
Anladığımdan emin değilim ama siz, element oluştuğu zaman onclick olmasına gerek kalmadan bir js fonkisyonu çalışsın istiyorsunuz sanırım.
Elementiniz şunlardan biri olsaydı:
<body>
, <frame>
, <frameset>
, <iframe>
, <img>
, <input type="image">
, <link>
, <script>
, <style>
o zaman onload
olayını tıpkı onclick
olayını kullandığınız gibi kullanabilirdiniz.
<sup>Kaynak</sup>
Ama siz <div>
'in oluşmasınan hemen sonra bir js fonksiyonu çalışsın istiyorsanız <div>
'inizin hemen peşine <script>
ekleyebilirsiniz.
<script>
i eklediğiniz sırada div#ekleyen elementiniz DOM'a eklenmiş olacağı için ona doğrudan erişip işlem yapabilirsiniz.
Örneğin:
<div class="ekleyen">
İlanı Kim Ekledi ?:
<div id="ekleyen">...</div>
<script>
document.getElementById("ekleyen").innerHTML = "Ekleyen Adı";
</script>
</div>
Sorunlarına çözüm bulunca Doğru Cevap olarak işaretlemeyi pek tercih etmeyen @ilkertuncer adlı kullanıcıya vaktiyle verdiğim PHPMailer Örneği cevabıma göz atabilirsiniz.
Bu cevabımda bir sorun var mıydı? Bilmiyorum. Çünkü yaşadığı sorunun çözümünü cevap olarak yazmak ve doğru cevabı işaretlemek yerine aynı başlık altında bana başka soru sormayı tercih etmişti.
Ara sıra siz de doğru cevap işaretlemeyi atlamışsınız.
Mesela buradaki veya buradaki sorularınızda doğru cevap belli değil. Siz çözmüşseniz de nasıl çözdüğünüzü yazmamışsınız.
Bakın örneğin burada size cevap veren 3 kişiye teşekkür edip sorunu farklı bir yolla çözdüğünüzü belirtmişsiniz ama nasıl çözdüğünüzü de yazıp doğru cevap olarak işaretlemediğiniz için Çözülmemiş Soru olarak kalmış.
Buradaysa nasıl çözdüğünüzü teorik olarak yazmışsınız ve cevap yazanlara teşekkür etmişsiniz ama soru halen çözülmeyi bekleyen sorular arasında...
Buradaysa cevabımın kopyala yapıştırla uğraştırması nedeniyle başka bir plaftorm üzerinden cevabı oluşturmamı istemişsiniz ve güzel bir düşünce olduğunu düşünerek istediğiniz şekilde yanıt vermişim. Hatta bu cevaptan sonra başkalarının sorularında da önerdiğiniz yöntemi kullandım. Ama ne yazık ki size verdiğim cevabın doğru olup olmadığı yine Çözülmemiş Soru olarak kalmış.
Hadi mesela burada ise kapsamı çok geniş bir soru sormuşsunuz ve cevaplarımız sizi tatmin etmemiş olabilir. Bu soruya daha geniş kapsamlı bir cevap bekliyor olabilirsiniz ki bu iyi de olur çünkü bunu sizin gibi merak eden başkaları da konuyla ilgili daha derinlemesine bilgiye sahip olmak isteyeceklerdir. Ama bu durumda da doğru cevabı halen almadığınızı düşünüyorsanız nasıl bir cevap istediğinize dair bir cevap yazarak konunun ilerlemesini sağlamalı ve sonuca ulaşıncaya kadar devam etmelisiniz. Yoksa bu soru yıllarca çözülmemiş kalır.
Oysaki burada, burada ve burada sorunuza doğru cevap bulduğunuzda işaretlemişsiniz ve bu platformu olması gerektiği gibi kullanmışsınız.
Bunlar sadece benim size cevap verdiğim sorular. Böyle bir bakınca bugüne kadar sizin 9 sorunuza dahil olmuşum ve bu soruların sadece 3'ünde doğru cevabı bulduğunuzu belirtmişsiniz. Eğer benim cevap vermediğim sorularınızda da bunu yapıyorsanız sorularınızın 2/3'ü cevaplandığı halde çözülmemiş soru olarak kalıyor.
Bu yalnız sizin yaptığınız bi'şey değil tabi. Muhtemelen sorununuzu çözdükten sonra buraya geri dönüp doğru cevap işaretlemeyi unutuyorsunuzdur veya aklınıza geldiğinde de vaktiniz olmuyordur -ki zaten bu platformu sık kullanıyorsunuz ve sıklıkla yeni sorunlarla ilgileniyorsunuz- ve haliyle hızlıca ileri gitmekten geriyi toplamaya fırsatınız olmuyor.
Benim buna takılma nedenim; bu platformun amacına uygun kullanılmadığını düşünmem.
Normalde bu platformun birçok eksiği var.
Profilimiz yeterince detaylı değil ve düzenlenemiyor. Sorularda ara özelliği yeterince fazla sonuç göstermiyor.
Cevaplarda kişi etiketleme yok.
Sizin soru olarak açtığınız Acilen mesaj reportlama gelmesi lazım! başlıklı talebiniz var mesela.
Tabii ki Tayfun ERBİLEN bunların hepsini yapabilir. Hatta yanılmıyorsam uzmancevap.org projesinde bunlardan da fazlasını düşündüğünü (pazar yeri gibi) göstermişti. Ama bu onun gönüllülük esasına göre geliştirdiği bir proje ve platformunun onun hayal ettiği gibi kullanılmadığını gördünce gönüllüğünü yitiriyor. Hatta sanırım Gökhan KANDEMİR ile yaptığı, YouTube'dan izlediğim bir yayında bu rahatsızlığını dile getirmişti.
Şu an bu projeyi eksiklerini de gidererek başka bir domain altında ben de yapabilirim. Ama benim de Tayfun ERBİLEN kadar geniş bir kitleye projemi ulaştırmam mümkün olmaz. Elimizde binlerce yazılımcıyı tek çatı altında toplayabilecek etkiye sahip bir adam var ve üşenmeyip bize bu platformu kurmuş ama biz onu düzgün kullanıp geliştirmek yerine veri çöplüğüne çeviriyoruz. Eminim şu an bu platformda da Tayfun ERBİLEN özellikle engellemese (uzmancevap.org'da olduğu gibi) sorusuna çözüm bulunca soruyu tüm cevaplarıyla birlikte silmeye çalışacak saygısız, bencil kullanıcılar vardır.
İç Dökme Sonrası Cevap
@ilkertuncer adlı kullanıcıya vaktiyle verdiğim PHPMailer Örneği cevabıma göz atabilirsiniz.
Belki soru orada başladı ama burada sonlanır. Bu örnek bende çalışıyor. Sizde çalışmazsa ne hatayla karşılaştığınızı yazarsanız yardımcı olabiliriz.