2012-07-21 53 views
1

我目前正在使用可靠的下拉菜單,該菜單在jQuery和PHP的幫助下運行。這些值正在被MySQL數據庫拉取。有沒有PHP回顯可靠下拉菜單的選定值?PHP:從可靠的下拉菜單中選擇項目的回聲值

EXAMPLE

HTML/PHP

<form action="" method="post"> 

     <select name="gender" id="gender" class="update"> 
      <option value="">Select one</option> 
      <?php if (!empty($list)) { ?> 
       <?php foreach($list as $row) { ?> 
        <option value="<?php echo $row['id']; ?>"> 
         <?php echo $row['name']; ?> 
        </option> 
       <?php } ?> 
      <?php } ?> 
     </select> 

     <select name="category" id="category" class="update" 
      disabled="disabled"> 
      <option value="">----</option> 
     </select> 

     <select name="colour" id="colour" class="update" 
      disabled="disabled"> 
      <option value="">----</option> 
     </select> 

</form> 
+0

請詳細解釋一下'如何從可靠的下拉菜單中回顯所選項目?' – Adi 2012-07-21 09:03:01

+0

@Adnan對不起,我已經編輯了答案。 – CodingWonders90 2012-07-21 09:05:14

+1

對不起,但還不夠清楚。你是否希望PHP能夠確定所選項目,以便在頁面加載項目時被選中?或者你希望在用戶選擇了哪些東西后會轉到PHP然後回顯給瀏覽器? – Adi 2012-07-21 09:06:47

回答

3

請新增jquery.js和存儲來自新網址檢索到的值替換您的SQL語句。 您的網頁代碼

<select name="gender" id="gender" class="update"> 
     <option value="">Select one</option> 
     <?php if (!empty($list)) { ?> 
      <?php foreach($list as $row) { ?> 
       <option value="<?php echo $row['id']; ?>"> 
        <?php echo $row['name']; ?> 
       </option> 
      <?php } ?> 
     <?php } ?> 
    </select> 

    <select name="category" id="category" class="update" disabled="disabled"> 
     <option value="">----</option> 
    </select> 

    <select name="colour" id="colour" class="update" disabled="disabled"> 
     <option value="">----</option> 
    </select> 
     //jquery code for source list 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
      $('#gender').change(function() { 
       if ($(this).val()!='') { 
       $("#category").load("postfile.php",{gender_id: $(this).val()}); 
       $("#category").removeAttr('disabled'); 
       } 
      }); 
      //code on change of sel_source 
      $('#category').change(function() { 
       if ($(this).val()!='') { 
       $("#colour").load("postfile.php",{category_id: $(this).val()}); 
       $("#colour").removeAttr('disabled'); 
       } 

      }); 
     }); 
    </script> 



//postfile.php 
//your mysql connection other things goes here 
//code for category 
$objDb = new PDO('mysql:host=localhost;dbname=dbname', 'ur_username', 'ur_password'); 
if(isset($_REQUEST['gender_id']) && !empty($_REQUEST['gender_id'])) { 

      $sql = "SELECT * FROM `categories` WHERE `master` = ?"; 
    $statement = $objDb->prepare($sql); 
    $statement->execute(array($_REQUEST['gender_id'])); 
    $list = $statement->fetchAll(PDO::FETCH_ASSOC); 

    if(!empty($list)) { 
     $output = '<option value="">Select</option>'; 
     foreach($list as $row) {    
       $output .= '<option value="'.$row['id'].'">'.$row['name'].'</option>'; 
     } 
    } else { 
     $output = '<option value="">Select</option>'; 
    } 
    echo $output; 
} 
//code for color 

if(isset($_REQUEST['category_id']) && !empty($_REQUEST['category_id'])) { 
    $sql = "SELECT * FROM `categories` WHERE `master` = ?"; 
    $statement = $objDb->prepare($sql); 
    $statement->execute(array($_REQUEST['category_id'])); 
    $list = $statement->fetchAll(PDO::FETCH_ASSOC); 
    if(!empty($list)) { 
     $output = '<option value="">Select</option>'; 
     foreach($list as $row) {   
       $output .= '<option value="'.$row['id'].'">'.$row['name'].'</option>'; 
     } 
    } else { 
     $output = '<option value="">Select</option>'; 
    } 
    echo $output; 
} 

希望這能幫到您。

+0

它爲你工作嗎? – 2012-07-21 12:02:20

+0

謝謝!我正在尋找這個。雖然有一件事我看到你正在使用'['gender_id']''和'['category_id']',但MySQL表只設置了不同的字段'id','master_id','name'。您可以在視頻中看到:[數據庫設置](http://www.ssdtutorials.com/tutorials/title/populating-records.html) – CodingWonders90 2012-07-21 17:14:34

+0

我將gender_id和category_id從我們的html傳遞到php,它們不是thd表字段。您必須在選擇查詢中指定表字段。 – 2012-07-21 17:42:26

1

你將不得不編寫JavaScript函數檢索從第一個HTML選擇字段選擇的值或選項。該功能通常寫入一個新的URL路徑添加到當前頁面增加了一些concatonated獲取變量:

<script type="text/javascript"> 
getSelectedOptionValue() { 
// create some variables to store your know values such as URL path and document 
var myPath = " put the URL path to the current document here "; 
var currentPage = "currentPage.php"; 
// get the values of any necessary select fields 
var carMake = document.getElementById("carMake").value; 

// write out the final URL with the Get Method variables you want using concatnitation 
var getMethodURL = myPath + currentPage + "?carMake='" + carMake + "'"; 

// function refreshes page using the function made URL 
window.location.replace(getMethodURL); 
} 
</script> 

由於第二選擇字段是依賴於第一,你必須假定用戶要進行來自第一選擇選項的選擇。這意味着檢索主選擇字段值的函數必須運行以響應字段選擇的更改。例如

<select name="carMake" id="carMake" onchange="getSelectedOptionValue();"> 

取決於你如何設置你的數據庫,你可能需要的選項標籤的任何值,或呈現給選項標籤之間的用戶串...這是你保持在介紹如果您的原始記錄集尚未提供寫入第二組選擇選項標籤的必要信息,您可能會重新查詢信息。

要使用php寫出第二個選擇字段,只需重複您用於第一個的while循環。這一次使用一個變量一個新的您在其中使用GET方法

<?php 

// here I am using the more generic request method although you could use the get as well 
$carMake = $_REQUEST['carMake']; 

sql_secondSelectField = "SELECT * FROM tbl_carModels WHERE carMake = $carMake"; 

// Run new query and repeat similar while loop used to write your first select field ?> 
+0

如果您不想讓頁面通過重新加載頁面來刷新獲取變量,也可以使用AJAX調用此函數,但這會增加複雜性的另外幾個步驟。 – Matt 2012-07-21 09:49:26

+0

您還可以將if語句添加到您的php while循環中,通過將當前記錄迭代與JavaScript函數創建的新URL中發佈的get方法變量進行比較,將選定狀態添加到選項標記。這將保持用戶在使用window.location方法重新加載頁面之前選擇的選項。 – Matt 2012-07-21 10:17:05