Iyi PHP GET Session Ortaklık Id'ye Capture

2 Cevap php

Birisi bana bu kadar temiz ve daha mantıklı hale yardımcı olabilir misiniz? Şu anda kızarmış olduğumu ve yazılı kodu iyi bir hat almak için görünmüyor olabilir :)

Ben? Aid = 3056677 gibi adresler bağlı kuruluş id yakalamak için çalışıyorum. Aff id önceliklidir GET, oturumda belirlenen ve nihayet en az olan çerez IF fikirdir. Ayrıca, var olmayan bir aff id ayarlamak istemiyorum.

Bunu yapmanın daha denenmiş ve doğru yöntem biliyor musunuz?

session_start(); // start session

// affiliate id
$g_aid = (isset($_GET['aid']) && $_GET['aid'] != '') ? trim($_GET['aid']) : false;
$s_aid = (isset($_SESSION['aid']) && $_SESSION['aid'] != '') ? trim($_SESSION['aid']) : false;
$c_aid = (isset($_COOKIE['aid']) && $_COOKIE['aid'] != '') ? trim($_COOKIE['aid']) : false;

if($g_aid !== false) // use get if set
  $aid = $g_aid;
elseif($s_aid !== false) // next use session if get not set
  $aid = $s_aid;
elseif($c_aid !== false) // cookie
  $aid = $c_aid;
else
  $aid = ''; // leave it empty

// if $aid is set is it in the $affiliates array?
//If not use the first key from that array
$aid = (isset($affiliates[$aid])) ? $aid : key($affiliates);

// save it and set it
// (maybe shouldn't be done if already stored?
setcookie('aid', $aid);
$_SESSION['aid'] = $aid;

2 Cevap

Teşekkürler çocuklar, bu daha iyi ve daha iyi bakıyor. Senin için açıklamak olabilir Bir nokta, bir aff id GET verilen IF biz muhtemelen başkasının aff id silip önce var olan geçerli bir OLMALIDIR olmasıdır. Para her işlem ile ilgili ve biz mümkün olduğunca uzun süre için kredi almak için bir ortaklık istiyoruz.

Ilgili empty o boşluk aptallar o zamandan beri çok kullanışlı değil. Bunu kullanmadan önce Döşeme sürece Yani, yeterince doğru değil hissediyorum. Yani GET için boş hakkında bilmiyorum. Biz zaten onları kontrol ettik, çünkü başkaları için ok.

Ben bugüne kadar sizin yardımınızla gelen ne var (? Burada karmaşık üçlü doğru bulduğunda sonu gelmez ben bu çizgiyi yürütme tutmak istemiyorum):

session_start(); // start session

  $aid = !empty($_GET['aid'])     ? trim($_GET['aid']) :
         !empty($_SESSION['aid']) ? $_SESSION['aid'] : 
         !empty($_COOKIE['aid'])  ? $_COOKIE['aid'] :
         '';

  // use first key from array if aid not set
  if(!isset($a[$aid])) $aid = key($a);

  if(!isset($_SESSION['aid']) || $aid != $_SESSION['aid'])
  {
    setcookie('aid', $aid);
    $_SESSION['aid'] = $aid;
  }
  1. Neden durumda $ _GET diziden geçerli affiliateID var, oturum ve çerez için test? GET bulundu ve hiçbir oturum bulunamadı ise çerez sadece işaretli eğer oturum sadece kontrol edilir, böylece ==> ilerici olun.

  2. AffiliateID bir doğrulama tekrar etmeyin. ==> doğrulayıcı bir fonksiyon yazın ve bunu yeniden, daha sonra daha fazla kurallar eklemek isteyebilirsiniz.

  3. Kodunuzu daha okunaklı hale getirmek için kaşlı ayraçlar kullanın

  4. $ Yardım veya $ aff BAD değişken isimleri, $ affiliateID yerine İYİ biridir! Kısa değişkenler isimlerini yazmak için bir şey kazanmak değil ama kendini açıklayıcı kod yazma ile çok kazanmak.

Bad, örneğin, doesn't talk

if (validate($aff)) 

Good, örneğin, talks to you

if (isValid($affiliationID))

Yani çekirdek bileşenleri değişikliği için önerimi:

if (isValid($_GET['aid']))
{
    $affiliationID = trim($_GET['aid'];
}
else if (isValid($_SESSION['aid']))
{
    $affiliationID = trim($_SESSION'aid'];
}
else if (isValid($_COOKIE['aid']))
{
    $affiliationID = trim($_COOKIE['aid'];
}
else
{
    throw new Exception('No affiliation ID defined');
}

function isValid($affiliationID)
{
    if (empty($affiliationID))
    {
        return false;
    }
    else
    {
        return true;
    }
}