Link to home
Start Free TrialLog in
Avatar of davidburley
davidburley

asked on

PHPNuke dynamic dependant drop down menu with two menus

Hi all
I have a phpnuke site where i want to generate a form with 2 dynamic drop downs pulling info from the database and where the second menu is dependant on the first menu selection.

The fields i am pulling from the database are Job Categories and Job Sub Categories, so the user chooses a job category and the second menu then displays all sub categories within that selection.

the database table contains 3 fields as follows:-

id
Category
Parent

the jobs are then entered in the database thus:-

id=1
Category=Engines
Parent=0

id=2
Category=Mechanic
Parent=1

id=3
Category=Health
Parent=0

id=4
Category=Doctor
Parent=3


etc i.e. if the Parent=0 then its a root category, if anything else then its a sub category, if it is a sub category then the Parent number is the id of the root category

I believe this can be done with OnChange, but would prefer a means of doing this on same page somehow ????

Here is some sample code i started playing with to give you an idea of where to start from:-

function show() {
      global $sitename, $db, $admin, $module_name;
      include('header.php');
      OpenTable();
      
      echo "<tr>;
      echo "<td width=\"50%\"><font face=\"Arial\"><select size=\"1\" name=\"Category\">";
      $sql = $db->sql_query("SELECT Category from nuke_jobs_Config where Parent='0'");
      while (list($Category) = $db->sql_fetchrow($sql)) {
            echo "<option value=\"$Category\">$Category</option>";
      }
      echo "</select> Category</font></td>";
      echo "</tr>";
      echo "<td width=\"50%\"><font face=\"Arial\"><select size=\"1\" name=\"SubCategory\">";
      $sql = $db->sql_query("SELECT SubCategory from nuke_jobs_Config where Parent<>'0'");
      while (list($SubCategory) = $db->sql_fetchrow($sql)) {
            echo "<option value=\"$SubCategory\">$SubCategory</option>";
      }
      echo "</select> SubCategory</font></td>";
      echo "</tr>";       
      
      CloseTable();
      include('footer.php');
}
Avatar of jkna_gunn
jkna_gunn

Hi,

I think ive just answered something similar to this please have a look at this question

https://www.experts-exchange.com/questions/21239577/Populating-a-dropdown-menu-dynamically.html

>> I believe this can be done with OnChange, but would prefer a means of doing this on same page somehow ????
Store the results in a JS array an display the results.

Just like this:

<html>
<head>
<script>
var aDetail = [
["1", "Engines", "0"],
["2", "Mechanic", "1"],
["3", "Health", "0"],
["4", "Doctor", "3"],
["5", "Nurse", "3"],
["6", "Oil", "1"],
["7", "Car", "0"]];
function categSelected(theSel){
  theForm = theSel.form;
  opt = theForm.SubCategory.options;
  opt.length = 0;
  if(theSel.value=="") {
            opt[0] = new Option("--Select Subcategory--", "");                               
            return;
      }
  for(i=0;i<aDetail.length;i++){
    if(aDetail[i][2]==theSel.value){
      subCategoryValue = aDetail[i][1];
      for(j=0;j<opt.length;j++){
        if(opt[j].value==subCategoryValue) subCategoryValue="";
      }
      if(subCategoryValue>""){
        opt[opt.length] = new Option(subCategoryValue, subCategoryValue);
      }
    }
  }
}
</script>
</head>
<body>
<form name="myform">
<table>
<TR>
<TD>Category</TD>
<TD colspan="3" >
<select name="Category" onchange="categSelected(this);" >
<option>--Select Category--</option>
<option value="1"> Engines </option>
<option value="3"> Health </option>
<option value="7"> Car </option>
</select>
</TD>
</TR>
<TR>
<TD valign="top" >Sub Categories</TD>
<TD>
<select name="SubCategory">
<option>--Select Subcategory--</option>
</select>
</TD>
</TR>
</table>
</form>
</body>
</html>

replce the aDetail JS array values with the DB values. Do you need help in that?
ASKER CERTIFIED SOLUTION
Avatar of ldbkutty
ldbkutty
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of davidburley

