老实说,我不是专家,现在对如何陈述我的问题感到非常困惑......所以请原谅我缺乏知识和这个长期令人困惑的问题。
我今天被分配了一个项目,客户在他们的页面上显示股票市场的信息(下图)。当您单击任一按钮(例如,纳斯达克)时,弹出框中会显示更多信息。
他们使用 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");
?>
到目前为止非常简单。但是现在客户想做一些
- “用户输入验证”
- “只接受 4 个符号:SP500、SPX、DOW 和 NASDAQ”
这就是我感到困惑的地方。从他们的代码(HTML 部分)看来一切都是硬编码的 (open('...symbol=^NASD...');
或 open('...symbol=^ SPX...');
或 open('...symbol=^DJI...');
) 并且每个按钮/链接都将特定股票代码的信息发送到 getStockInfo .php 文件(src="/getStockInfo.php?Stocks[NASD]=NASDAQ"
或 src="...Stocks[SPX]=SP500"
或 src="...Stocks[DJI]=DOW"
) 正在获取的股票报价。我的客户的用户绝对没有可以通过网站提供任何其他股票代码来更改显示,操纵这些代码的唯一方法是更改代码本身。
但是,我的客户无论如何都想在代码中实现上述 2 个条件。我不知道该怎么做。
不确定我是否能够正确解释我的问题 :( 但我确实需要一些帮助。另外,我很抱歉无法在此处提供指向实际页面的任何链接。非常感谢您阅读我的困惑发布并投入你的时间!!:)
最佳答案
这是一个概念证明:
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:这只是概念验证。这是非常务实的。您当然可以改进设计和结构,但我想这足以说明如何解决问题。
关于javascript - 如何验证股市数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21772145/