2015-11-10 73 views
0

我有兩個下拉菜單,如項目和產品。 當我選擇Item時,相應產品將顯示在數據庫的其他drodown中。 我想在其他表格中保存這樣的商品ID和商品ID。 請幫幫我。 (原始的PHP,MySQL,JavaScript的)如何顯示並保存數據庫的動態下拉列表?

if(isset($_POST['submit'])){      

$sales = htmlspecialchars(stripslashes(trim($_POST['sales']))); 
$regionID = htmlspecialchars(addslashes(trim($_POST['cat']))); 
$branchID = htmlspecialchars(addslashes(trim($_POST['subcat']))); 

if($sales){ 
     $insert = mysql_query("INSERT INTO dailycollection VALUES('', '$regionID', '$branchID', '$sales')"); 
    } 
else{ 
     $msg = "Please fillup all required fields!"; 
}} 
+0

你可以在你的問題中發佈你的代碼嗎? – BRoebie

+0

幫助我編寫如何從數據庫動態下拉數據。 –

+1

那麼首先不要使用'mysql_ *'函數,因爲它已被廢棄使用'mysqli_ *'或PDO。 – BRoebie

回答

1

下面是簡單的例子....,其描述瞭如何在dyanmically下拉通過項ID使用AJAX retrive產品列表....

<select id="item_id" name="item_id"> 
    <option value="1">Item_1</option> 
    <option value="2">Item_2</option> 
    <option value="3">Item_3</option> 
    <option value="4">Item_4</option> 
</select> 

<select name="product_id" id="product_id"> 
</select> 

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('#item_id').change(function(e){ 
       e.preventDefault(); 
       var item_id= $(this).val(); 
       $.post('product.php',{item_id:item_id},function(res){ 
         $('#product_id').html(res); 
       }); 
     }) 
    }); 
</script> 

/** ** product.php/

$item_id = $_POST['item_id']; 
$sql="SELECT product_id, product_name FROM product where item_id='".$item_id."'"; 
$result=mysql_query($sql); 
if(mysql_num_rows($result)>0){ 
    while($line=mysql_fetch_array($result)){ 
     $str .='<option value="'.$line['product_id'].'">'.$line['product_id'].'</option>'; 
    } 
}else{ 
    $str='no record'; 
} 
echo $str; exit; 
+1

請不要使用'mysql_ *'函數,因爲它已被棄用,並且在PHP 7.0中被徹底刪除,而不是使用'mysqli_ *'或PDO – BRoebie

0

讓我前言本答案與我的你的問題的理解:你有兩個並排側下拉菜單。在其中選擇一個選項會導致另一個選項成爲當前選項。根據你的標籤,它看起來像你正在構建完整的堆棧。這很好,這對你來說是一次很好的學習經歷。

讓我們看看我認爲作爲一種可能的解決方案,回到前面,在建立對系統的熟悉程度時迭代一兩次。

底層這裏是你的MySQL數據庫(我暫時假設這已經建好了,所以如果不是,請告訴我,我會爲此答案添加一些相關信息)。您的網站通過PHP與此數據庫進行交互,或者更具體地說,通過PHP MySQL Improved Extension(http://php.net/manual/en/book.mysqli.php)進行交互。

您將需要的第一個PHP腳本是從數據庫獲取數據的腳本。我會逐行拋出一些示例代碼並解釋一切。

$itemID = $_POST["itemID"]; 

我們將在一分鐘內瞭解到這是與POST請求相關的數據。我們將使用它來告訴我們的數據庫我們正在尋找哪一行。

$mydatabase = new mysqli("databaseserver.com", "mysqlusername", 
    "mysqlpassowrd", "databasename"); 

此行建立您的站點(服務器端,而不是客戶端)和您的數據庫服務器之間的連接。如果它們託管在同一臺機器上,並且MySQL在本地主機上運行,​​則可以將localhost作爲數據庫服務器位置。

接下來,我建議你檢查錯誤處理函數的PHP文檔。我不想在這裏過於細化。

之後,執行您的查詢。

$result = $mydatabase->query("SELECT * FROM mytable WHERE itemID = " . strval($itemID)); 

這裏,$result是數據類型「MySQLi結果」。你可以用這個做更多的錯誤處理,但接下來的基本步驟是將你的結果轉化爲更友好的數據。一排的數據可以變成一個PHP關聯數組,像這樣:

$row = $result->fetch_assoc(); 

有很多其他選擇這裏,所以檢查的文檔,如果這個方法不剪你。在用echo「返回」這些數據之前,您需要將其解析爲更有用的形式。例如,如果您查詢的MySQL表只有一列INTEGER類型,並且它包含產品ID,則可能會與$data = $row["productID"]脫節。

非常重要的注意事項:配置不當PHP是網絡上最常見的漏洞之一,特別是涉及到POST的情況(更多詳情參見下文)。請閱讀文檔並確保您在此處採取所有相關的預防措施。如果您從上面複製並粘貼我的示例,那麼您將很容易受到SQL注入的影響。

向上移動一層,您需要將此數據傳輸到您的客戶端腳本(閱讀javascript)。爲了看這是如何完成的,我們需要備份一個步驟,看看原始請求是如何執行的。我建議爲此使用jQuery;它很容易,它很受歡迎,而且有很好的文檔記錄。

要運行我們剛剛討論過的PHP腳本,您需要執行某種請求。基於這種設置的性質,它看起來像是一個POST。一個POST看起來有點像這樣在jQuery的:

$.post("grabdata.php", {"item":$('#itemID').val()}, function(response){ 
    console.log(response); 
    document.mydata = response; 
} 

此功能將打印grabdata.php最後echo到控制檯然後保存響應爲您document對象的屬性(基本上使得全局可訪問) 。有更好的方法來做到這一點,以保持你的全球空間更清潔,但這對我的簡單例子來說是個訣竅。它們之間的中間部分就是您要「發佈」到grabdata.php的數據。在你的情況下,你想得到一個產品ID給定一個物品ID(?),反之亦然。這是一個單向版本的例子。查詢http://api.jquery.com/jQuery.post/瞭解更多詳情。

頂層:顯示。這最後一部分非常簡單。現在,您已經存儲在document.mydata您的產品ID,所有你需要做的就是用jQuery快速值更新:

$('#productID').val(document.mydata); 

請你記住,我在這裏已經掠過了很多細節。我只是想給出一個這樣的系統如何工作的概述。請閱讀我鏈接到的文檔,並儘快回覆更具體的問題。

祝你好運!

+0

好文章。我想學習codeigniter,如果你有,請給我建議好的文檔。我創建了註冊和登錄表單。登錄後會出現產品頁面。現在我想根據類別顯示我的所有產品。現在我可以像用戶一樣使用另一個控制器和模型。或者我可以用相同的控制器和模型編碼。 –

+0

我從來沒有與codeigniter合作過,但最新版本的文檔可以在這裏找到:http://www.codeigniter.com/user_guide/ – Will

+0

要回答你的問題的其他部分,這取決於你如何想要在您的服務器和客戶端之間分配負載。對於服務器負載較重的設置,請在SQL查詢中過濾出不相關的數據。對於更加笨重的設置(一旦數據加載,這可能會變得更快),執行更廣泛的查詢並在JavaScript中過濾掉 – Will

相關問題