ASKER

congrats ldbkutty, on the nail :)

I had to change it ever so slightly to fit in with phpnuke requirements but it works the biz ;)
How could i expand on this in the future to account for more dropdowns, i.e. 3 or more ?
ah and another problem i have found:-

How do i extract the variables out to post to the next routine, i.e. modules.php?name=$module_name&op=display ?
i need to obtain the category name and its ID

i.e. here is the completed function so far:-

// Function to Show Search Page Form
function search() {
      global $sitename, $db, $admin, $module_name;
      include("header.php");
      $ordercolumn = "Date";
      OpenTable();
      $result = $db->sql_query( "select * from nuke_jobs ORDER BY id" );
      $AnimalNums = sql_num_rows($result, $db);      
echo "<form method=\"POST\" action=\"modules.php?name=$module_name&op=display\">"
  . "<table border=\"0\" width=\"100%\" cellpadding=\"3\" id=\"AutoNumber1\">"
 
      . "<tr><td><select name=\"Country\" size=1>"
. "<option value=\"\" selected>-Choose Country-</option>"
. "<option value=\"UK\">UK</option>"
. "<option value=\"USA\">USA</option>"
. "<option value=\"Albania\">Albania</option>"
. "<option value=\"Algeria\">Algeria</option>"
. "<option value=\"American Samoa\">American Samoa</option>"
. "<option value=\"Andorra\">Andorra</option>"
. "<option value=\"Angola\">Angola</option>"
. "<option value=\"Anguilla\">Anguilla</option>"
. "<option value=\"Antigua\">Antigua</option>"
. "<option value=\"Argentina\">Argentina</option>"
. "<option value=\"Armenia\">Armenia</option>"
. "<option value=\"Aruba\">Aruba</option>"
. "<option value=\"Australia\">Australia</option>"
. "<option value=\"Austria\">Austria</option>"
. "<option value=\"Azerbaijan\">Azerbaijan</option>"
. "<option value=\"Bahamas\">Bahamas</option>"
. "<option value=\"Bahrain\">Bahrain</option>"
. "<option value=\"Bangladesh\">Bangladesh</option>"
. "<option value=\"Barbados\">Barbados</option>"
. "<option value=\"Barbuda\">Barbuda</option>"
. "<option value=\"Belgium\">Belgium</option>"
. "<option value=\"Belize\">Belize</option>"
. "<option value=\"Benin\">Benin</option>"
. "<option value=\"Bermuda\">Bermuda</option>"
. "<option value=\"Bhutan\">Bhutan</option>"
. "<option value=\"Bolivia\">Bolivia</option>"
. "<option value=\"Bonaire\">Bonaire</option>"
. "<option value=\"Botswana\">Botswana</option>"
. "<option value=\"Brazil\">Brazil</option>"
. "<option value=\"Virgin islands\">British Virgin isl.</option>"
. "<option value=\"Brunei\">Brunei</option>"
. "<option value=\"Bulgaria\">Bulgaria</option>"
. "<option value=\"Burundi\">Burundi</option>"
. "<option value=\"Cambodia\">Cambodia</option>"
. "<option value=\"Cameroon\">Cameroon</option>"
. "<option value=\"Canada\">Canada</option>"
. "<option value=\"Cape Verde\">Cape Verde</option>"
. "<option value=\"Cayman islands\">Cayman Islands</option>"
. "<option value=\"Central African Rep\">Central African Rep.</option>"
. "<option value=\"Chad\">Chad</option>"
. "<option value=\"Channel islands\">Channel Islands</option>"
. "<option value=\"Chile\">Chile</option>"
. "<option value=\"China\">China</option>"
. "<option value=\"Colombia\">Colombia</option>"
. "<option value=\"Congo\">Congo</option>"
. "<option value=\"cook islands\">Cook Islands</option>"
. "<option value=\"Costa Rica\">Costa Rica</option>"
. "<option value=\"Croatia\">Croatia</option>"
. "<option value=\"Curacao\">Curacao</option>"
. "<option value=\"Cyprus\">Cyprus</option>"
. "<option value=\"Czech Republic\">Czech Republic</option>"
. "<option value=\"Denmark\">Denmark</option>"
. "<option value=\"Djibouti\">Djibouti</option>"
. "<option value=\"Dominica\">Dominica</option>"
. "<option value=\"Dominican Republic\">Dominican Republic</option>"
. "<option value=\"Ecuador\">Ecuador</option>"
. "<option value=\"Egypt\">Egypt</option>"
. "<option value=\"El Salvador\">El Salvador</option>"
. "<option value=\"Equatorial Guinea\">Equatorial Guinea</option>"
. "<option value=\"Eritrea\">Eritrea</option>"
. "<option value=\"Estonia>Estonia</option>"
. "<option value=\"Ethiopia\">Ethiopia</option>"
. "<option value=\"Faeroe isl\">Faeroe Islands</option>"
. "<option value=\"Fiji\">Fiji</option>"
. "<option value=\"Finland\">Finland</option>"
. "<option value=\"France\">France</option>"
. "<option value=\"French Guiana\">French Guiana</option>"
. "<option value=\"French Polynesia\">French Polynesia</option>"
. "<option value=\"Gabon\">Gabon</option>"
. "<option value=\"Gambia\">Gambia</option>"
. "<option value=\"Georgia\">Georgia</option>"
. "<option value=\"Gemany\">Germany</option>"
. "<option value=\"Ghana\">Ghana</option>"
. "<option value=\"Gibraltar\">Gibraltar</option>"
. "<option value=\"GB\">Great Britain</option>"
. "<option value=\"Greece\">Greece</option>"
. "<option value=\"Greenland\">Greenland</option>"
. "<option value=\"Grenada\">Grenada</option>"
. "<option value=\"Guadeloupe\">Guadeloupe</option>"
. "<option value=\"Guam\">Guam</option>"
. "<option value=\"Guatemala\">Guatemala</option>"
. "<option value=\"Guinea\">Guinea</option>"
. "<option value=\"Guinea Bissau\">Guinea Bissau</option>"
. "<option value=\"Guyana\">Guyana</option>"
. "<option value=\"Haiti\">Haiti</option>"
. "<option value=\"Honduras\">Honduras</option>"
. "<option value=\"Hong Kong\">Hong Kong</option>"
. "<option value=\"Hungary\">Hungary</option>"
. "<option value=\"Iceland\">Iceland</option>"
. "<option value=\"India\">India</option>"
. "<option value=\"Indonesia\">Indonesia</option>"
. "<option value=\"Irak\">Irak</option>"
. "<option value=\"Iran\">Iran</option>"
. "<option value=\"Ireland\">Ireland</option>"
. "<option value=\"Northern Ireland\">Ireland, Northern</option>"
. "<option value=\"Israel\">Israel</option>"
. "<option value=\"Italy\">Italy</option>"
. "<option value=\"Ivory Coast\">Ivory Coast</option>"
. "<option value=\"Jamaica\">Jamaica</option>"
. "<option value=\"Japan\">Japan</option>"
. "<option value=\"Jordan\">Jordan</option>"
. "<option value=\"Kazakhstan\">Kazakhstan</option>"
. "<option value=\"Kenya\">Kenya</option>"
. "<option value=\"Kuwait\">Kuwait</option>"
. "<option value=\"Kyrgyzstan\">Kyrgyzstan</option>"
. "<option value=\"Latvia\">Latvia</option>"
. "<option value=\"Lebanon\">Lebanon</option>"
. "<option value=\"Liberia\">Liberia</option>"
. "<option value=\"Liechtenstein\">Liechtenstein</option>"
. "<option value=\"Lithuania\">Lithuania</option>"
. "<option value=\"Luxembourg\">Luxembourg</option>"
. "<option value=\"Macau\">Macau</option>"
. "<option value=\"Macedonia\">Macedonia</option>"
. "<option value=\"Madagascar\">Madagascar</option>"
. "<option value=\"Malawi\">Malawi</option>"
. "<option value=\"Malaysia\">Malaysia</option>"
. "<option value=\"Maldives\">Maldives</option>"
. "<option value=\"Mali\">Mali</option>"
. "<option value=\"Malta\">Malta</option>"
. "<option value=\"Marshall isl\">Marshall Islands</option>"
. "<option value=\"Martinique\">Martinique</option>"
. "<option value=\"Mauritania\">Mauritania</option>"
. "<option value=\"Mauritius\">Mauritius</option>"
. "<option value=\"Mexico\">Mexico</option>"
. "<option value=\"Micronesia\">Micronesia</option>"
. "<option value=\"Moldova\">Moldova</option>"
. "<option value=\"Monaco\">Monaco</option>"
. "<option value=\"Mongolia\">Mongolia</option>"
. "<option value=\"Montserrat\">Montserrat</option>"
. "<option value=\"Morocco\">Morocco</option>"
. "<option value=\"Mozambique\">Mozambique</option>"
. "<option value=\"Myanmar\">Myanmar/Burma</option>"
. "<option value=\"Namibia\">Namibia</option>"
. "<option value=\"Nepal\">Nepal</option>"
. "<option value=\"Netherlands\">Netherlands</option>"
. "<option value=\"Netherlands Antilles\">Netherlands Antilles</option>"
. "<option value=\"New Caledonia\">New Caledonia</option>"
. "<option value=\"New Zealand\">New Zealand</option>"
. "<option value=\"Nicaragua\">Nicaragua</option>"
. "<option value=\"Niger\">Niger</option>"
. "<option value=\"Nigeria\">Nigeria</option>"
. "<option value=\"Norway\">Norway</option>"
. "<option value=\"Oman\">Oman</option>"
. "<option value=\"Palau\">Palau</option>"
. "<option value=\"Panama\">Panama</option>"
. "<option value=\"Papua New Guinea\">Papua New Guinea</option>"
. "<option value=\"Paraguay\">Paraguay</option>"
. "<option value=\"Peru\">Peru</option>"
. "<option value=\"Philippines\">Philippines</option>"
. "<option value=\"Poland\">Poland</option>"
. "<option value=\"Portugal\">Portugal</option>"
. "<option value=\"Puerto Rico\">Puerto Rico</option>"
. "<option value=\"Qatar\">Qatar</option>"
. "<option value=\"Reunion\">Reunion</option>"
. "<option value=\"Rwanda\">Rwanda</option>"
. "<option value=\"Saba\">Saba</option>"
. "<option value=\"Saipan\">Saipan</option>"
. "<option value=\"Saudi Arabia\">Saudi Arabia</option>"
. "<option value=\"Scotland\">Scotland</option>"
. "<option value=\"Senegal\">Senegal</option>"
. "<option value=\"Seychelles\">Seychelles</option>"
. "<option value=\"Sierra Leone\">Sierra Leone</option>"
. "<option value=\"Singapore\">Singapore</option>"
. "<option value=\"Slovac Republic\">Slovak Republic</option>"
. "<option value=\"Slovenia\">Slovenia</option>"
. "<option value=\"South Africa\">South Africa</option>"
. "<option value=\"South Korea\">South Korea</option>"
. "<option value=\"Spain\">Spain</option>"
. "<option value=\"Sri Lanka\">Sri Lanka</option>"
. "<option value=\"Sudan\">Sudan</option>"
. "<option value=\"Suriname\">Suriname</option>"
. "<option value=\"Swaziland\">Swaziland</option>"
. "<option value=\"Sweden\">Sweden</option>"
. "<option value=\"Switzerland\">Switzerland</option>"
. "<option value=\"Syria\">Syria</option>"
. "<option value=\"Taiwan\">Taiwan</option>"
. "<option value=\"Tanzania\">Tanzania</option>"
. "<option value=\"Thailand\">Thailand</option>"
. "<option value=\"Togo\">Togo</option>"
. "<option value=\"Trinidad-Tobago\">Trinidad-Tobago</option>"
. "<option value=\"Tunesia\">Tunisia</option>"
. "<option value=\"Turkey\">Turkey</option>"
. "<option value=\"Turkmenistan\">Turkmenistan</option>"
. "<option value=\"United Arab Emirates\">United Arab Emirates</option>"
. "<option value=\"U.S. Virgin islands\">U.S. Virgin Islands</option>"
. "<option value=\"USA\">U.S.A.</option>"
. "<option value=\"Uganda\">Uganda</option>"
. "<option value=\"United Kingdom\">United Kingdom</option>"
. "<option value=\"Urugay\">Uruguay</option>"
. "<option value=\"Uzbekistan\">Uzbekistan</option>"
. "<option value=\"Vanuatu\">Vanuatu</option>"
. "<option value=\"Vatican City\">Vatican City</option>"
. "<option value=\"Venezuela\">Venezuela</option>"
. "<option value=\"Vietnam\">Vietnam</option>"
. "<option value=\"Wales\">Wales</option>"
. "<option value=\"Yemen\">Yemen</option>"
. "<option value=\"Zaire\">Zaire</option>"
. "<option value=\"Zambia\">Zambia</option>"
. "<option value=\"Zimbabwe\">Zimbabwe</option>"
. "</select> Country</font></td>"
. "</tr>"  
  . "<tr>"
  . "<td width=\"50%\"><font face=\"Arial\"><select size=\"1\" name=\"Ability\">"
  . "<option value=\"\" selected>-Choose Fluency Level required -</option>"
. " <option value=Minimal>Minimal</option>"
. " <option value=Medium>Medium</option>"
. " <option value=Good>Good</option>"
. " <option value=Fluent>Fluent</option>"
  . "    </select> Fluency Ability</font></td>"
  . "</tr>";
?>

<script>
var aDetail = new Array();
function categSelected(theSel){
  theForm = theSel.form;
  opt = theForm.SubCategory.options;
  opt.length = 0;
  if(theSel.value=="") {
     opt[0] = new Option("--Select Subcategory--", "");
     return;
  }
  for(i=0;i<aDetail.length;i++){
    if(aDetail[i][2]==theSel.value){
      subCategoryValue = aDetail[i][1];
      for(j=0;j<opt.length;j++){
        if(opt[j].value==subCategoryValue) subCategoryValue="";
      }
      if(subCategoryValue>""){
        opt[opt.length] = new Option(subCategoryValue, subCategoryValue);
      }
    }
  }
}
</script>
<?php
  $res = $db->sql_query( "SELECT * from nuke_jobs_Config" ) or die ("Query Failed: " . mysql_error());
  $i = 0;
  $j = 0;
  $category_name = array();
  $category_value = array();
  while ($row = $db->sql_fetchrow($res)) {
      if($row['ParentID'] == "0") {
          $category_value[$j] = $row['CatID'];
          $category_name[$j] = $row['Category'];
          $j++;
      }  // End if loop
?>
<script>
  aDetail[<?=$i?>] = new Array();
  aDetail[<?=$i?>][0] = "<?=$row['CatID']?>";
  aDetail[<?=$i?>][1] = "<?=$row['Category']?>";
  aDetail[<?=$i?>][2] = "<?=$row['ParentID']?>";
</script>
<?php
  $i++;
}   // End while loop
?>
<TR>
<TD>
<select name="Category" onchange="categSelected(this);" >
<option>--Select Category--</option>
<?php
  for($t=0; $t<count($category_value); $t++) {
    echo "<option value='".$category_value[$t]."'>".$category_name[$t]."</option>";
  }
?>
Category </select>
</TD>
</TR>

<TR>
<TD>
<select name="SubCategory">
<option>--Select Subcategory--</option>
Sub Categories</select>
</TD>
</TR>
<?php
$Category=$category_value[$t];
  echo "  <tr>"
  . "<td width=\"50%\">"
  . "      <input type=\"submit\" value=\"Submit\" name=\"B1\"><input type=\"reset\" value=\"Reset\" name=\"B2\"></p>"
  . "</td>"
  . "  </tr>"
  . "  </table>"
  . "<input type=\"hidden\" name=\"ordercolumn\" value=$ordercolumn>"
  . "</form>";
      CloseTable();
      include ("footer.php");      
}
>> How could i expand on this in the future to account for more dropdowns, i.e. 3 or more ?

