Solved

Dependent dynamic select form from a MySQL database

Posted on 2006-07-15
3
225 Views
Last Modified: 2013-12-12
Ok, I am not a Javascript coder nor do I use ASP but those are most of the examples for building a dependent dynamic select menu form I've found in google (yes, I've tried searching for a solution but few PHP/MySQL/Javascript comes up).

Well, I've been altering something similar to this:
[php]
 //************** start dynamic drop-down list magic ***************//
  print "<script language=\"javascript\"><!--\n";
  $classes = mysql_query("SELECT class FROM classes ORDER BY class");
  print "var labIDs = new Array(" . mysql_num_rows($classes) . ");\n";
  print "var labNames = new Array(" . mysql_num_rows($classes) . ");\n";
  while (list($class) = mysql_fetch_array($classes)) {
     $labs = mysql_query("SELECT DISTINCT labID FROM duedates WHERE class = $class ORDER BY due");
     print "labIDs[$class] = new Array(" . (sizeof($labs) + 1) . ");\n";
     print "labNames[$class] = new Array(" . (sizeof($labs) + 1) . ");\n";
     $i = 1;
     print "labIDs[$class][0] = 0;\n";
     print "labNames[$class][0] = 0;\n";
     while (list($lab) = mysql_fetch_array($labs)) {
        print "labIDs[$class][$i] = '$lab';\n";
        print "labNames[$class][" . $i++ . "] = '";
        print addslashes(mysql_result(mysql_query("SELECT name FROM labs WHERE class = $class AND labID = $lab"), 1));
        print "';\n";
     }
  }
  print <<<EOJS
function clean(what) {
  for (; what.options.length > 1;) {
     what.options[what.options.length - 1] = null;
  }
}

function updateLabs(which) {
  with (document.forms[0]) {
     clean(which);
     curClass = course.options[course.selectedIndex].value;
     for (var i = 1; i < labIDs[curClass].length; i++) {
       which.options[which.options.length] = new Option(labIDs[curClass][i] + ". " + labNames[curClass][i], labIDs[curClass][i]);
     }
  }
}
//--></script>
EOJS;  //************** end dynamic drop-down list magic ***************//

  print form_open();
  //replace the old static drop-down tag with a new dynamic one
  print "Course: <select name=\"course\" onChange=\"javascript: updateLabs(lab);\">\n";
  $classes = mysql_query("SELECT class FROM classes ORDER BY class")
  print "<option value=0 selected>Choose one:</option>\n";
  while (list($class) = mysql_fetch_assoc($classes)) {
    print "<option value=$class>$class</option>\n";
  }
  print "</select><br>\n";
  print "Lab: <select name=\"lab\">\n<option value=0>Choose one\n</select><br>\n"; //will get filled automagically [/php]

which I found here. http://forums.devshed.com/showpost.php?p=608686&postcount=41

However, I just can't get the Javascript to work.

So, would anyone tweak that script for it to work with my database or show me another solution?

This is my database structure, where category.categoryid is a primary key and subjectcat.categoryid is a foreign key.
//Table: category
[categoryid] [category]
1        math
2       computer
3       science
4       social science
5       history
6       humanities
7       foreign language
8       english
9       education
10       engineering
11       business

//Table: subjectcat
[subjectid] [subject] [categoryid]
100        arithmetic        1
101       general math       1
102       pre-algebra       1
103       algebra beginning elem       1
200        microsoft windows        2  
201       microsoft office       2
202       troubleshooting       2
300        general science        3

and so on....

I want one select menu form to list the categories and then another select menu form to dynamically generate the 'subjects' based on the other select form 'category' selected.

Once the user click submit, the $subjectid value will be passed as a $_GET['subjectid']...

Example to the url:
http://www.domain.com/index.php?subjectid=3

Something like that. Can anyone help?
0
Comment
Question by:identityless
3 Comments
 
LVL 9

Accepted Solution

by:
cristi_2112 earned 250 total points
ID: 17121812
Hello,

You should post a copy of the source generated by this page.
Anyway, what I can so far:
- instead of - print "<option value=$class>$class</option>\n";
  use -  print "<option value=\"$class\">$class</option>\n";

- close the <form> tag

But again, you should view source of the page and copy/paste it here, because the script should work.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Generating table dynamically is the most common issue faced by php developers.... So it seems there is a need of an article that explains the basic concept of generating tables dynamically. It just requires a basic knowledge of html and little maths…
Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

820 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question