Burak KADILAR | Yazılım Uzmanı

Burak KADILAR | Yazılım Uzmanı

Backend Developer | Bursa Yazılım Uzmanı

Ödeme Kanalları Same Site Problemi

Ödeme kanalları geri dönüş (return) lerinde oturum sonlanıyor ve işlemlerinizi devam ettiremiyorsanız siz de same site problemine takılıyorsunuz demektir.

SameSite Nedir ?

Tarayıcılarında yapılan güncelleme ile sameSite=None ve secure olarak tanımlanmamış cookiler varsayılan olarak sameSite=Lax(first-party cookie) kabul edilecektir. Bu da first-party cookielere sadece tanımlanan domain/host üzerinden ulaşılabileceği anlamına gelmektedir. Sitenize cross-site request olması durumunda(örn:farklı bir domain & ip üzerinden yapılan post isteği) browser üzerinde cookie erişimi güvenlik sebebiyle kısıtlanmaktadır.

SameSite probleminin çözümü : Eğer iyzico, mokka, gpay, paytr, paramPos, papara vb. gibi return URL ile çalışan ödeme kanalı kullanıyorsanız, bu kanalın yönlendirme yaptığı ve sonucu post ettiği callBackUrl adresinde, cookie erişimi ile süreci tamamlıyorsanız ilgili cookieyi SameSite=None olarak tanımlamanız gerekmektedir.

Çözümü gayet basit.

htaccess dosyanıza aşağıdaki kodu ekleyin, cookie temizleyip tekrardan deneyin. Problemin çözüldüğünü göreceksiniz.

<IfModule mod_headers.c>
  	Header always edit Set-Cookie (.*) "$1; SameSite=None; Secure"
</IfModule>

JQuery dinamik modal açma – Popup

Aynı sayfada birden çok modal eklemek kod fazlalığına yol açar. Bunun yerine JQuery & AJAX append ve data attribute’ini kullanarak bir modal ekleyip diğerini silebiliriz. Siz de çok basit bir şekilde jquery & ajax ile dinamik modal oluşturabilirsiniz.

Dinamik olarak ( Örnek : id ye göre ) modal açmak istiyorsanız paylaşacağım kod örneklerini kullanabilirsiniz.

Projenize JQuery kütüphanesini dahil etmeyi unutmayın.

<!-- HTML kısımdaki modalı açacağımız buton -->
<!-- "data-id" attribute içine PHP ile id yi yazdırın. -->
<button data-id="1" class="open_modal"></button>
<script>
$("body").on("click", ".open_modal", function (button) {
  var id=$(this).data('id'); // data-attr içindeki id yi aldık.
  $.ajax({
   type: 'POST',
   url: 'modal.php', // veriyi&modalı alacağımız yol
   data: {id:id}, // id parametremizi yolladık
   dataType:'JSON', //veriyi json olarak alacağız
   error: function (hata) {
     console.log(hata);
   },
   success: function (data) {
    console.log(data); //testiniz bittikten sonra başına slash ekleyebilirsiniz. 
    try {                  
      $("#my_modal").remove(); // Eski modal varsa sildik
      $("body").append(data.modal); // yeni modalı ekledik
      button.preventDefault();
      $('#my_modal').modal({
        autofocus: false
      }).modal('show');
    } catch (e) {
     console.log(e + "data:" + data);
    }

   }
  });
});
</script>

modal.php

<?php 

$id=$_POST['id'];
$sql='SELECT * FROM table WHERE id = $id';

$data['modal']='
 <div id="my_modal" class="modal fade" style="display:none">
   <div class="modal-content">
     <div class="modal-header">
       <h5>Sipariş Ver</h5>
         <form action="" method="POST">
          <input type"number" name="piece">
          <input type="text" disabled value="'.$sql["price"].'">
          <button type="submit">Sipariş Ver</button>
         </form>
      </div>
    </div>
  </div>';

echo json_encode($data);

Örnek sipariş oluştururken fiyatı dinamik olarak modal içine çekip, adet girdirmek için verilmiştir.

Kendi Modal Style ‘ ınıza göre değiştirip kullanabilirsiniz. Sadece küçük bir örnek gösterilmiştir.

İşleyiş mantığı jquery ajax ile php sayfamıza id yi post atıp, bu php sayfamıza json_encode edip echo ile basıyoruz. Bu sayfaya gelen jquery bunu okuyup body e append ile ekliyor. sonrasında da yine jquery içinde modal ı açıyoruz.

Bu jquery dinamik modal örneğini kolaylıkla e-ticaret, ürün detayı listeleme, quick view ( hızlı gösterim index ) gibi alanlarda kullanabilirsiniz.

regex şifre kontrol yapma PHP

Php regex şifre kontrol işlemi nasıl yapılır ?

$regex_lowercase = '/[a-z]/'; // küçük harf
$regex_uppercase = '/[A-Z]/'; // büyük harf
$regex_number = '/[0-9]/'; //sayı
$regex_special = '/[[email protected]#$%^&*()\-_=+{};:,<.>~]/'; // özel karakter
$npw=$_POST['password'];
if(!preg_match_all($regex_lowercase,$npw) || !preg_match_all($regex_uppercase,$npw) || !preg_match_all($regex_number,$npw) || !preg_match_all($regex_special,$npw)) {
   if(strlen($npw)<7) { //şifre en az 8 karakter mi ?
    // Hata Logu Basabilir veya session a alert atayabilirsiniz.
     redirect("/");
     exit;
   }
// Hata Logu Basabilir veya session a alert atayabilirsiniz.
redirect("/");
exit;
}

Bu kod bloğunu kullanarak post olarak gelen şifrede, en az 1 küçük harf, 1 büyük harf, 1 sayı, 1 özel karater var mı ve şifre en az 8 karakterden mi oluşuyor kontrolünü yapmış olursunuz.

PHP date işlemleri

$time=time(); // 1 Ocak 1970 den şuana kadar geçen sürenin saniye cinsi
$toTime=strtotime('19.08.2020'); // 1 Ocak 1970 den yazılan tarihe kadar geçen sürenin saniye cinsi

date('Y-m-d',$time);

//Çıktı : 19.08.2020

PHP Türkçe Tarih Kullanımı

to_date_tr(time());
//Çıktı : 10 Kasım

function to_date_tr($date) {
    /* 'j F' Tarihi "10 Kasım" olarak verecektir. Burayı düzenleyerek dönüşümü değiştirebilirsiniz. */
    $z=date('j F',strtotime($date));
    $months=array(
        'January'   => 'Ocak',
        'February'  => 'Şubat',
        'March'     => 'Mart',
        'April'     => 'Nisan',
        'May'       => 'Mayıs',
        'June'      => 'Haziran',
        'July'      => 'Temmuz',
        'August'    => 'Ağustos',
        'September' => 'Eylül',
        'October'   => 'Ekim',
        'November'  => 'Kasım',
        'December'  => 'Aralık'
    );

    foreach($months as $en => $tr){
        $z = str_replace($en, $tr, $z);
    }
    return $z;
}