2011-02-27 6 views
6

के साथ गतिशील ड्रॉप डाउन मैं एक ड्रॉप डाउन मेनू विकसित कर रहा हूं जो समूह के नामों के लिए HTML ऑप्टग्रुप का उपयोग करता है जो कर्मचारी का हिस्सा हैं।PHP: ऑप्टग्रुप

 
mysql> SELECT employees.emp_id,employees.empname,employees.grp_id,groups.groupname FROM employees left join groups on employees.grp_id = groups.grp_id order by groupname asc; 
+--------+------------+--------+-----------+ 
| emp_id | empname | grp_id | groupname | 
+--------+------------+--------+-----------+ 
|  20 | Employee 2 |  13 | Group 1 | 
|  19 | Employee 1 |  13 | Group 1 | 
|  21 | Employee 3 |  14 | Group 2 | 
+--------+------------+--------+-----------+ 
3 rows in set (0.00 sec) 

केवल मुद्दा है, मैं पता लगाना कैसे optgroup सही ढंग से काम करने के लिए सबसे मुश्किल समय हो रही है: यहाँ MySQL क्वेरी और उत्पादन होता है। मैंने अनगिनत बार कोशिश की है, और यह वास्तव में मुझे निराश करना शुरू कर रहा है। निम्नलिखित काफी मैं उत्पादन (उदाहरण) बनना चाहते है:

<select name="dropdownmenu"> 
    <optgroup label="Group 1"> 
     <option name="20">Employee 2</option> 
     <option name="19">Employee 1</option> 
    </optgroup> 
    <optgroup label="Group 2"> 
     <option name="21">Employee 3</option> 
    </optgroup> 
</select> 

असल में, optgroup "GROUPNAME" होने की जरूरत है, विकल्प "नाम", "emp_id" होना चाहिए और कार्रवाई "विकल्प" (ड्रॉप डाउन आइटम) "empname" है।

मुझे आशा है कि यह ऐसा कुछ है जो किया जा सकता है, लेकिन वास्तव में सुनिश्चित नहीं है। यहाँ समारोह मेरे पास है, लेकिन यह वास्तव में अच्छी तरह से काम नहीं करता है: के साथ (

function getDynGrpList() { 
    global $db; 

    // $query = "SELECT * FROM employees ORDER BY grp_id desc;"; 
    $query = "SELECT employees.emp_id,employees.empname,employees.grp_id,groups.groupname FROM employees left join groups on employees.grp_id = groups.grp_id order by groupname asc;"; 
    $employees = $db->GetAll($query); 
    $groups = array(); 
    while ($qa = $employees->GetRows()) { 
     $groups[$qa['groupname']][$qa['emp_id']] = $qa['empname']; 
    } 
    var_export($groups); 
    foreach($groups as $label => $opt): ?> 
     <optgroup label="<?php echo $label; ?>"> 
    <?php foreach ($opt as $id => $name): ?> 
     <option value="<?php echo $id; ?>"><?php echo $name; ?></option> 
    <?php endforeach; ?> 
    </optgroup> 
<?php endforeach; 
} 

अंतिम समाधान: 3:15 पूर्वाह्न सीएसटी (2/27) के रूप में

function getDynGrpList() { 
    global $db; 

    // $query = "SELECT * FROM employees ORDER BY grp_id desc;"; 
    $query = "SELECT employees.emp_id,employees.empname,employees.grp_id,groups.groupname FROM employees left join groups on employees.grp_id = groups.grp_id order by groupname asc;"; 
    $employees = $db->GetAll($query); 
    $groups = array(); 

    while ($qa = $employees->GetRows()) { 
     $groups[$qa['groupname']][$qa['grp_id']] = $qa['empname']; 
    } 
    foreach ($groups as $label => $opt) { ?> 
     <optgroup label="<?php echo $label; ?>"> 
<?php } 
     foreach ($groups[$label] as $id => $name) { ?> 
      <option value="<?php echo $id; ?>"><?php echo $name; ?></option> 
<?php } ?> 
     </optgroup> 
<?php } 

getDynGrpList समारोह फेलिक्स Kling की मदद)

function getDynGrpList() { 
    global $db; 

    $query = "SELECT employees.emp_id,employees.empname,employees.grp_id,groups.groupname FROM employees left join groups on employees.grp_id = groups.grp_id order by groupname asc;"; 
    $employees = $db->GetAll($query); 
    $groups = array(); 
    foreach ($employees as $employee) { 
     $groups[$employee['groupname']][$employee['emp_id']] = $employee['empname']; 
    } 
    foreach($groups as $label => $opt): ?> 
     <optgroup label="<?php echo $label; ?>"> 
    <?php foreach ($opt as $id => $name): ?> 
     <option value="<?php echo $id; ?>"><?php echo $name; ?></option> 
    <?php endforeach; ?> 
    </optgroup> 
<?php endforeach; 
} 

उत्तर

5

छोरों के लिए दो अपने कोड में नहीं लगाए गए हैं:

0,123,
foreach ($groups as $label => $opt) { ?> 
    <optgroup label="<?php echo $label; ?>"> 
<?php } <-- wrong here 
    foreach ($groups[$label] as $id => $name) { ?> 
     <option value="<?php echo $id; ?>"><?php echo $name; ?></option> 
<?php } ?> 

नतीजा यह है कि पहले सभी अनु समूहों बनाई गई हैं और उसके बाद पिछले समूह के लिए कर्मचारियों को जोड़ रहे हैं (क्योंकि $label और $opt के बाद पाश समाप्त भी उपलब्ध हैं) है। छोरों

आप घोंसला करने के लिए है (using alternative syntax for control structures):

<?php foreach($groups as $label => $opt): ?> 
    <optgroup label="<?php echo $label; ?>"> 
    <?php foreach ($opt as $id => $name): ?> 
     <option value="<?php echo $id; ?>"><?php echo $name; ?></option> 
    <?php endforeach; ?> 
    </optgroup> 
<?php endforeach; ?> 

इसके अलावा, मुझे लगता है कि आप जब सरणी बनाने emp_id, नहीं grp_id उपयोग करने के लिए:

while ($qa = $employees->GetRows()) { 
    $groups[$qa['groupname']][$qa['emp_id']] = $qa['empname']; 
} 
+0

मैं वास्तव में हूँ कोड के साथ एक खाली ड्रॉप नीचे हो रही है। आपका कोड और मेरा कोड वास्तव में कोई ड्रॉप डाउन मेनू नहीं दिखाता है। कोड में कहीं, एक मुद्दा है, बस यह नहीं पता कि कहां है। – drewrockshard

+0

@drewrockshard: लूप से पहले 'var_export ($ समूह)' बनाएं और देखें कि सरणी में डेटा है और इसकी संरचना क्या है। –

+0

मैंने अपनी प्रारंभिक पोस्ट अपडेट की। Var_export ($ समूह) जोड़ने के बाद, उस पर कोई आउटपुट नहीं था। शायद अगर आप मेरे पूरे समारोह को देख सकते हैं, तो शायद आप कुछ गलत खोज सकते हैं। – drewrockshard

संबंधित मुद्दे