One example:

<html>
<head>
<script>
var aMember = [
["1", "a", "Team A-a", "007", "John Doe1"],
["1", "a", "Team A-a", "008", "John Doe2"],
["1", "a", "Team A-a", "009", "John Doe3"],
["1", "a", "Team A-a", "010", "John Doe4"],
["1", "b", "Team A-b", "107", "Jane Doe1"],
["1", "b", "Team A-b", "108", "Jane Doe2"],
["1", "b", "Team A-b", "109", "Jane Doe3"],
["1", "b", "Team A-b", "101", "Jane Doe4"],
["1", "b", "Team A-b", "102", "Jane Doe5"],
["1", "c", "Team A-c", "017", "Johan Doe1"],
["1", "c", "Team A-c", "018", "Johan Doe2"],
["1", "c", "Team A-c", "019", "Johan Doe3"],
["2", "d", "Team B-d", "020", "John2 Doe1"],
["2", "d", "Team B-d", "027", "John2 Doe2"],
["2", "d", "Team B-d", "207", "John2 Doe3"],
["2", "d", "Team B-d", "208", "John2 Doe4"],
["2", "e", "Team B-e", "209", "Jane2 Doe1"],
["2", "e", "Team B-e", "028", "Jane2 Doe2"],
["2", "e", "Team B-e", "029", "Jane2 Doe3"],
["2", "e", "Team B-e", "030", "Jane2 Doe4"],
["2", "e", "Team B-e", "307", "Jane2 Doe5"],
["2", "f", "Team B-f", "047", "Johan2 Doe1"],
["2", "f", "Team B-f", "057", "Johan2 Doe2"],
["2", "f", "Team B-f", "067", "Johan2 Doe3"]];


