2011-04-04 60 views
-1

我想從我的數據庫根據客戶site_id選擇site_tags。如果tag_id = 36或37,他們不應該看到「選擇背景設計」鏈接。如果他們的tag_id不等於36或37,他們應該看到鏈接....我有這個代碼,但它不工作?我要去哪裏錯在這裏:(感謝您的幫助!php mysql不工作

<?PHP 
    /* Limit Template Selection to Premium Clients only */ 
    $id = $site->id;    
    $tags = mysql_query('SELECT tag_id FROM site_tags WHERE site_id = '.(int)$id); 

    while ($tag = mysql_fetch_array($tags)){ 

     if ($tag['tag_id'] == '36' || $tag['tag_id'] == '37'){ 
      $link = ""; 
     } else { 
      $link= "<h2> 
       <a href=\"template.php\">Choose My Background Design</a> 
       <a href=\"\" class=\"accordion\"><img class=\"info\" src=\"/img/info_icons/blue_off.png\" width=\"14\" height=\"15\" alt=\"\" title=\"More Information\"/></a> 
      </h2> 

      <div id=\"manage_te\" class=\"moreinfo\"> 
       <p> 
        Select a new website design to change the entire look &amp; feel of your website with just one click. 
       </p> 
      </div>"; 
     } 
    } 
    echo $link; 
?> 
+2

這是什麼意思,它不起作用? SQL異常?沒有結果?錯誤的結果? – 2011-04-04 14:16:59

+0

一些friggin縮進請?? – Christian 2011-04-04 14:20:39

+0

我已經修復了SQL注入的方式(通過使用'(int)'將類型轉換爲整數)。 – Christian 2011-04-04 14:25:10

回答

0

移動echo $link;爲週期,我認爲:)

+0

如果我將echo $鏈接移到while循環中,我會得到多個Choose Background Design鏈接。 – rob 2011-04-04 15:32:28

1

你爲什麼不排除從查詢這些標籤?

SELECT tag_id FROM site_tags WHERE site_id = $id and tag_id not in (36,37) 
+0

真的很好的建議 – Emmerman 2011-04-04 14:22:11

+0

不要挑剔,但你調整了它的性能,並保持打開SQL注入? – Christian 2011-04-04 14:26:01

+1

@Christian Sciberra在他發佈的這段代碼之前,你怎麼知道變量$ id已經被注入了sql注入?尼克規則只是提供了答案。 – Flipper 2011-04-04 14:32:38

0

It's一種很難說沒有看到代碼的其餘部分,並確切地知道是什麼問題,但缺少明顯的事情,是一個。

+0

數據庫連接包含在我的文件頂部。我得到0結果返回,沒有錯誤。 – rob 2011-04-04 14:35:19

+0

@rob你確定你得到的結果是0,或者可能是有多個結果,'$ link'被覆蓋(見@Osh Mansor的答案)? – jeroen 2011-04-04 14:40:59

0

我認爲下面的方法是清潔:

<?php 

$id = (int) $site->id;     
$r = mysql_query("SELECT COUNT(*) FROM site_tags WHERE site_id={$id} AND tag_id IN(36,37)"); 

if (mysql_num_rows($r) > 0) { 
    // the tag matched 
} else { 
    // no tag match 
} 

注意int投上$site->id做得太應該防止SQL Injection被posssible。

+0

我有大約80個可以選擇的標籤。我試過了你的代碼,但是它認爲它隨時可以匹配,如果存儲了36或37,或者它沒有被選擇和存儲。 – rob 2011-04-04 14:41:40

1

由於您提供的信息有限,我只能假設。所以,我的假設是,當您獲取您將獲得多個標籤(其中包括tag_id = 36 & tag_id = 37)。由於echo $鏈接在while循環之外,所以如果你有其他的tag_id(在36 & 37之後),那麼$ link就會被$ link =「」覆蓋(除了tag_id = 36之外,或者37)。您可能希望在關閉while循環之前放置echo $鏈接,如下所示:

while ($tag = mysql_fetch_array($tags)){ 

    if ($tag['tag_id'] == '36' || $tag['tag_id'] == '37') 
    { 
     $link = ""; 
    } 
    else 
    { 
     $link= "<h2><a href=\"template.php\">Choose My Background Design</a><a href=\"\" class=\"accordion\"><img class=\"info\" src=\"/img/info_icons/blue_off.png\" width=\"14\" height=\"15\" alt=\"\" title=\"More Information\"/></a></h2> 
<div id=\"manage_te\" class=\"moreinfo\"> 
<p>Select a new website design to change the entire look &amp; feel of your website with just one click.</p>  
</div>"; 
    } 
    echo $link 
} 
+0

+1這可能是問題 – jeroen 2011-04-04 14:41:20

+0

如果我將echo $鏈接移動到while循環中,我會得到多個Choose Background Design鏈接。 – rob 2011-04-04 14:56:03