有人可以帮助我清理它并使其更符合逻辑吗?我现在已经被炒了,似乎无法写出一行代码:)
我正在尝试从网址中捕获联盟ID,例如?aid = 3056677。这个想法是IF ID在GET中设置优先,会话和最后cookie最少。此外,我们不想设置不存在的关联。
你知道一种更有效的方法吗?
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;
答案 0 :(得分: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;
答案 1 :(得分:2)
如果您从$ _GET数组获得有效的affiliateID,为什么要测试会话和cookie? ==> 将其设为渐进式,以便仅检查会话,如果未找到GET,则仅在未找到会话时检查Cookie。
不要重复关联ID的验证。 ==> 编写验证功能并重复使用,您可能希望稍后添加更多规则。
使用大括号使代码更具可读性
$ aid或$ aff是BAD变量名,$ 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;
}
}
答案 2 :(得分:0)
谢谢大家这看起来越来越好。可能会为您澄清的一点是,如果在GET中给出了一个关联,它必须是一个有效的存在,然后才能消灭别人的身份。每笔交易涉及金钱,我们希望联盟会员尽可能长时间获得信贷。
关于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;
}