listbox enlazados con php

rocio
30 de Diciembre del 2002
necesito ayuda, soy una novata en php y msql y me pidieron hacer lo suiguiente

manejar un listbox por medio del cual, tengo que desplegar los datos de un campo,

y al seleccionar una opcion del primer listbox se listen en un segundo listbox datos

de otro campo almacenados en otra tabla.
Les agradeceré enormemente su ayuda.

Lutian de Martian
30 de Diciembre del 2002
Hola Rocio, lo que querés lo tenés que hacer con Javascript y es bastante complicado:
Yo hice algo parecido con un combo triple y me anduvo bastante bien, te lo paso, cualquier duda avisame.

Aca te paso la página para seleccionar los listbox, después tenés que tomar las variables e ingresarlas a la db.

<?PHP
include("config/config.php");
$link = mysql_connect("$dbhost", "$dbuname", "$dbpass");
mysql_select_db("$dbname", $link);

echo " <TR>";
echo " <TD ALIGN=RIGHT VALIGN=TOP>";
echo " <TABLE WIDTH=90% BORDER=0 CELLPADDING=0 CELLSPACING=4>";
echo " <form name="isc" action="pagina.php" method=post>";
echo " <input type=hidden name=cambio value=1>";
echo " <TR><TD>Región: </TD><TD><select name="id_zona_gral" size="1" onChange="redirect(this.options.selectedIndex)">n";
$sql_zona_gral = "select id,nombre_zona_gral from zona_gral where id > 0";
$r_zona_gral = mysql_query($sql_zona_gral, $link);
if($m_zona_gral = mysql_fetch_array($r_zona_gral)) {
echo " <option value="%">Zona General</option>n";
do {
unset($selected);
echo " <option value="$m_zona_gral[id]">$m_zona_gral[nombre_zona_gral]</option>n";
} while($m_zona_gral = mysql_fetch_array($r_zona_gral));
echo " </select></TD></TR>n";
}
echo " <TR><TD>Zona: </TD><TD><select name="id_zona" size="1" onChange="redirect1(this.options.selectedIndex)">n";
echo " <option value="%" selected>Zona</option><option value="%" selected>Zona</option><option value="%" selected>Zona</option>n";

echo " </select></TD></TR>n";

echo " <TR><TD>Area General: </TD><TD><select name="id_hombu" size="1" onChange="redirect2(this.options.selectedIndex)">n";
echo " <option value="%" selected>Area Gral</option><option value="%" selected>Area Gral</option><option value="%" selected>Area Gral</option>n";

echo " </select></TD></TR>n";

echo " <script>n";

echo " var groups=document.isc.id_zona_gral.options.lengthn";
echo " var group=new Array(groups)n";
echo " for (i=0; i<groups; i++)n";
echo " group[i]=new Array()n";

$sql_zona = "select id,id_zona_gral,nombre_zona,info from zona where id >= 0 order by id_zona_gral";
$r_zona = mysql_query($sql_zona, $link);
if($m_zona = mysql_fetch_array($r_zona)) {
echo " group[0][0]=new Option("Zona","%");n";
do {
unset($selected);
echo " group[$m_zona[id_zona_gral]][$m_zona[id]]=new Option("$m_zona[nombre_zona]","$m_zona[info]");n";
} while($m_zona = mysql_fetch_array($r_zona));

echo " var temp=document.isc.id_zonan";
}

echo " function redirect(x){n";
echo " for (m=temp.options.length-1;m>0;m--)n";
echo " temp.options[m]=nulln";
echo " for (i=0;i<group[x].length;i++){n";
echo " temp.options[i]=new Option(group[x][i].text,group[x][i].value)n";
echo " }n";
echo " temp.options[0].selected=truen";
echo " redirect1(0)n";
echo " }n";



echo " var secondGroups=document.isc.id_zona.options.lengthn";
echo " var secondGroup=new Array(groups)n";
echo " for (i=0; i<groups; i++) {n";
echo " secondGroup[i]=new Array(group[i].length)n";
echo " for (j=0; j<group[i].length; j++) {n";
echo " secondGroup[i][j]=new Array() }}n";

