2011-03-24 30 views
1

下午所有,需要幫助揪成多列從一個數據庫表 - 的mysql_query

一個很簡單的問題......一個朋友成立了一個形式我使用的mysql_query進行。自從他寫這篇文章以來,我在數據庫中添加了一個額外的列,我想將其插入表單中。

不過,我似乎無法得到這額外的列顯示(標貨幣)。我需要它的原因是下面的查詢將拉回一個值和£符號。因爲我想不僅展示£,而且價格€,我需要這個額外的列拉通(很明顯,我將不得不從回聲去除£下面太)。

我已經嘗試添加額外的列(幣種)的代碼,例如「選擇客房,貨幣,價格從Spa_Upgrades

但這並沒有工作

的代碼是:!

<?php 
      if (isset($id)) 
       { 
       $query2 = mysql_query("SELECT Room, Price FROM Spa_Upgrades WHERE Spa_Upgrades.Spa_Id = '".$id."' AND Spa_Upgrades.Id = '".$pack."' order by Spa_Upgrades.Order"); 
       $rows = mysql_num_rows($query2); 
       if($rows==0) {echo "disabled='disabled'/>";} 
       else 
        { 
        echo "/>"; 
        echo "<option value='Default'>Please Select</option>"; 
        for($i=0; $i<$rows; $i++) 
         { 
         $result2 = mysql_fetch_array($query2); 
         echo "<option value='".$result2[0]."&nbsp;&pound;".$result2[1]."pp'>$result2[0]&nbsp;&pound;$result2[1]pp</option>"; 
         } 
        } 
       } 

巨大感激,如果有人能解決這個

謝謝, 莫特利

回答

1

改變查詢,如下所示:

SELECT Room, Price, Currency FROM Spa_Upgrades ... 

改變開始echofor循環內的線:更換&pound;$result2[2],無論它出現在哪裏。 (或者,如果Currency列不包含貨幣符號的HTML實體,然後用適當的代碼以獲得來自Currency列項符號代替&pound;

+0

感謝Hammerite - 取代£ with $ result2 [2]!你是什​​麼意思將£替換爲所需貨幣符號的適當代碼 - 這不起作用,因爲只有一種形式,並且取決於用戶從中點擊的位置將是英鎊或歐元。 – Motley9735 2011-03-24 19:20:07

+0

我的意思是,我不確定您是否在數據庫列中存儲了「£」,「€」,或者您是否將整數ID存儲到那些您必須轉換爲相應符號的貨幣。它看起來像是前者,所以不用擔心。 – Hammerite 2011-03-24 19:33:13

0
  • 使用mysql_fetch_assoc()代替mysql_fetch_array()
  • 好的做法以及是分離的數據從顯示邏輯檢索

嘗試這種情況:

<?php 

$results = array(); 

if (isset($id)) 
{ 
    $resource = mysql_query("SELECT room, currency, price FROM Spa_Upgrades 
    WHERE Spa_Upgrades.Spa_Id = '".intval($id)."' AND Spa_Upgrades.Id = '".intval($pack)."' 
    order by Spa_Upgrades.Order"); 

    while($row = mysql_fetch_assoc($resource)) 
    $results[] = $row; 
} 

?> 
<select name="..." <?php echo (count($results) > 0 ? '' : 'disabled') ?>> 
    <option value="Default">Please Select</option> 
    <?php 
    foreach($results as $result) 
    { 
     $value = $result['room'].' '.$result['currency'].$result['price'].'pp'; 
     echo '<option value="'.htmlspecialchars($value).'">'.htmlspecialchars($value).'</option>'."\n"; 
    } 
    ?> 
</select> 
+0

爲什麼你應該使用fetch_assoc而不是fetch_array,並且你能澄清你的意思嗎?從數據邏輯中分離數據檢索?歡呼 – Motley9735 2011-03-24 19:22:33

+0

「爲什麼要使用'fetch_assoc'而不是'fetch_array'? =>使用'mysql_fetch_assoc',如果您在'SELECT'中添加一列或更改列順序,則不需要更改代碼中的其他任何內容。例如,用'mysql_fetch_array()'這裏,你必須改變'$ RESULT2 [1]''到$ RESULT2 [2]'到處得到的價格,增加了 「貨幣」 列之後。 – 2011-03-24 19:41:44

+0

「你能否通過從數據邏輯中分離數據來澄清你的意思?」 =>我說「顯示邏輯」,而不是「數據邏輯」。它只是使代碼更易於重複使用,因此更容易發展,更具可讀性...查看http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller – 2011-03-24 19:44:21

0

你還需要將列添加到輸出。 ..我也會切換到關聯數組,否則如果你添加一個列,而不是在最後你必須改變所有的索引。

 if (isset($id)) 
      { 
      $query2 = mysql_query("SELECT Room, Price, Currency FROM Spa_Upgrades WHERE Spa_Upgrades.Spa_Id = '".$id."' AND Spa_Upgrades.Id = '".$pack."' order by Spa_Upgrades.Order"); 
      $rows = mysql_num_rows($query2); 
      if($rows==0) {echo "disabled='disabled'/>";} 
      else 
       { 
       echo "/>"; 
       echo "<option value='Default'>Please Select</option>"; 
       for($i=0; $i<$rows; $i++) 
        { 
        $result2 = mysql_fetch_assoc($query2); 
        $value = $result2['Room'] . '&nbsp;' . $result2['Currency'].$result2['Price'].'pp'; 

        echo sprintf('<option value="%s">%s</option>', $value, $value); 
        } 
       } 
      } 
+0

嗨,Prodigitalson - 你能告訴我你的意思是由assoc_array和不得不改變索引? – Motley9735 2011-03-24 19:20:53

+0

當你使用'mysql_fetch_assoc'時,你得到列名索引的列中的列,所以當你使用'mysql_fetch_num'時你可以像'$ result ['column_name']'一樣訪問它們,它們按照它們在select中的位置順序查詢查詢的一部分從'0'開始,所以如果這個查詢改變了,你必須改變你在代碼中使用變量的方式,例如曾經'$ result [0]'可能變成'$ result [1]'。 – prodigitalson 2011-03-24 20:19:49