2013-04-10 20 views
1

我想讓下面的表單的GET函數成爲預定義變量的一部分。將窗體的GET變成一個PHP變量?

任何想法?提前致謝!


讓我再解釋一下我真正想做的事情。我目前運行着一個專注於美國股市的網站。我用method = GET創建了一個HTML表單。此表單用於像搜索框一樣查找股票代碼符號。使用GET方法時,它將股票代碼放在URL的末尾,我創建了一個quotes.php頁面來捕獲這些信息,並根據框中鍵入的股票代碼顯示股票圖表。對於公司名稱,我創建了一個名爲company.php的頁面,該頁面聲明公司名稱的所有變量(這恰好是$,後跟股票代碼)。文件company.php是quotes.php中包含的唯一文件。

這就是這裏出現的地方:'。 $$ _ GET [「符號」]。 '

上面的代碼根據輸入到窗體中的內容將GET更改爲變量。如果某人在與company.php頁面中的變量不匹配的框中輸入了某些內容,我使用「死亡」來顯示錯誤消息。

我也爲每個公司添加了company.php頁面的變量,它將顯示每個股票在哪個證券交易所上市。這些變量以「$ ex_」開頭。所以,我試圖做的是將符號鍵入附加到「$ ex_」的框中,以便它顯示相應的證券交易所。

我的問題是:

  1. 有沒有辦法有什麼鍵入到形式加入到「$ ex_」?
  2. 這是一種不安全的方式來編寫這樣的代碼(它可以被黑客攻擊)嗎?

謝謝大家!

+5

PHP的「變量變量」是一種代碼異味。使用更好的數據結構。 – 2013-04-10 22:09:26

+0

你是指我的工作,或者我正在努力的工作?謝謝! – rngrdanny22 2013-04-10 22:12:02

+0

你看過'extract'嗎? http://php.net/manual/en/function.extract.php它可以幫助一點,並簡化您的問題 – MatRt 2013-04-10 22:22:46

回答

-1

下面會達到你所需要的嗎?

$myGetVariable = $_GET['symbol']; 
$ex_{$myGetVariable} = "Something"; 
5

而不是前綴變量和使用可變變量(尤其與用戶輸入的潛在不安全),試試這個:

$ex = array(
    "foo" => "bar", 
    ... 
); 
if(!isset($ex[$_GET['symbol']])) die("Error: That symbol doesn't exist!"); 
$chosen = $ex[$_GET['symbol']]; 
+2

答案「BAD CODER,DOWN」總是一個好的答案 – Zak 2013-04-10 22:34:12

+0

我很抱歉成爲這樣的noob,但你能解釋爲什麼使用變量變量進行用戶輸入可能是不安全的嗎? – rngrdanny22 2013-04-10 23:50:07

+0

如果變量的名稱對用戶保持開放,他們可能會訪問您不希望他們訪問的變量。當然,它是否是一個真正的漏洞取決於你如何使用它。 – 2013-04-10 23:51:33

-1
$_GET['symbol'] = 'APPL'; 

if (!empty($_GET)) { 
    foreach ($_GET as $k => $v) { 
    $var = 'ex_'.$k ; 
    $$var=$v; 
    } 
} 

var_dump($ex_symbol); 

APPL

0

這裏的另一種方法:

extract($_GET, EXTR_PREFIX_ALL, "ex"); 

儘管最好像這樣使用它,以確保沒有安全問題。

extract($_GET, EXTR_SKIP); 
0

PHP's extract()不正是你想要的是什麼,你應該指定「ex_」只要你想的前綴。

但是,存在安全問題和盲目使用此類功能的意外後果,因此請閱讀功能參數後面的附加段落。