0

誰かがこれをクリーンアップしてより論理的にするのを手伝ってくれますか? 私は今揚げ物で、良いコード行を書くことができないようです:)

?aid=3056677 のような URL からアフィリエイト ID を取得しようとしています。アイデアは、IF aff id が GET に設定され、セッションと最後に Cookie が優先されるというものです。また、存在しない aff id を設定したくありません。

これを行うための、より実証済みの真の方法を知っていますか?

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;
4

3 に答える 3

3
session_start();

// checks if a field is valid
function isValid($aid) {
    return (!empty($aid) && trim($aid) != '');
}

// set the affiliate ID
$aid = isValid($_GET['aid'])     ? $_GET['aid'] :
       isValid($_SESSION['aid']) ? $_SESSION['aid'] : 
       isValid($_COOKIE['aid'])  ? $_COOKIE['aid'] :
       '';

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

// save and set 
setcookie('aid', $aid);
$_SESSION['aid'] = $aid;
于 2010-01-13T23:48:36.500 に答える
2
  1. $_GET 配列から有効なアフィリエイト ID を取得しているのに、なぜセッションと Cookie をテストするのでしょうか? ==> GET が見つからない場合にのみセッションがチェックされ、セッションが見つからない場合にのみ Cookie がチェックされるように、プログレッシブにします。

  2. affiliateID の検証を繰り返さないでください。==>検証関数を作成して再利用します。後でルールを追加したい場合があります。

  3. 中括弧を使用してコードを読みやすくします

  4. $aid または $aff は悪い変数名ですが、代わりに $affiliateID は良い変数名です! 短い変数名を書いても何も得られませんが、自明なコードを書くことで多くの利益を得られます。

悪い例、話さない

if (validate($aff)) 

良い例、あなたに話します

if (isValid($affiliationID))

したがって、コアコンポーネントの変更に関する私の提案は次のとおりです。

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;
    }
}
于 2010-01-13T23:59:02.570 に答える
0

みんなありがとう、これはますます良くなっています。あなたにとって明確になるかもしれない1つのポイントは、GETでaff idが指定されている場合、他の誰かのaff idを一掃する前に存在する有効なものでなければならないということです。お金は各取引に関係しており、私たちはアフィリエイトができるだけ長くクレジットを得られるようにしたいと考えています.

空白がだまさemptyれるので、あまり役に立ちません。なので、トリミングして使わないと精度が足りない気がします。だから私はGETの空について知りません。他は確認済みなので大丈夫です。

ここに私があなたの助けからこれまで持っているものがあります(ここで複雑な三項は、それが真であると判明したときに壊れますか?私はそれが行を実行し続けたくありません):

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;
  }
于 2010-01-14T00:56:25.627 に答える