sunucudaki php sürümünüzle localhost'taki php sürümünüz aynı veya yakın olmalı.
PHP sürümünüzü kolayca öğrenmek için bir PHP dosyası oluşturun ve içine <?php phpinfo();
yazıp kaydedin.
Bu dosyayı hem localhost'ta hem sunucuda tarayıcıdan açın ve iki sayfa arasındaki versiyon farklarını bulun.
MariaDB demişsiniz. Sorun veritabanı sürümlerinizden kaynaklanıyor da olabilir elbet. Locahost'ta bağlandığınız veritabanıyla sunucudan bağlandığınız veritabanı arasında versiyon farklılığı varsa bazı SQL komutları birinde çalışıp birinde çalışmıyor olabilir.
PHP'nin ne hata verdiği de önemli. Görünen hatayı yazarsanız daha detaylı cevap vermek mümkün olabilir.
Eğer sunucu hataları gösteremiyorsa, erişmeye çalıştığınız PHP sayfasının başına şu kodları yazmayı deneyebilirsiniz:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Böylece sunucuda ayrıca bir ayar yapılmamışsa sayfanız hatayı gösterecek şekilde sonuç gösterecektir.
Denemedim ama stackoverflow.com/nasıl-senkron-http-istek-atabiliriz sorusuna verilen şu cevap iş görebilir:
Doğru kabul edilen cevap şu şekilde yazılmış:
open()
fonksiyonundaki 3. parametre asenkron istek göndermek içindir. Senkron istek atmak için false
olarak ayarlayabilirsin.
function handleButtonPress(e) {
var httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = handleResponse;
httpRequest.open("GET", e.target.innerHTML + ".html", false);
httpRequest.send();
}
Siz XMLHttpRequest sınıfını kendi isteğinize göre kullanarak istek oluşturabilirsiniz.
Diyelim ki ürünün tarih verisini MySQL'den alıp $mysqlDate
değişkeninde atadınız.
$mysqlDate = "2022-10-28 21:45:51";
O halde $mysqlDate
değişkenindeki değerin "bugün" olup olmadığını anlamak için aşağıdaki kodlar iş görür.
$activeDate = date("Y-m-d", strtotime($mysqlDate));
$today = date("Y-m-d");
$isActiveDate = $activeDate == $today;
unset($activeDate, $today);
Böylece elinizde $isActiveDate
adlı bir değişken var.
Bu değişkene, eğer $mysqlDate
'te tutuğunuz tarih bugünse true
, değilse false
değeri atanmış durumda.
Bir <div>
'i bu değere göre göstermek istiyorsanız <div>
'i php if koşuluna sarabilirsiniz:
<div class="product">
<img class="img" source="<?=$productImg?>" />
<div>
<h1><?=$productName?></h1>
<div class="price"><?=$price?></div>
<?php if($isActiveDate) { ?>
<div>Bugün bu ürünün aktif günü!!!</div>
<?php } ?>
</div>
</div>
Axios'un senkron desteği yok. Axios mutlaka Promise dönmek üzere tasarlandı. Axios'u senkron yapmanın yolu olarak sizin de aklınıza gelmiş olabilecek yollardan başka bir yol yok.
Axios isteğinden sonra çalışacak tüm işlemleri bir fonksiyon içine alabilir ve axios'tan yanıt geldiğinde bu fonksiyonu çağırabilirsiniz.
Eğer kodunuz buna uyum sağlayamayacaksa axios'tan başka çözüm yollarına gitmelisiniz.
API istekleri için özellikle yazılmış bir makale var mı bilmiyorum.
Genel olarak sayfalarınızı nasıl cache'leyebileceğinizle ilgili aşağıdaki yazıyı buldum:
https://insta.gen.tr/php-cache-yapimi-tarayici-onbellekleme-kullanimi/
Burada API isteklerinizi değil sayfalarınızı cache'liyorsunuz. Daha detaylı bir açıklama yazmak için benim vaktim yok ne yazık ki.
Merhaba. Verilerin daha hızlı gelmesini sağlamanız sizin tarafınızda pek mümkün değil. Yani sunucunuzun internet hızını artırabilirsiniz belki ama geç cevap verme çoğunlukla api'nin sunucularından kaynaklıdır.
Şöyle bir öneri sunabilirim:
Kendinize bir cache mekanizması kurabilirsiniz. API'a attığınız aynı isteklere aynı yanıtlar dönüyorsa tekrar tekrar istek atmanız gerekmez. Gelen isteğin yanıtını bir dosyaya kaydedersiniz ve mesela 1 saat boyunca aynı isteği atmak yerine bu dosyanızdaki veriyi okursunuz. Böylece kendi sunucunuzda bulunan dosyadan veri okumak, API'dan veri okumaktan çok çok daha hızlı sonuç verir.
Kendinize bir fonksiyon oluşturmalısınız. Bu fonksiyon,
- API'a atılmak istenen isteği alacak.
- Yeni bir istek atıp atmayacağını belirleyen bir değişken başlangıçta false değeri alacak.
- Daha önce atılan istekleri kaydettiği dosyadan bu isteğin daha önce atılıp atılmadığını bulacak.
- İstek daha önce atılmışsa
- Atılan isteğin zamanının dolup olmadığını kontrol edecek.
- Eğer isteğin zamanı henüz dolmamışsa:
- İsteğin sonucunu hangi dosyaya yazdığını alacak.
- Sonuç olarak fonksiyon bu dosyanın içeriğini return edecek ve fonksiyon sonlanacak.
- Eğer isteğin zamanı dolmuşsa:
- İsteğin sonucunu yazdığı dosyayı silecek.
- Kendisinde de bu isteği barındıran veriyi silecek.
- Yeni istek atılması gerektiğini belirten değişken true yapılacak.
- Daha önce istek atılmamışsa
- Yeni istek atılması gerektiğini belirleyen değişken true yapılacak.
- Yeni istek atılması gerektiğini belirleyen değişken true ise
- API'a istek atacak.
- İsteğin yanıtını bir dosyaya kaydedecek.
- İsteğin kendisini, yanıtını yazdığı dosyayı ve isteğin geçerlilik süresini (örn 1 saat) istekleri tuttuğu dosyaya kaydedecek.
- API sonucunu return edecek ve fonksiyon sonlanacak.
Bu algoritmayı sadece anlık değişmeyen API endpoint'leri için kullanabilirsiniz. Eğer API'dan gelen veri aynı isteği yapmanıza rağmen her seferinde farklı bir yanıt verebilecekse bu yöntemi kullanamazsınız çünkü kullanıcıya eski veri göstermiş olursunuz.
Kodunuzda çok fazla yazım yanlışı var. Aşağıdaki şekliyle sizinki arasındaki farkları inceleyebilirsiniz:
function islemsonucugoster() {
var islemsonuc = document.getElementById("islemsonucu");
// var sayi1 = parseInt(document.getElementById(sayi1));
// siz burada input'u değil, input'un kapsayıcısı olan div'i seçmeye çalışmışsınız.
// input'u seçmiş olsaydınız bile input'un value'sini değil direkt input elementinin kendisini seçmiş olacaktınız.
var sayi1 = parseInt(document.querySelector("#sayi1 > input").value);
// var sayi2 = parseInt(document.getElementById(sayi2));
// Burada da yine input'u değil kapsayıcısını seçmeye çalışmışsınız. sayi1 ile aynı.
var sayi2 = parseInt(document.querySelector("#sayi2 > input").value);
// document.getElementsByTagName(Option).value;
// Ama hangi option'un value'si? Seçilmiş olan option'a ulaşmak için select elementinin değerini almalısınız.
var secilendeger = document.querySelector(".islemisareti").value;
if(secilendeger == "1") {
islemsonuc = sayi1 + sayi2;
islemsonucu.innerHTML = islemsonuc;
} else if(secilendeger == "2") {
islemsonuc = sayi1 - sayi2;
islemsonucu.innerHTML = islemsonuc;
} else if(secilendeger == "3") {
islemsonuc = sayi1 * sayi2;
islemsonucu.innerHTML = islemsonuc;
} else if(secilendeger == "4") {
// islemsonucu = sayi1 / sayi2;
// "islemsonuc" yazmak yerine "islemsonucu" yazmışsınız.
islemsonuc = sayi1 / sayi2;
// islemsonucu.innerHTML = islemsonucu;
// burada da "islemsonuc" ve "islemsonucu" kelimelerini karıştırmışsınız.
islemsonucu.innerHTML = islemsonuc;
}
}
echo "<div class='kelimeler'>";
foreach($h as $item) {
echo "<div class='kelimeKapsayici'>";
$kelime = $item["kelime"];
echo " <div class='kelime'>";
echo " <div>Kelime:</div>";
echo " <div>$kelime</div>";
echo " </div>";
echo " <div class='anlamlar'>";
echo " <div>Anlamlar</div>";
if(isset($item["anlamlar"]) && is_array($item["anlamlar"])) {
foreach($item["anlamlar"] as $anlam) {
$anlamStr = $anlam["anlam"];
$ozellik = $anlam["ozellik"];
echo "<div class='anlam'>";
echo " <div>";
echo " <div>Özellik:</div>";
echo " <div>$ozellik</div>";
echo " </div>";
echo " <div>";
echo " <div>Anlam:</div>";
echo " <div>$anlamStr</div>";
echo " </div>";
echo "</div>";
};
}
else echo "<div>Anlam bulunamadı</div>";
echo "</div>";
echo "<div class='birlesikler'>";
if(isset($item["birlesikler"]) && is_array($item["birlesikler"])) {
foreach($item["birlesikler"] as $birlesik) {
echo "<div>$birlesik</div>";
};
}
else echo "<div>Birleşikler bulunamadı</div>";
echo "</div>";
echo "</div>";
echo "<hr />";
};
echo "</div>";
2 sözcük çıkarsa zaten ayrılıyor olmalı. Onu düşünerek yazdım.
İlk foreach'in ilk div'ine stil verebilirsiniz margin-top gibi.
echo "<div class='kelimeler'>";
foreach($h as $item) {
echo "<div class='kelimeKapsayici'>";
$kelime = $item["kelime"];
echo " <div class='kelime'>";
echo " <div>Kelime:</div>";
echo " <div>$kelime</div>";
echo " </div>";
echo " <div class='anlamlar'>";
echo " <div>Anlamlar</div>";
if(isset($item["anlamlar"]) && is_array($item["anlamlar"])) {
foreach($item["anlamlar"] as $anlam) {
$anlamStr = $anlam["anlam"];
$ozellik = $anlam["ozellik"];
echo "<div class='anlam'>";
echo " <div>";
echo " <div>Özellik:</div>";
echo " <div>$ozellik</div>";
echo " </div>";
echo " <div>";
echo " <div>Anlam:</div>";
echo " <div>$anlamStr</div>";
echo " </div>";
echo "</div>";
};
}
else echo "<div>Anlam bulunamadı</div>";
echo "</div>";
echo "<div class='birlesikler'>";
if(isset($item["birlesikler"]) && is_array($item["birlesikler"])) {
foreach($item["birlesikler"] as $birlesik) {
echo "<div>$birlesik</div>";
};
}
else echo "<div>Birleşikler bulunamadı</div>";
echo "</div>";
echo "</div>";
};
echo "</div>";