老实说,我不是专家&现在对如何陈述我的问题非常困惑......所以请原谅我缺乏知识和这个长期令人困惑的问题。
今天我被分配了一个项目,客户在他们的页面上显示股票市场的信息(图片附在下面)。当您点击任何一个按钮(例如,纳斯达克)时,弹出框中会显示更多信息。
他们正在使用onClick()
将整个字符串发送给第三方来收集数据。这是纳斯达克链接的HTML代码:
<li>
<a href="#" onClick="open('https://app.quotemedia.com/quotetools/clientForward?symbol=^NASD&targetURL=http://app.quotemedia.com/quotetools/popups/quote.jsp?webmasterId=99944&locale=en_US','miniwin','toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=1,width=550,height=270,top=20,left=0'); return false;">
NASDAQ
<span id="imageNASDAQ"></span>
<span id="valueNASDAQ" class="share_value"></span>
<span id="textNASDAQ"></span>
</a>
<script type="text/javascript" src="/getStockInfo.php?Stocks[NASD]=NASDAQ"></script>
</li>
然后在getStockInfo.php
文件中,他们将数据收集为JSON字符串,然后解析它。以下是他们收集数据的方式:
<?php
if (array_key_exists("Stocks", $_GET)) {
foreach($_GET['Stocks'] as $symbol=>$stock) {
print file_get_contents("https://app.quotemedia.com/quotetools/jsVarsQuotes.go?webmasterId=99944&symbol=$symbol");
?>
到目前为止很简单。但现在客户想要做一些
这是我感到困惑的地方。从他们的代码(HTML部分)看起来所有内容都是硬编码的(open('...symbol=^NASD...');
或open('...symbol=^SPX...');
或open('...symbol=^DJI...');
),每个按钮/链接都将特定的Stock符号信息发送到getStockInfo.php文件(正在提取股票报价的src="/getStockInfo.php?Stocks[NASD]=NASDAQ"
或src="...Stocks[SPX]=SP500"
或src="...Stocks[DJI]=DOW"
)。绝对 NO 方式我的客户的用户可以通过网站提供任何其他股票代码来更改显示,操纵符号的唯一方法是更改代码本身。
但是,无论如何,我的客户想在代码中实现上述两个条件。我不知道该怎么做。
不确定我是否能够正确解释我的问题:(但我真的需要一些帮助。此外,我很抱歉无法在此提供实际页面的任何链接。非常感谢您阅读我的困惑发布并投入时间!! :)
答案 0 :(得分:1)
以下是概念证明:
if (array_key_exists("Stocks", $_GET)) {
$stocks = array_filter($_GET['Stocks'], 'filterStocks');
foreach ($stocks as $symbol => $stock) {
print file_get_contents(…);
}
}
function filterStocks($symbol) {
return in_array(
$symbol,
array('SP500', 'SPX', 'DOW', 'NASDAQ')
)
}
现在getStockInfo.php只返回四个符号的数据。如果您需要在单个用户的基础上进行配置,一个简单的解决方案是更改filterStocks函数并回调到
function filterStocksForLoggedInUser($symbol) {
return in_array($symbol, getAllowedSymbolsForUser());
}
function getAllowedSymbolsForUser()
{
$permissions = include '/path/to/permissions/file.php';
return isset($permissions[$_SESSION['username']])
? $permissions[$_SESSION['username']]
: array();
}
}
然后在权限文件中放置
return array(
'Walahh' => array('SP500', 'SPX', 'DOW', 'NASDAQ'),
'JohnDoe' => array('SP500', 'GOOG')
);
注1:以上假设您有某种识别用户的方法,$_SESSION['username']
。使用您正在使用的任何内容进行更改,并相应地调整权限文件。
注2:每次从磁盘读取权限文件。磁盘I / O通常很慢,因此您可能需要考虑将权限更快地移动到某个位置。
注3:这只是一个概念证明。这非常务实。你当然可以改进设计和结构,但我想它足以说明如何解决这个问题。