function deptSelected(theSel){
  theForm = theSel.form;
  opt = theForm.members.options;
  opt.length = 0;
  opt = theForm.teams.options;
  opt.length = 0;
  if(theSel.value=="") return;
  for(i=0;i<aMember.length;i++){
    if(aMember[i][0]==theSel.value){
      tValue = aMember[i][1];
      tName = aMember[i][2];
      for(j=0;j<opt.length;j++){
        if(opt[j].value==tValue) tValue="";
      }
      if(tValue>""){
        opt[opt.length] = new Option(tName, tValue);
      }
    }
  }
}
function teamSelected(theSel){
  theForm = theSel.form;
  opt = theForm.members.options;
  opt.length = 0;
  tOpt = theForm.teams.options;
  for(i=0;i<aMember.length;i++){
    for(j=0;j<tOpt.length;j++){
      if(tOpt[j].selected==true){
        if(aMember[i][1]==tOpt[j].value){
          mValue = aMember[i][3];
          mName = aMember[i][4];
          opt[opt.length] = new Option(mName, mValue);
        }
      }
    }
  }
}
</script>
</head>
<body>
<form>
<table>
<TR>
<TD>Department</TD>
<TD colspan="3" >
<select name="department" onchange="deptSelected(this);" >
<option>--Please select--</option>
<option value="1"> Department A </option>
<option value="2"> Department B </option>
</select>
</TD>
<TD valign="top" >Teams</TD>
<TD>
<select multiple="true" name="teams" onchange="teamSelected(this);">
</select>
</TD>
<TD valign="top" >Members</TD>
<TD>
<select multiple="true" name="members">
</select>
</TD>
</TR>
</table>
</form>
</body>
</html>

But, would be better if you could ask your other questions as new post.

BTW, i dont understand what you mean by: < How do i extract the variables out to post to the next routine, i.e. modules.php?name=$module_name&op=display ?
i need to obtain the category name and its ID >

May be i am too tired with this, but better if you could post this as a new question, so other experts might also try to help you.

Cheers!