Sorunu çözdüm,
PHP 'nin set_error_handler fonksiyonu işimi gördü.
Daha sonra aynı sorunu yaşayanlar için bırakıyorum :)
@abdullahx, istemeyiz lakin olabiliyor :)
Phpstorm lisanslı kullanıyorum, hata ayıklamada sorun yaşamıyorum.
Sorunum anlık hatalarda kullanıcıyı fatal error veya garip php hata tanımları ile karşılamak istemiyorum :)
En basitinden, veritabanından gelen bir tanımım var diyelim. Ben bunu bir anlık değiştirdim, o an sayfamda bulununan kullanıcılar böyle bir tanım bulunamadı gibi bir mesajla karşılacaklar.
Artı olarak, bu hata mesajında benim path yolumda yazıyor. İşte şu yolda şu dosyada şu tanım bulunamadı gibi.
Bu sefer hatayı gizlesem fatal error çıkıyor, sayfa hiç çalışmıyor.
Onun dışında tüm işlemlerimde ki bu binden fazla yapar, kontrol yaparsam dinamik bir yapının anlamı kalmaz. Her taraf if else if else dolar gider.
index.php'mde veya App sınıfımda bir if koşulu yazmak istiyorum sadece. Sayfanın herhangi bir yerinde bir hata mesajı varsa (ki bu direk display_errors tan gelen mesaj)
kullanıcıyı nazik bir şekilde atıyorum bir çalışma yapılıyor daha sonra gelin diye bir sayfaya yönlendirmek :)
Rica ederim, aslında bu bahsettiğiniz diğer cevapta kısmen bulunmakta. Orada bir dizi ile status ve message tutulmuş.
Ajax isteminizde success veya error function(response) kısmındaki response php betiğinden gelen json formatındaki sonucu sizin almanıza olanak sağlıyor.
Yani örnekten yola çıkarsak response.message size "Giriş başarılı" metnini döndürecektir.
Sizin burada eklemeniz gereken, boş olmamasını istediğiniz post elemanlarını bir diziye atıp error response kodu ile geri döndürmek.
Ajax betiğinizdeki error kısmında da bunu response.errorValues gibi bir tanımla kontrol edebilirsiniz. Parçalayabilirsiniz.
Bir örnek vermek gerekirse;
if($_POST...
$attiributes = [
"firstname" => "Ad",
"email" => "E-Posta Adresi"
]
$errorValues = [];
foreach($_POST as $key => $val){ //Post ile gelen elemanları parçaladık
if(is_null($val)){ //Elemanın değeri boşmu diye sorduk
$error_values = [ //Boşsa dizimize bunu eklemek istiyoruz
"attr" => $key, //Error values dizimize boş olan değeri atadık, örneğin firstname
"message" => $attiributes[$key]." boş olamaz" //Burada hatalı alanı kullanıcıya verdik. Ortalama sonuç bu oalcaktır; "E-Posta Adresi Boş olamaz, Ad boş olamaz vb."
]
}
}
if($errorValues){ //Eğer formda bir hata varsa hatayı döndür
http_response_code(400);
echo json_encode([
"status" => false,
"message" => "Eksik veya hatalı alanları kontrol edin",
"errorValues" => $errorValues
]);
return false;
}
ajax isteminde error network durumunu dinler.
Hiçbir durum belirtilmemiş işlemler 500 Fatal dışında genelde 200 yani success döndürür.
Php kodlarınızda işlemin başarısız olduğunu bildirmek için
http_response_code(400); //Kendi durumunuza göre bir hata kodu belirtin, bu bir error bildirir.
fonksiyonunu kullanabilirsiniz. Bu ajax kodunuzdaki error mekanizmasını tetikleyecektir.
Başarılı işlemler içinde response kodunu 200 olarak yinede geri döndürün.
Success kontrolünde 200 dışında gelen yanıtlarıda hata olarak bildirebilirsiniz :)
Ürünler adında bir tablonuz var diyelim,
birde ürün tanımları adında tablonuz olsun.
Bu tabloda ürünün detaylarını saklayabilirsiniz.
Örneğin tablo yapısı basit olarak,
id
urun_id
tanim
deger
durum
3 id'sine sahip "2021 kazak modeli" adında bir ürünün olduğunu varsayalım
Bu örneğe göre şöyle birkaç veri girelim ürün_tanımlari' na.
1 - 3 - beden - xl - 0
1 - 3 - beden - s - 1
1 - 3 - beden - m - 1
1 - 3 - renk - siyah - 0
1 - 3 - renk - sari - 1
Burada 3 ID'li ürünümüzün 3 tane bedeni ve 2 tane rengi olduğunu bildirdik.
Durum kısmından da bedenlerin ikisinin olduğunu (değer 1 olanlar) bir tanesinin stokta olmadığını anladık.
Renklerde de aynı şekilde biri var diğeri yok.
Bu şekilde durumları da çekmiş olursunuz :)
Veri çekerken şöyle yapalım,
Ürün detay sayfasına girildiğinde ürünü çekerken urun_tanimlari tablosuna da join olun ve urun_id ile eşleştirip ürüne ait tanımlarıda çekin.
Beden altındakileri foreach ile beden selectine,
renk altındakileri foreach ile yine renk selcetine yazdırın.
Ayrı tablo yaparsanız farklı farklı tanımlarda ekleyebilirsiniz.
Merhaba, hesabı veriyi çekerken yapabilirsiniz aslında. MySQL ile.
Bir tablo düşünelim.
id fiyat sonfiyat
1. 120 50
2. 200 300
mysql ile hesaplayalım;
select
IF(fiyat < sonfiyat , "zam", "indirim") as durum,
sum(sonfiyat - fiyat) as fark,
round(sum(((sonfiyat - fiyat) / fiyat) * 100)) as fark_yuzde
from deneme
group by id
sonuç;
durum fark fark_yuzde
indirim -70 -58 //Yüzde 58 oranında indirim
zam 100 50 //Yüzde 50 zam
Sorunumu çözdüm,
günün birinde problem yaşayanlar için; MySQL backslash'ı yani \ karakterini özel olarak kullanıyor. Bu yüzden bu karakteri 2 tane yazmak gerekiyor.
str_replace ile çözüm üretilebilir.
Örneğin;
str_replace("\\", "\\\\", $text); 1 tane backlash için \ 2 tane yazmak gerekli.
:)
Merhaba,
kısa bir araştırma yaptığımda aynı durumdan müzdarip olanları gördüm ve kesin cevap ne yazıkki bulunamamış.
Bende nasıl çözülür bilmiyorum.
Öneriler olarak, kişinin tarayıcı bilgisini aldıktan sonra bir popup veya özel sayfa hazırlayarak kullanıcıyı chrome kullanmasına teşfik edebilirsiniz.
Bunun içinde şöyle bir örnek buldum;
https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
Wordpress vb. cms'ler kullanıyorsanız ayarlar kısmında (tabi farklı yerlerde) bu işlem mümkün.
Kendiniz bir altyapı hazırlıyorsanız en basitinden;
index.php içerisinde
$pt = $_GET["page"] ?? "main"; //URL'den gelen page değerini alıyoruz, yoksa default olarak main sayfasını bildiriyoruz.
//GET ile aldığımız değerleri güvenlik kontrolünden geçirmeniz gerek. Ben default halini ekliyorum.
switch($pt){ //Gelen değeri kontrole başlıyoruz
case "iletisim": //iletiişim ise contact.php döndüreceğiz
$pt = "contact";
break;
case "sayfa": //Sayfa ise page.php döndüreceğiz
$pt = "page";
break;
default: //Yukarıkilerin hiçbiri ile uyuşmazsa 404.php döndüreceğiz
$pt = "404";
break;
}
include_once($pt.".php"); //Gelen değerin .php sayfasını include ile çağırıyoruz. Burada tema yolunu verebilirsiniz.
Not: Bu düz php örneğidir. MVC OOP programlamalarda class yapısında bu işlemler farklı oluşacaktır.
Döngüye girmek istemezseniz php'nin array_column fonksiyonu ile toplamak istediğiniz kolonu seçtikten sonra array_sum fonksiyonu ile toplayabilirsiniz.
Sizin örneğinizdeki kullanımı;
$arr = [
[
'isim' => 'Uğur',
'yas' => 20,
'city' => 'İzmir'
],
[
'isim' => 'Ahmet',
'yas' => 15,
'city' => 'İstanbul'
],
[
'isim' => 'Ali',
'yas' => 5,
'city' => 'Bursa'
]
];
echo array_sum(array_column($arr, "yas"));
//40