30/07/2003, 14:41
|
| | | Fecha de Ingreso: enero-2002 Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses Puntos: 0 | |
SELECTS (JS y PHP) Finalmente terminé listas dependientes, y se los paso calientito.
Antes que nada copien el "DUMP", guardenlo como insert.sql, o como quieran llamarlo Y EJECUTENLO.
Esta parte lo hice a pedido de Cluster, jeje.
Código:
DROP TABLE IF EXISTS `categorias`;
CREATE TABLE `categorias` (
`IdCategoria` tinyint(4) NOT NULL auto_increment,
`Categoria` varchar(50) NOT NULL default '',
PRIMARY KEY (`IdCategoria`)
) TYPE=MyISAM AUTO_INCREMENT=9 ;
#
# Volcar la base de datos para la tabla `categorias`
#
INSERT INTO `categorias` (`IdCategoria`, `Categoria`) VALUES (1, 'Memorias');
INSERT INTO `categorias` (`IdCategoria`, `Categoria`) VALUES (2, 'Impresoras');
INSERT INTO `categorias` (`IdCategoria`, `Categoria`) VALUES (3, 'Redes LAN/WAN');
INSERT INTO `categorias` (`IdCategoria`, `Categoria`) VALUES (4, 'Multimedia');
# --------------------------------------------------------
#
# Estructura de tabla para la tabla `subcategorias`
#
DROP TABLE IF EXISTS `subcategorias`;
CREATE TABLE `subcategorias` (
`IdSubCategoria` tinyint(4) NOT NULL auto_increment,
`IdCategoria` tinyint(4) NOT NULL default '0',
`SubCategoria` varchar(50) NOT NULL default '',
PRIMARY KEY (`IdSubCategoria`)
) TYPE=MyISAM PACK_KEYS=0 AUTO_INCREMENT=13 ;
#
# Volcar la base de datos para la tabla `subcategorias`
#
INSERT INTO `subcategorias` (`IdSubCategoria`, `IdCategoria`, `SubCategoria`) VALUES (1, 1, 'DDR PC266');
INSERT INTO `subcategorias` (`IdSubCategoria`, `IdCategoria`, `SubCategoria`) VALUES (2, 1, 'DIMM PC 66');
INSERT INTO `subcategorias` (`IdSubCategoria`, `IdCategoria`, `SubCategoria`) VALUES (3, 1, 'RIMM');
INSERT INTO `subcategorias` (`IdSubCategoria`, `IdCategoria`, `SubCategoria`) VALUES (4, 2, 'Matricial');
INSERT INTO `subcategorias` (`IdSubCategoria`, `IdCategoria`, `SubCategoria`) VALUES (5, 2, 'Laser');
INSERT INTO `subcategorias` (`IdSubCategoria`, `IdCategoria`, `SubCategoria`) VALUES (6, 2, 'Tinta');
INSERT INTO `subcategorias` (`IdSubCategoria`, `IdCategoria`, `SubCategoria`) VALUES (7, 3, 'HUB');
INSERT INTO `subcategorias` (`IdSubCategoria`, `IdCategoria`, `SubCategoria`) VALUES (8, 3, 'SWITCH');
INSERT INTO `subcategorias` (`IdSubCategoria`, `IdCategoria`, `SubCategoria`) VALUES (9, 3, 'Router');
INSERT INTO `subcategorias` (`IdSubCategoria`, `IdCategoria`, `SubCategoria`) VALUES (10, 4, 'Microfono');
INSERT INTO `subcategorias` (`IdSubCategoria`, `IdCategoria`, `SubCategoria`) VALUES (11, 4, 'Parlantes');
INSERT INTO `subcategorias` (`IdSubCategoria`, `IdCategoria`, `SubCategoria`) VALUES (12, 4, 'Camara');
Acá va el código, todo explicadito. Código PHP: <?php if(isset($_POST['send'])){ echo "El valor de Categoria : <b>".$_POST['cat']."</b><br>"; echo "El valor de SubCategoria : <b>".$_POST['sub']."</b>"; } $server = "192.168.1.8"; $user = "biblio"; $password= "*******"; $database= "test"; $mysql = mysql_connect($server, $user, $password) or die(mysql_error()); // hacemos la conexión al servidor MySQL mysql_select_db($database, $mysql) or die(mysql_error()); // seleccionamos la base de datos MySQL $sqlcat = "SELECT c.IdCategoria,c.Categoria " // creamos nuestra consulta para (Categorias) . "FROM Categorias c " . "ORDER BY c.Categoria ASC"; $sqlsubcat = "SELECT s.IdSubCategoria,s.IdCategoria,s.SubCategoria " // creamos nuestra consulta para (SubCategorias) . "FROM SubCategorias s " . "ORDER BY s.IdCategoria"; // es imprescindible que esté ordenado de ese modo, vaya al final para leer mas 1(*). ?> <form name="main" method="post" action="lists.php"> <select name="cat" style="width:180px;" onChange="_addList(this.form.cat[selectedIndex].value);"> <option selected>seleccione una categoria</option> <?php $resultcat = mysql_query($sqlcat, $mysql); //enviamos nuestra sentencia SQL($sqlcat) a MySQL while($rows = mysql_fetch_object($resultcat)) : // comenzamos a recorrer el resultado como un objeto echo "<option value=".$rows->IdCategoria.">".$rows->Categoria."</option>\n"; // imprimo en las opciones del combo endwhile; ?> </select> <select name="sub" style="width:180px;"> </select> <input name="send" type="submit" id="send" value="Enviar"> </form> <script language="Javascript"> function _tupla( field1, field2 ){// que es tupla? informense por ustedes mismos, usen google, jeje this.field1 = field1; this.field2 = field2; } <?php $resultsubcat = mysql_query($sqlsubcat, $mysql); //enviamos nuestra sentencia SQL($sqlsubcat) a MySQL $counterphp = 0; // variable que nos ayudará para generar loa arrays $cat = 0; // variable para verificar cuando cambia el valor de (IdCategoria). while($rows = mysql_fetch_object($resultsubcat)): if ($cat != $rows->IdCategoria){ // este if, detecta el cambio de la categoria $counterphp = 0; // comienzo a contar en 0 $cat = $rows->IdCategoria; echo "var option".$cat." = new Array();\n"; // creamos un nuevo array, y lo imprimimos } echo "option".$cat."[".$counterphp."]=new _tupla('".$rows->SubCategoria."','".$rows->IdSubCategoria."');\n"; $counterphp ++; // incrementamos el valor en uno endwhile; ?> var counterjs; function _addList(array){// agego el contenido en "sub", a partir del valor de la opcion escogida en la lista "cat" _clearList(); array = eval("option" + array); for (counterjs=0; counterjs < array.length; counterjs++) { // agregamos los valores correpondiente en el combo "sub" var optionObj = new Option( array[counterjs].field1, array[counterjs].field2 ); main.sub.options[counterjs] = optionObj; } main.sub.disabled = false; // habilito y mando el foco a "sub" main.sub.focus(); } function _clearList() { // limpio el contenido de "sub" main.sub.length=0; } function _controlError() { // esta función nos ayuda controlar el error. 2(*) return true; } main.sub.disabled = true; // deshabilito el "sub" window.onerror = _controlError; </script> <?php mysql_close($mysql); // cerramos la conexion con MySQL /* (*) 1.) La razón por la que debe ir ordenado por el "idcategoria" es, porque al momento de hacer la comparación "$cat != $rows->IdCategoria", se produce un desorden, mostrando datos faltantes en el "sub". 2.) Cuando se produce el error?, cuando seleccionamos el "cat", y no hubo resultados para esa opcion. Vale decir, cuando la categoria no tiene subcategorias. no me cree?. quite window.onerror = _controlError; y aumente una categoria. y ejecutelo. NOTAS: cat = me refiero a la lista desplegable 1, que contiene la categoria sub = me refiero a la lista desplegable 2, que contiene la subcategoria */ ?> Cualquier comentario, y arreglo es bienvenido.
Saludos
Última edición por biblio; 30/07/2003 a las 21:43 |