$sql_hombu = "select id_zona_gral,id_zona,id,nombre_hombu,info from hombu where id >= 0 order by id_zona_gral";
$r_hombu = mysql_query($sql_hombu, $link);
if($m_hombu = mysql_fetch_array($r_hombu)) {
echo " secondGroup[0][0][0]=new Option("Area Gral","%");n";
do {
unset($selected);
echo " secondGroup[$m_hombu[id_zona_gral]][$m_hombu[id_zona]][$m_hombu[id]]=new Option("$m_hombu[nombre_hombu]","$m_hombu[info]");n";
} while($m_hombu = mysql_fetch_array($r_hombu));


echo " var temp1=document.isc.id_hombun";
echo " function redirect1(y){n";
echo " for (m=temp1.options.length-1;m>0;m--)n";
echo " temp1.options[m]=nulln";
echo " for (i=0;i<secondGroup[document.isc.id_zona_gral.options.selectedIndex][y].length;i++){n";
echo " temp1.options[i]=new Option(secondGroup[document.isc.id_zona_gral.options.selectedIndex][y][i].text,secondGroup[document.isc.id_zona_gral.options.selectedIndex][y][i].value)n";
echo " }n";
echo " temp1.options[0].selected=truen";
echo " }n";

echo " function redirect2(z){n";
echo " temp1[z].valuen";
echo " }n";
}
echo " </script>n";
echo " <TR><TD WIDTH=25%><input type=submit value="Cargar Datos" class=easy3></TD></TR>n";
echo " </TABLE></form>";
echo " </TD>";
echo " </TR>";
?>

Acá te paso la configuración de las bases para que veas como funciona el script:

CREATE TABLE zona (
id int(5) DEFAULT 0 NOT NULL,
id_zona_gral int(5) DEFAULT 0 NOT NULL,
nombre_zona varchar(50) NOT NULL,
responsables longtext NOT NULL,
info varchar(5) NOT NULL
);

#
# Volcar la base de datos para la tabla 'zona'
#

INSERT INTO zona VALUES ( '1', '0', 'Zona', '', '%');
INSERT INTO zona VALUES ( '0', '1', 'Zona', '', '%');
INSERT INTO zona VALUES ( '1', '1', 'Norte 1', '', '1');
INSERT INTO zona VALUES ( '2', '1', 'Norte 2', '', '2');
INSERT INTO zona VALUES ( '3', '1', 'Norte 3', '', '3');


CREATE TABLE zona_gral (
id int(5) NOT NULL auto_increment,
nombre_zona_gral varchar(50) NOT NULL,
responsables longtext NOT NULL,
info longtext NOT NULL,
PRIMARY KEY (id),
UNIQUE id (id),
KEY id_2 (id)
);

#
# Volcar la base de datos para la tabla 'zona_gral'
#

INSERT INTO zona_gral VALUES ( '1', 'Norte', '', '');
INSERT INTO zona_gral VALUES ( '2', 'Sur', '', '');
INSERT INTO zona_gral VALUES ( '3', 'Este', '', '');
INSERT INTO zona_gral VALUES ( '4', 'Oeste', '', '');

Suerte
Lutian_de_Martian


Lutian de Martian
30 de Diciembre del 2002
Hola Rocio, me faltó una tabla =)

CREATE TABLE hombu (
id int(5) DEFAULT 0 NOT NULL,
id_zona_gral int(5) DEFAULT 0 NOT NULL,
id_zona int(5) DEFAULT 0 NOT NULL,
nombre_hombu varchar(50) NOT NULL,
responsables longtext NOT NULL,
info varchar(5) NOT NULL
);

#
# Volcar la base de datos para la tabla 'hombu'
#

INSERT INTO hombu VALUES ( '0', '1', '0', 'Area Gral', '', '%');
INSERT INTO hombu VALUES ( '0', '1', '1', 'Area Gral', '', '%');
INSERT INTO hombu VALUES ( '1', '1', '1', 'Norte 1 1', '', '1');
INSERT INTO hombu VALUES ( '2', '1', '1', 'Norte 1 1', '', '2');


Suerte
Lutian_de_Martian


carolina
30 de Diciembre del 2002
hola mira yo tambien tengo que hacer lo que te pidieron a vos y es re urgente utilice el ejemplo de respuesta pero me da una error
es el siguiente

SecondGroup(..)(...).length es un nulo o no es un objeto

no se que puede ser porque soy novata en javascript y php
por vavor si lo solucionaste avisame
Gracias