2013-09-25 55 views
0

我正在構建的網站是一個配置器,可讓您選擇某些項目的顏色。它將具有共享您的顏色配置的功能。它會做的是生成一個帶有查詢字符串的URL,如?plate=red&cup=blue&napkin=white我的代碼讀取查詢字符串並更改<img>src值。例如...更優雅的處理查詢字符串變量的方式

<?php 
//This stuff is just grabbing the query string values... 
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; 
$querystring = parse_url($url); 
parse_str($querystring['query'], $color); 

$availableColors = array("red","blue","white"); 
?> 

這是我的HTML,我用PHP放入查詢字符串顏色值。此代碼也在檢查以確保顏色處於可用顏色的數組中。

<div data-color="<?php if(in_array($color['plate'],$availableColors)) {echo $color['plate'];} ?>"> 
    <img src="img/tablesetting/<?php if(in_array($color['dinnerPlate'],$availableColors)) {echo $color['plate']."_plate.png";} else {echo "dummy.gif";} ?>"> 
</div> 

<div data-color="<?php if(in_array($color['napkin'],$availableColors)) {echo $color['napkin'];} ?>"> 
    <img src="img/tablesetting/<?php if(in_array($color['napkin'],$availableColors)) {echo $color['napkin']."_napkin.png";} else {echo "dummy.gif";} ?>"> 
</div> 

<div data-color="<?php if(in_array($color['cup'],$availableColors)) {echo $color['cup'];} ?>"> 
    <img src="img/tablesetting/<?php if(in_array($color['cup'],$availableColors)) {echo $color['cup']."_cup.png";} else {echo "dummy.gif";} ?>"> 
</div> 

我希望做的是避免我要檢查如果顏色值在我的數組availableColors每次有一個條件語句。我想這只是一個更簡潔/優雅的做法,我正在尋找。

+0

如果您創建了一個函數來完成它,該怎麼辦? – fedorqui

+0

由於數據來自查詢字符串,因此您需要確保驗證它以避免任何類型的注入。所以,我認爲fedorqui是正確的,你應該創建一個函數,它接受一個顏色參數,然後返回該顏色(如果有效)或默認的選擇不是。然後,無論何時您繪製HTML,都可以使用該功能。 – jrebs

+1

此外,我建議你擺脫使用未加引號的字符串的習慣。 $ _SERVER [HTTP_HOST]只能爲你正常工作,因爲沒有人定義了HTTP_HOST常量,但如果他們這樣做了,它會破壞你的代碼。在使用字符串時,請始終使用單引號或雙引號。如果你啓用了所有的error_reporting代碼,你會看到來自PHP的通知警告你。 – jrebs

回答

0
function getColorData($color, $type) { 
    $result = array('color_name' => '', 'color_img' = 'dummy.gif'); 
    $available_colors = array('red', 'blue', 'green'); 
    if (in_array($color, $available_colors)) 
     $result = array('color_name' => $color, 'color_img' = $color . '_' . $type . '.png'); 

    return $result 
} 

用例:

$plate_color_data = getColorData($color['plate'], 'plate'); 
echo '<pre>',print_r($plate_color_data),'/<pre>'; // just for test) 


<div data-color="<?=$plate_color_data['color_name']?>"> 
    <img src="img/tablesetting/<?=$plate_color_data['color_img']?>"> 
</div> 
+0

好吧,我認爲這是接近..只是想知道你在哪裏/如何獲得'$ color'和'$ type'在函數中。 – Dustin

0

首先,有沒有你正在使用parse_url ....不能僅僅只搶到通過$ _GET或$ _REQUEST變量的一個原因?其次,如果你想驗證你的數據in_array是一個好方法。一件簡單的事情就是把它全部移到你的php區域,然後簡單地輸出經過驗證的數據到html。

如果我建立這個,我會從數據庫運行所有這些東西,所以如果顏色是有效的,你會查詢數據庫。

我也會考慮通過imagick或gd生成圖形服務器端。

相關問題