2012-08-29 103 views
1

嗨我有這個代碼將從數據庫中拉客戶端名稱和地址。 它回顯出每個條目的客戶名稱到下拉列表(<option value="<?php echo "$client" ?>"><?php echo "$client" ?></option>),這是在while循環中完成的。 然後我有一個Javascript,當你在下拉列表中選擇一個選項時,它將改變名爲'content'的DIV的innerHTML - 這是基於從數據庫中拉出的東西而唯一的。 - 這是我無法得到它的工作..下面是我的代碼任何幫助非常感謝。PHP,Javascript和SQL代碼混合起來

<div id="selectBox"> 
<div class="ui-widget"> 
<form> 
    <label>Select a Client:</label> 
    <select id="combobox" > 
    <option value="">Select...</option> 
    <?php 

include "db_conn.php"; 

callDB(); 

function callDB(){  
$sql = 'SELECT * FROM clientlist'; 
    $query = mysql_query($sql) or die(mysql_error()); 
    while ($row = mysql_fetch_array($query)) 
      { 
     $ID= $row['id']; 
     $client= $row["client"]; 
     $postal_add= $row["postal_add"]; 
?> 

<option value="<?php echo "$client" ?>"><?php echo "$client" ?></option> 
     <?php 
}} ?> 
    </select> 
    </form> 
</div> 
</div> 
<br> 
<div id="content"> 

</div> 
</div> 
<script type="text/javascript"> 



// Script for changing Div 
function change() 
{ 
switch (document.getElementById("combobox").value) 
{ 
    case "<?php echo $client ?>": 
    document.getElementById("content").innerHTML = "<h2><?php echo $client ?></h2><b>Postal Address:</b> <?php echo $postal_add ?>" 
    break; 

} 
} 

</script> 
+0

目前有什麼問題 –

+0

問題是,沒有什麼被傳遞到JavaScript代碼中的PHP變量。 – Janey

+1

您的JavaScript只會在頁面加載時執行。不是當你選擇一個選項。你應該添加一個'onchange'事件到選擇組件 – arnoudhgz

回答

0

當執行Javascript(客戶端)時,PHP已經完成(服務器)。您將需要從PHP構建JavaScript中while循環內,它在頁面後發送到瀏覽器:

// in while 
$javascript .= "case $client: 
document.getElementById('content').innerHTML = '<h2>$client</h2> 
    <b>Postal Address:</b>$postal_add' 
break;" 

// later in page 
switch (document.getElementById("combobox").value) 
{  
<?php echo $javascript; ?> 
} 
+0

我一直在努力完成這樣的事情。我需要將$ javascript聲明爲全局變量嗎?因爲它仍然沒有在JavaScript中提取。 – Janey

+0

是的,我很傻。你將PHP包裝在一個函數中,所以將$ javascript聲明爲全局函數或刪除函數(...直接運行php。 –

1

您在文字<?php echo "$client" ?>中缺少分號。它應該是<?php echo "$client"; ?>。編輯:這實際上不需要,結束?>自動關閉語句。

要添加更多內容,正如@Witty所說的,您並未在循環之外存儲$ client變量,因此您無法訪問它!改變它!

+2

他的問題比那個更大。 $ client是在while循環中聲明的,當他試圖打印出JS時不會被訪問。他也沒有事件處理程序。 –

+0

@WayneWhitty非常真實! –

+0

@InGodITrust有關您的信息,關閉PHP塊之前的分號需要__not__。請參閱http://php.net/manual/en/language.basic-syntax.instruction-separation.php:「一段PHP代碼的結束標記自動暗含分號;您不需要用分號來終止PHP塊的最後一行。「 –

1

您創建了填充div元素的函數。但是,此時該函數只能被定義,它永遠不會被執行。

你需要爲選擇框設置一個onchange處理程序來調用你的javascript函數。

此外,正在輸出到您的JavaScript的php是你的while循環之外。

+0

對不起,我正在使用一個jQuery庫自動完成,我已經放置到另一個文檔中,所以正在調用change()。 – Janey

0

使用Ajax從下拉菜單更新您所選的選項中日ebasis DIV

$('#dropdown').change(function() { 
        var id = $("#option").val(); 
        var url = ajax action from where u will get the data for the selected option 
        var data = {OptionID:id}; 
        $.ajax({ 
         type: 'POST', 
         url: url, 
         data: data, 
         success: function(data) 
         { 
          append the values in div here using div.innerhtml 
        }); 
      });