Sorunu çözdüm.
exec ve shell_exec fonksiyonlarını gözden kaçırmışım. Normal bir projede hiç kullanmadığımızı düşünürsek bunları gözden kaçırmak çok olası.
exec('komut');
shell_exec('komut');
Rotalarını muhtelemen şu şekilde belirliyorsun.
$router->get('\blog','');
// bu kullanımda ikinci parametrede mutlaka @ işareti ile ayrılmış bir class ve method belirtmen gerek.
$router->get('\blog','home@index');
Burada @
'den öncesi class, sonrası ise methoddur ve bu şekilde kullanman gerekiyor.
Sesionlar tarayıcı kapatıldığında silinir. Ekstra olarak yedeklenmez. Sesion unset yapmak sizin belirlediğiniz anda silinmesini sağlar.
Sesionlar için ekstra güvenliği şifreleme algoritmaları ile çözebilirsiniz.
Bir örnek vereyim. Kullanıcının ip adresini alırsın(örnek ip: 123.12.123.12) bu ip adresini kredi kartı ile birleştirip şifrelersin.
$ip = '123.12.123.12';
$creditInfo = 'credits';
$_SESION['creditIndo'] = base64_encode($ip.'$/$'.$creditInfo);
// Kullanırken ise
$credit = base64_decode($_SESION['creditIndo']);
$credit = explode('$/$',$credit)[0];
Buradaki mantık kullanıcının o anki ip adresine göre ekstra güvenlik oluşturmaktır. Fakat burada kullandığım base64 şifrelemesi oldukça güvensizdir. Bunlar yerine daha güvenli algoritmalar kullanmalısınız.
Ayrıca durum her ne olursa olsun %100 güvenlik sağlanamaz. Tavsiyem sanal pos kullanman.
Sanal pos hizmetleri güvenli kredi kartı bilgilerini saklıyor.
Css'i tamamen anlamadan bir kütüphane kullanmanızı asla önermem. Tabi tercih yine sizin ama sonuçta kütüphanelerde css den ibaret ve css de bilmediğin bir kısmı kütüphane kullanarak çözemezsin.
Şimdi gelelim responsive olayına, responsive tasarımı ayrı genişliklere uyarlamaktır.
Örneklerle ilerleyelim.
<a class="button">Hello world</a>
<style>
.button {
color:red;
font-weight:600;
font-size:34px;
}
@media (min-width: 576px) {
.button {
color:blue;
}
}
</style>
Yukarıdaki kodumuzda normal olarak buton rengimiz kırmızı fakat "min-width: 576px" olarak ekleyip buton rengine mavi verirsek.
Bu sefer en küçük ekran genişliği 576px ve yukarısı için geçerli olacak demek.
Biraz daha basitleştireyim. "min-widht" kısmının içine yazdıklarımız 576px genişliğinden sonra uygulanacaktır.
Merak etme örnekler yaparak mükemmel işler çıkaracağına inanıyorum. Kolaylıklar dilerim.
Aynı "name" niteliğe(attribute) sahip radio'lar birden fazla seçili olamaz. Aynı anda maks 1 adet seçilebilir.
Fakat radio yerine checkbox yaparsanız aynı anda birden fazla seçili olabilir.
Tayfun hocanın videoda yaptığı direktifleri kullanmak için, Core/View.php içerisindeki directive altındaki returnlere bakın.
Ben hata alma kodu için bu direktife baktım ve kodunu aşağı ekledim. Kolay gelsin.
<?php if (isset($errors[' . $name . '])): ?>
<div class="error-msg"><?=$errors[' . $name . '][0]?></div>
<?php endif; ?>
Tarayıcılar ve kullandığın host css dosyalarını ve javascript dosyalarını cache alabiliyor. Bu tür durumlarda sonradan yaptığın değişiklikleri göremeyebilirsin.
Çözümü;
Tarayıcında Ctrl+f5 tuşuna bas. Önbellek temizlenir ve cache silinir.
Hala düzelmezse dosya yollarını kontrol et. Doğru mu?
Aldığın hosting sağlayıcısı sana cloudflare bilgileri verdiyse cloudflare hesabına giriş yapıp geliştirici modunu aç.
Geliştirici modunu açmak
settings>development mode
Cookie ile bunu yapabilirsin. Session yerine cooike kullanırsın fakat güvenli bir şifreleme yöntemi kullanman gerekiyor.
Cookieler ile dilediğin kadar oturumu açık tutabilirsin. Hatta biraz daha geliştirip seçenek haline getirebilirsin.
Kullanıcı giriş yaparken oturumu sürekli açık tut seçeneğini işaretlediğinde sürekli açık kalacak şekilde cookie kullanırsın. Tıklamazsa normal olarak session kullanırsın.
Şuna göz atabilirsin;
Şu şekilde bir kullanım yaptığınızda sorununuz çözülecektir.
$_POST = array_map(function($post){
return htmlspecialchars($post);
},$_POST);