On Tuesday, June 25, 2002, at 04:01 PM, Phillip S. Baker wrote:
> Yes I knew it was Javascript code, but I also thought PHP was needed to
> get the values from the DB.
> Either case I do need help with what the code might look like.
Okay, here it is... kinda complicated, but using this theory you should
be able to do it:
You need to populate an HTML listbox based on DB data. Make sure your
SELECT query gets both the primary key of each record and the actual
name that you want to appear in the listbox. Dynamically generate the
listbox in the normal way, by using the primary key as the "value"
attribute of each <option> tag and using the other column value as the
CDATA contents of the option element, like this:
<?php
$sql = "SELECT id, name FROM table";
$result = mysql_query($sql, $db);
$output = '';
while ($row = mysql_fetch_assoc($result)) {
$output .= "\t<option value=\"" . $row['id']
. "\" onselect\"controlOther(" . $row['id']
. ")\">" . $row['name']
. "</option>\n";
}
?>
You will have something like this in $output:
<option value="1" onselect="controlOther(1)">Yoda</option>
<option value="2" onselect="controlOther(2)">Ben</option>
<option value="3" onselect="controlOther(3)">Annikin</option>
<option value="4" onselect="controlOther(4)">Luke</option>
The "controlOther()" is a JavaScript function that you will write in a
moment.
Anyway, you now have a listbox with values that exactly match your
JavaScript array. What you do next is you assign a name to the select
tag which holds the listbox values, and place the listbox values into
the select tag:
<?php
$selectTag = "<select name='jedimasters'>" . $output . "</select>\n";
?>
And of course you need to put your select tag into a named form (the
names are important for the JavaScript!):
<?php
$form = " <form method=\"" . $_SERVER['PHP_SELF'] . "\"
name=\"choosejedi\">
BLAH BLAH BLAH other inputs can go here
" . $selectTag . "
</form>";
?>
Okay! Now you have your form, named "choosejedi", your input, named
"jedimasters", and a listbox filled with name/value pairs. Your
intended effect is to allow one listbox's actions to control another
listbox's data. For this, you need to write a JavaScript function that
controls the other listbox.
<?php
$coFunc = " <script type='text/javascript'>
<!--
function controlOther(choice)
{
var contents = '';
switch(choice) {
case 1:
contents = AAAA;
break;
case 2:
contents = BBBB;
break;
case 3:
contents = CCCC;
break;
case 4:
contents = DDDD;
break;
default:
alert('Invalid value
selected');
} // end switch()
-->
</script>\n";
?>
You can see what this function does -- it takes the value of the
argument passed to it and executes certain other code according to the
switch() statement. I don't have time to actually write out possible
code for these cases, so I just put "AAAA" or "BBBB" etc (it's all a
hypothetical example anyway). You will want to have already generated
this data from the DB using PHP anyway, so you would just plug in a few
variables here (whose values are defined earlier in the script).
The point is that every time someone makes a selection in the listbox,
they will trigger the ONSELECT event handler, which calls the
"controlOther()" JavaScript function. The value passed to
controlOther() tells ANOTHER listbox on the page what it should be
populated with, based on the switch() statement. You need to have names
for all your forms and your inputs so that you can refer to them using
the JavaScript Document Object Model... in other words, your controlling
code would look something like
document.choosejedis.jedimasters.value
refers to the selected value in the main listbox, and can be used to
perform actions on other listboxes.
ANYWAY... this got way longer than I intended. Basically, I haven't
tested any of the above but in theory it should work, but be sure to do
mad browser detection so you can be sure that it'll work, etc. I
personally wouldn't even bother, this kind of coding is pretty technical
and you may as well just do it in PHP in case the user doesn't have JS
turned on. I think it's a lot easier to do it in PHP too. Sure, the
user will have to submit the page to update the new listbox, but... not
so hard, eh? Essentially it boils down to this pseudocode:
1. use PHP to dynamically generate a main listbox to control the next
listbox
2. use PHP to dynamically generate possible values for the secondary
listbox (I would just throw 'em in arrays)
3. determine which array should populate the second listbox based on the
input in the first listbox using JavaScript event handlers in the first
listbox
HTH,
Erik
----
Erik Price
Web Developer Temp
Media Lab, H.H. Brown
[EMAIL PROTECTED]
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php