2017-10-14 103 views
-2

我正在尋找如何從數據庫中獲取不同MySQL查詢的幫助,具體取決於動態PHP下拉菜單。以下是我迄今爲止所做的一切(1.創建數據庫,2.創建PHP動態下拉列表,3.掙扎部分 - 如何獲取HTML/PHP表單將根據選擇的動態下拉列表更改它的MySQL查詢第2步)。動態MySQL查詢取決於動態PHP下拉

這裏是我創建數據庫:

CREATE TABLE computers (
id   int(3) NOT NULL auto_increment primary key, 
pc_make  varchar(25) NOT NULL default '', 
pc_model  varchar(25) NOT NULL default '' 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


INSERT INTO computers VALUES (1, 'Dell', 'Latitude'); 
INSERT INTO computers VALUES (2, 'Dell', 'Inspiron'); 
INSERT INTO computers VALUES (3, 'HP', 'Pavilion'); 
INSERT INTO computers VALUES (4, 'HP', 'Spectre'); 
INSERT INTO computers VALUES (5, 'Lenovo', 'Thinkpad'); 
INSERT INTO computers VALUES (6, 'Lenovo', 'Ideapad'); 

這裏是產生動態下拉的部分(這讓我的3點不同的記錄結果:「戴爾」,「HP」和「聯想」 ):

<? 

$connect = mysqli_connect('localhost', '', '', ''); 
$sql="SELECT DISTINCT(pc_make) AS pc_make FROM computers ORDER BY pc_make ASC"; 
$result = mysqli_query($connect, $sql); 

if(mysqli_num_rows($result) > 0){ 
$output= '<select name="listofpcmakes">'; 
while($rs = mysqli_fetch_array($result)){ 

    $output.='<option value="'.$rs['id'].'">'.$rs['pc_make'].'</option>'; 

    } 
} 
$output.='</select>'; 
echo $output; 
?> 

而且下面是我的嘗試只會顯示來自動態創建的下拉菜單選擇pc_make(例如戴爾,這將導致2條匹配的記錄)。看起來我只是在這裏碰壁。

<html> 
<body> 

     <form id="my_form" name="my_form" method="post"> 
     <table class="table"> 
       <thead> 
       <tr> 
        <th>id</th> 
        <th>pc_make</th> 
        <th>pc_model</th>    
       </tr> 
       </thead> 
       <tbody> 

<?PHP 

$sql_final="SELECT * FROM computers WHERE pc_make = (how to capture the 'selected pc_model' from the dynamically generated dropdown???) "; 
$result_final = mysqli_query($connect, $sql_final); 

        while ($myrow = mysqli_fetch_array($result_final)) 

        { 
        ?> 
       <tr> 
        <td><?PHP echo $myrow["id"]; ?></td> 
        <td><?PHP echo $myrow["pc_make"]; ?></td> 
        <td><?PHP echo $myrow["pc_model"]; ?></td>     
       </tr> 
     <?PHP 
       } 
        ?> 


</body>    
</html>    

要重申這個問題,我應該怎麼建立HTML表單的一部分,只取了它從動態生成的下拉列表中選擇一個製造商(戴爾,惠普或聯想)記錄(pc_make,pc_model) 。我試圖避免創建靜態mysql查詢,因爲製造商名單可能會在未來發生重大變化。

感謝所有提前提供援助之手......

+0

一方面,這個'while($ myrow = mysql_fetch_array($ result_final))'不會發生。 –

+0

謝謝Fred,快速回復。我是一個初學者,你能提出一個正確的方法嗎? – theCurious

+0

首先將'mysql_fetch_array'更改爲'mysqli_fetch_array',然後查看您的HTML源代碼,通過php和查詢檢查錯誤,使用'var_dump($ any_variable);'查看通過與否。 –

回答

0

當您選擇從下拉菜單中的選項並提交表單,其結果將是在$_POSTsuperglobal。所以,您需要檢查$_POST並檢索您的下拉列表的值。使用您在上面提交的代碼

$sql_final="SELECT * FROM computers WHERE pc_make = $selected_pc_model"; 

一個更完整的例子:

<?php 
if (($_SERVER['request_method']) == 'POST') { // Checking to see if form is submitted 
    $selected_pc_model = $_POST['listofpcmakes']; // Getting the selected PC model value 
} 
?> 
<html> 
<body> 

<form id="my_form" name="my_form" method="post"> 
<table class="table"> 
    <thead> 
    <tr> 
     <th>id</th> 
     <th>pc_make</th> 
     <th>pc_model</th> 
    </tr> 
    </thead> 
    <tbody> 

<?php 
if (isset($selected_pc_model)) { // if there is a $selected_pc_model 
    $sql_final="SELECT * FROM computers WHERE pc_make =" . $selected_pc_model; 
    $result_final = mysqli_query($connect, $sql_final); 

    while ($myrow = mysqli_fetch_array($result_final)) { 
?> 
     <tr> 
      <td><?PHP echo $myrow["id"]; ?></td> 
      <td><?PHP echo $myrow["pc_make"]; ?></td> 
      <td><?PHP echo $myrow["pc_model"]; ?></td> 
     </tr> 
<?php 
    } 
} else { // else if there is NOT a $selected_pc_model 
     echo '<tr> 
       <td>Error: PC Model is not selected.</td> 
       </tr>'; 
} 
?> 
    </tbody> 
</table> 

</body> 
</html> 

在頁面的頂部:

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $selected_pc_model = $_POST['listofpcmakes']; 
} 

現在,您可以在您的SQL查詢中使用$selected_pc_model

當你編寫這種類型的代碼比如數據驗證和錯誤時,還有更多的工作要做檢查等,但這應該足以讓你去。更多的,你應該閱讀PHP教程和/或獲得一些課程。

+0

謝謝你,azbatuk,我只是一個初學者,看起來這對我來說有點太過分了,玩過並且試了最後4個小時,不能把這整個包裹放在一起,看起來像我不喜歡不知道哪個部分進入哪個部分,這意味着哪個部分需要在哪個部分上以及哪個文件等等。請提供最後的幫助嗎? (今年我還完全準備好接受課程) – theCurious

+0

@theCurious我使用您的代碼添加了一個更完整的示例,並帶有一些註釋。 – azbatuk

+0

非常感謝除此之外,Azbatuk!尚未運行的部分是在從列表中選擇時,生成的mysql查詢不會更改。是否需要使用「提交」按鈕完成?或者它也可以用'onchange'函數來完成?這是否需要附加到POST表單上? – theCurious