2013-04-24 119 views
-2
$jobid = $_GET['idx']; 
$sql2 = "SELECT * FROM job WHERE job_idx = '$jobid' "; 
$result2 = mysql_query($sql2); 
while($row = mysql_fetch_assoc($result2)) 
{ 
if($row["job_specialization"] == '228') 
{ $spec.=" Accounting ";} 
if($row["job_specialization"] == '24') 
{ $spec.=" Admin/Clerical/Secretarial ";} 
if($row["job_specialization"] == '3') 
{ $spec.=" Audit & Taxation ";} 
if($row["job_specialization"] == '5') 
{ $spec.=" Banking/Finance/Investment/Credit Control ";} 
} 

echo "$spec"; 

在我的數據庫中,我設法插入一個最大3個值的數組,只有228,24,3。我可以在preview-ad3.php中顯示這些數字,但是如何將這些數值更改爲單詞綜上所述 ?例如。如何顯示數組並將數字轉換爲字符串?

echo $spec; 

它會是這樣 會計,祕書/助理/祕書,審計&稅務

我將不勝感激,如果有人可以幫助我在這,因爲我只剩下這個東西來完成我的工作。感謝:d


答案更新

$jobarr = explode(",", $row['job_specialization']); 

if(in_array("228", $jobarr)) 
{ $spec.=" Accounting,";} 
    if(in_array("3", $jobarr)) 
{ $spec.=" Audit & Taxation,";} 

我想這個代碼。它運作良好!無論如何感謝球員幫助。 :)

+0

嗯...有一定_must_是一種方法,使那樣子機... – elclanrs 2013-04-24 01:25:10

+0

reallyy。如果你想要,我可以把它縮短。 – 2013-04-24 01:28:26

+2

您可以使用數組或數據庫表來保存該映射。真正的問題是爲什麼你問如何打印相關的文本,如果你目前的(糟糕的)代碼已經這樣做。 - (您的代碼中提及SQL安全漏洞可能沒有意義) – mario 2013-04-24 01:28:57

回答

0

這樣做的正確的方法是創建一個表來保存有關工作的細節信息,以便您的查詢應該是這樣的:

SELECT j.*, i.title 
FROM job AS j INNER JOIN job_info AS i ON j.job_idx=i.id 
WHERE j.job_idx = '$jobid' 
+0

嗯我仍然想知道爲什麼我應該加入表? 此代碼在preview-ad3.php 它像im在這裏顯示來自數據庫的所有數據。 – 2013-04-24 01:35:20

+0

您的方法效率很低,我希望您不要在生產中使用它。使用簡單連接時的開銷很小,但作爲一種好處,您可以通過代碼保持一致性,從而避免頭痛。 – Nazariy 2013-04-24 01:42:10

0

我會忽略一個事實,即你的代碼容易受到SQL注入攻擊,如果您不清理GET變量或使用預處理語句執行查詢,入侵者可以在數據庫中執行一些令人討厭的事情。

據我瞭解,您的數據庫通過ID存儲job_specialization,並且您想要將數字映射到名稱。

很長的路要改變你當前的數據庫模式,有兩個表,一個用於具有id的job_specialization和一個名稱列,並且連接這些表以便從數據庫中檢索job_specialization的名稱。

的另一種方式,只是爲了讓你的代碼有點可讀的,我會用define功能,讓你的代碼看起來像如下:

define('ACCOUNTING','228'); 
define('SECRETARIAL','24'); 
define('AUDIT','3'); 
define('BANKING','5'); 

$jobid = mysql_real_escape_string($_GET['idx']); 
$sql2 = "SELECT * FROM job WHERE job_idx = '$jobid' "; 
$result2 = mysql_query($sql2); 

while($row = mysql_fetch_assoc($result2)) { 

    switch($row['job_specialization']) { 
    case ACCOUNTING: 
     $spec.=" Accounting "; 
     break; 
    case SECRETARIAL: 
     $spec.="Secretarial "; 
     break; 
    } 

} 

echo $spec; 

話又說回來,這可能不是最好的代碼性能方面講,但至少比你發佈的更具可讀性。

0

跳這個幫助

$spec_map = array('228'=>'Accounting', 
       '24'=>' Admin/Clerical/Secretarial', 
       '3' =>'Audit & Taxation', 
       '5'=>'Banking/Finance/Investment/Credit Control' 
       ); 

$spec=''; 

while($row = mysql_fetch_assoc($result2)) 
{ 
$spec .= $spec?',':''; 
$spec .= $spec_map[$row["job_specialization"]]; 
} 

echo $spec; 
+0

沒有工作。我們有一個簡單的方法來做到這一點?因爲我認爲如果這個東西不是一個數組而是一個單一的值,那麼顯示和轉換數字就更容易了。我對嗎 ? – 2013-04-24 02:11:28

+0

我不知道你的意思是「更容易」 – 2013-04-24 02:23:43

相關問題