2014-02-14 93 views
3

老实说,我现在不是专家&对如何解释我的问题非常困惑...所以请原谅我缺乏知识和这个长期困惑的问题。如何验证股票市场数据

我今天被分配了一个项目,客户在他们的页面上显示股票市场的信息(图片在下面)。当你点击任何一个按钮(例如纳斯达克)时,在弹出框中显示更多信息。

screen shot

他们使用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 &纳斯达克”

这是我感到困惑。从他们的代码(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"),其中股票报价是牵强。绝对有NO我的客户的用户可以通过网站提供任何其他股票代码来改变显示,操纵符号的唯一方法是通过改变代码本身。

但是,我的客户想要在代码中实现上述2个条件。我不知道如何做到这一点。

不知道我是否能够正确解释我的问题:(但我真的需要一些帮助,同时我很抱歉无法提供任何链接到这里的实际页面,非常感谢您阅读我的令人困惑的职位和投资你的时间!! :)

+0

所以你的问题是:如何验证一个字符串的4只允许选择一个?对于初学者,你有没有考虑过使用“选择”HTML元素? – Paul

+0

想到了它,但不知道如何可以帮助我解决这个问题:< 你可以解释一点点? – AlwaysANovice

+0

@保罗可能是我错了,但我的客户认为有人能操纵自己的HTML代码(!),我想验证需要PHP做,所以它与一般用户隐藏。 – AlwaysANovice

回答

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:这只是一个概念证明。这非常务实。你当然可以改进设计和结构,但我想这足以说明如何解决这个问题。

+0

谢谢戈登这样一个很好的解决方案:)我也曾经尝试添加IF子句中的getStockInfo.php文件...'的foreach($ _ GET [“股票”]为$符号=> $股票){ //只接受这些符号DOW,SP500,SPX和纳斯达克 如果($符号=== “NASD” || $符号=== “SP500” || $符号=== “SPX” || $符号=== “DJI”) {print file_get_contents(“...”);}'但是不确定在ELSE部分要做什么。是否可以检查他们点击了哪个按钮,然后我可以相应地显示DOW/SPX/NASDAQ(如果符号不匹配)?因为我的客户不想向他的用户显示任何错误消息。 – AlwaysANovice

+0

@Walahh如果块不一定需要一个else块。不知道剩下的问题是什么意思。你应该对上面的概念证明很好。你的客户所要求的一切吗? – Gordon

+0

我知道:(好吧,我只是做你说的话。谢谢你S-O! – AlwaysANovice