Foros del Web » Programando para Internet » PHP »

select enlazados (one moret time)

Estas en el tema de select enlazados (one moret time) en el foro de PHP en Foros del Web. Ya se que hay un monton de post sobre este tema, y los he leido y probado pero no hay manera. La parte de php ...
  #1 (permalink)  
Antiguo 15/03/2009, 11:30
 
Fecha de Ingreso: enero-2008
Mensajes: 97
Antigüedad: 12 años
Puntos: 3
select enlazados (one moret time)

Ya se que hay un monton de post sobre este tema, y los he leido y probado pero no hay manera.

La parte de php creo que la llevo bien, pero es que todos acaban incorporando java, ajax o las 2 cosas, y ahí me lio.

Lo que intento hacer es lo de siempre. Un select que extrae los valores de la base de datos y según el que escojas, el segundo select extrae otros valores de la base de datos.

Lo que tengo por el momento es esto:

Código PHP:
<form name="sections" method="post" action="<?=$_SERVER['PHP_SELF']?>">
<select name="sections">
<?php

include "config.php";

$sql "SELECT id, name FROM jos_sections ORDER BY name ASC";
$sql mysql_query($sql);

while (
$row mysql_fetch_assoc($sql))
    {
        echo 
'<option value="'.$row['id'].'" onChange="this.form.submit();">'.$row['name'].'</option>'//Select del primer formulario
    
}

?>
</select>
</form>
<select name="categories">
<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {    
        
$sql "SELECT id, name FROM jos_categories ORDER BY name ASC";
        
$sql mysql_query($sql);
    
        while (
$row mysql_fetch_assoc($sql))
            {
                echo 
'<option value="'.$row['id'].'">'.$row['name'].'</option>'//Select del segundo formulario
            
}
}
?>
</select>
Pero, obviamente, el segundo select no muestra nada. Falta "algo" y no se qué es...

¿Se supone que para que me muestre el segundo select he de hacer primero un submit?

¿Para hacerlo todo en la misma página voy a necesitar javascript o ajax? Es que no tengo ni idea de ninguno de los 2...

Última edición por neojordan; 15/03/2009 a las 11:52
  #2 (permalink)  
Antiguo 16/03/2009, 08:40
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 11 años, 10 meses
Puntos: 20
Respuesta: select enlazados (one moret time)

Lo mejor seria usar ajax... pero igual se puede hacer solo con PHP, solo que hay que recargar toda la pagina cada ves que elijes una opcion en tu select, osea es mucho mas lento y nada amigable para el usuario...
__________________
Firma:
Es mas dificil para el mono entender que el hombre desciende de el....

PD: Siempre doy karma al que me da una buena respuesta... ;0)
  #3 (permalink)  
Antiguo 16/03/2009, 08:56
 
Fecha de Ingreso: enero-2008
Mensajes: 97
Antigüedad: 12 años
Puntos: 3
Respuesta: select enlazados (one moret time)

Yo quiero usar ajax, pero no tengo ni idea de este lenguaje... a ver si alguien puede mover esto a la sección de ajax y que allí me hechen una mano.
  #4 (permalink)  
Antiguo 16/03/2009, 09:08
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 11 años, 10 meses
Puntos: 20
Respuesta: select enlazados (one moret time)

Espero que este ejemplo de select entrelazados usando ajax y php te sirva...




Crea 4 archivos:


1) archivo selectentrelazados.php:

Código PHP:
<?php require_once('Connections/area.php'); ?>
<?php
mysql_select_db
($database_area$area);
$query_Recordset1 "SELECT Iddepartamento, departamento FROM departamento order by departamento ASC";
$Recordset1 mysql_query($query_Recordset1$area) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 mysql_num_rows($Recordset1);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
<script type="text/javascript" language="javascript">
<!--//
function toggle(what) {
        var aobj = document.getElementById(what);
        if( aobj.style.display == 'none' ) {
               aobj.style.display = '';
        } else {
               aobj.style.display = 'none';
        }
}
function CrearXMLHttp(){
    XMLHTTP=false;
    if(window.XMLHttpRequest){
        return new XMLHttpRequest();
    }else if(window.ActiveXObject){
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
}
// suponiendo que tu div se llama loading
function OpenPage(url,id,loading){
//alert(url+' '+id);
    req=CrearXMLHttp();
    if(req){
        req.onreadystatechange = function() { manejador(id,loading); }; // aca cambie
        req.open("POST",url,true);
        req.send(null);
                toggle(loading); // ojo aqui
    }
}
function manejador(id,loading){
    if(req.readyState == 4){
        if(req.status == 200){
                        toggle(loading); // ojo aca
            document.getElementById(id).innerHTML=req.responseText;
        }else{
            //alert("Error"+req.statusText)
            alert("Error: es posible que tu navegador no sea compatible con las funciones de esta pagina, proba ingresando de nuevo desde Internet Explorer.");
        }
    }
}

function cargaselect(){
var variable = document.getElementById('depto').value;
var url = 'select2.php?id='+variable;

        OpenPage(url,'ciudades','loading');
}
</script>
</head>

<body>
<div id="provincias">
  <label>
  <select name="select1" id="depto" onchange="cargaselect();">
  <?php do{ ?>
      <option value="<?php echo $row_Recordset1['Iddepartamento']; ?>"><?php echo $row_Recordset1['departamento']; ?></option>
    <?php } while ($row_Recordset1 mysql_fetch_assoc($Recordset1)); ?>
  </select>
  </label>
</div>
<br />
<br /><br />
<div id="ciudades">
     <?php require("cargando.php"); ?> 
</div>
</body>
</html>
<?php
mysql_free_result
($Recordset1);
?>
2) archivo select2.php:

Código PHP:
<?php require_once('Connections/area.php'); ?>
<?php
$id
=intval($_GET['id']);
mysql_select_db($database_area$area);
$query_Recordset2 "SELECT Idciudad, Iddepartamento, Ciudad FROM ciudad Where Iddepartamento = '$id'";
$Recordset2 mysql_query($query_Recordset2$area) or die(mysql_error());
$row_Recordset2 mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 mysql_num_rows($Recordset2);
?>
<select name="ciudad">
<?php do{ ?>
    <option value="<?php echo $row_Recordset2['Idciudad']; ?>"><?php echo htmlentities($row_Recordset2['Ciudad']); ?></option>
<?php } while ($row_Recordset2 mysql_fetch_assoc($Recordset2)); ?>
</select>
<?php require('cargando.php'); ?>
<?php
mysql_free_result
($Recordset2);
?>

3) archivo cargando.php:

Código PHP:

<br /><div id="loading" style="display:none; background-color:#FF0000; color:#FFFFFF; font-weight:bold;  width:120px;">Cargando...</div><br /> 

4) archivo area.php:


Código PHP:

<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_area "localhost";
$database_area "area";
$username_area "root";
$password_area "";
$area mysql_pconnect($hostname_area$username_area$password_area) or trigger_error(mysql_error(),E_USER_ERROR); 
?>
__________________
Firma:
Es mas dificil para el mono entender que el hombre desciende de el....

PD: Siempre doy karma al que me da una buena respuesta... ;0)
  #5 (permalink)  
Antiguo 16/03/2009, 09:08
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 11 años, 10 meses
Puntos: 20
Respuesta: select enlazados (one moret time)

luego crea la base de datos:

Código:
CREATE DATABASE `area` ;
--
-- Estructura de tabla para la tabla `departamento`
--

CREATE TABLE `departamento` (
  `Iddepartamento` int(4) NOT NULL auto_increment,
  `departamento` varchar(50) NOT NULL,
  PRIMARY KEY  (`Iddepartamento`),
  UNIQUE KEY `departamento` (`departamento`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;

--
-- Volcar la base de datos para la tabla `departamento`
--

INSERT INTO `departamento` (`Iddepartamento`, `departamento`) VALUES
(15, 'Neembuc&uacute;'),
(1, 'Alto Paraguay'),
(2, 'Alto Paran&aacute;'),
(3, 'Amambay'),
(4, 'Asunción Capital'),
(5, 'Boquer&oacute;n'),
(6, 'Caaguaz&uacute;'),
(7, 'Caazap&aacute;'),
(8, 'Canindey&uacute;'),
(9, 'Central'),
(10, 'Concepci&oacute;n'),
(11, 'Cordillera'),
(12, 'Guair&aacute;'),
(13, 'Itapua'),
(14, 'Misiones'),
(16, 'Paraguar&iacute;'),
(17, 'Presidente Hayes'),
(18, 'San Pedro');

--
-- Estructura de tabla para la tabla `ciudad`
--

CREATE TABLE `ciudad` (
  `Idciudad` int(10) NOT NULL auto_increment,
  `Iddepartamento` varchar(4) NOT NULL,
  `Ciudad` varchar(50) NOT NULL,
  PRIMARY KEY  (`Idciudad`),
  UNIQUE KEY `Iddepartamento` (`Iddepartamento`,`Ciudad`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=226 ;

--
-- Volcar la base de datos para la tabla `ciudad`
--

INSERT INTO `ciudad` (`Idciudad`, `Iddepartamento`, `Ciudad`) VALUES
(1, '1', 'Fuerte Olimpo'),
(2, '1', 'Puerto Casado'),
(86, '10', 'Belén'),
(87, '10', 'Concepción Capital'),
(88, '10', 'Horqueta'),
(89, '10', 'Loreto'),
(90, '10', 'San Lázaro'),
(91, '10', 'Yby Yau'),
(92, '11', 'Altos'),
(93, '11', 'Arroyos y Esteros'),
(94, '11', 'Atyrá'),
(95, '11', 'Caacupé'),
(96, '11', 'Caraguatay'),
(97, '11', 'Emboscada'),
(98, '11', 'Eusebio Ayala'),
(99, '11', 'Isla Pucú'),
(100, '11', 'Itacurubí de la Cordillera'),
(101, '11', 'Juan de Mena'),
(102, '11', 'Loma Grande'),
(103, '11', 'Mbocayaty del Yhaguy'),
(104, '11', 'Nueva Comlombia'),
(105, '11', 'Piribebuy'),
(106, '11', 'Primero de Marzo'),
(107, '11', 'San Bernardino'),
(108, '11', 'San José Obrero'),
(109, '11', 'Santa Elena'),
(110, '11', 'Tobatí'),
(111, '11', 'Valenzuela'),
(112, '12', 'Borja'),
(113, '12', 'Capitán Mauricio José Troche'),
(114, '12', 'Coronel Martinez'),
(115, '12', 'Doctor Botrell'),
(116, '12', 'Féliz Pérez Cardozo'),
(117, '12', 'General Eugenio A. Garay'),
(118, '12', 'Independencia'),
(119, '12', 'Itapé'),
(120, '12', 'Iturbe'),
(121, '12', 'José Fassardi'),
(122, '12', 'Mbocayaty del Guairá'),
(123, '12', 'Natalicio Talavera'),
(124, '12', 'Ñumi'),
(125, '12', 'Paso Yobai'),
(126, '12', 'San Salvador'),
(127, '12', 'Villarrica'),
(128, '12', 'Yataity del Guairá'),
(129, '13', 'Alto Verá'),
(130, '13', 'Bella Vista'),
(131, '13', 'Cambyretá'),
(132, '13', 'Capitán Meza'),
(133, '13', 'Capitán Miranda'),
(134, '13', 'Carlos Antonio López'),
(135, '13', 'Carmen del Paraná'),
(136, '13', 'Coronel Bogado'),
(137, '13', 'Edelira'),
(138, '13', 'Encarnación'),
(139, '13', 'Fram'),
(140, '13', 'General Artigas'),
(141, '13', 'General Delgado'),
(142, '13', 'Hohenau'),
(143, '13', 'Itapúa Poty'),
(144, '13', 'Jesús'),
(145, '13', 'José Leandro Oviedo'),
(146, '13', 'La Paz'),
(147, '13', 'Mayor Julio D. Otaño'),
(148, '13', 'Natalio'),
(149, '13', 'Nueva Alborada'),
(150, '13', 'Obligado'),
(151, '13', 'Pirapó'),
(152, '13', 'San Cosme y Damiá'),
(153, '13', 'San Juan del Paraná'),
(154, '13', 'San Pedro del Paraná'),
(155, '13', 'San Rafael del Paraná'),
(156, '13', 'Tomás Romero Pereira'),
(157, '13', 'Trinidad'),
(158, '13', 'Yatytay'),
(159, '14', 'Ayolas'),
(160, '14', 'San Ignacio'),
(161, '14', 'San Juan Bautista'),
(162, '14', 'San Miguel'),
(163, '14', 'San Patricio'),
(164, '14', 'Santa María'),
(165, '14', 'Santa Rosa'),
(166, '14', 'Santiago'),
(167, '14', 'Villa Florida'),
(168, '14', 'Yabebyry'),
(169, '15', 'Alberdi'),
(170, '15', 'Cerrito'),
(171, '15', 'Desmochados'),
(172, '15', 'General José E. Díaz'),
(173, '15', 'Guazú Cuá'),
(174, '15', 'Humaitá'),
(175, '15', 'Isla Umbú'),
(176, '15', 'Laureles'),
(177, '15', 'Mayor José Dejesús Martínez'),
(178, '15', 'Paso de Patria'),
(179, '15', 'Pilar'),
(180, '15', 'San Juan Bautista de Ñeembucú'),
(181, '15', 'Tacuaras'),
(182, '15', 'Villa Franca'),
(183, '15', 'Villa Oliva'),
(184, '15', 'Villalbín'),
(185, '16', 'Acahay'),
(186, '16', 'Caapucú'),
(187, '16', 'Caballero'),
(188, '16', 'Carapeguá'),
(189, '16', 'Escobar'),
(190, '16', 'La Colmena'),
(191, '16', 'Mbuyapey'),
(192, '16', 'Paraguarí Capital'),
(193, '16', 'Pirayú'),
(194, '16', 'Quiindy'),
(195, '16', 'Quyquyhó'),
(196, '16', 'San Roque G. de Santa Cruz'),
(197, '16', 'Sapucai'),
(198, '16', 'Tebicuarymí'),
(199, '16', 'Yaguarón'),
(200, '16', 'Ybycuí'),
(201, '16', 'Ybytimí'),
(202, '17', 'Benjamín Aceval'),
(203, '17', 'Mariano Roque Alonso'),
(204, '17', 'Nanawa'),
(205, '17', 'Nueva Esperanza'),
(206, '17', 'Puerto José Falcón'),
(207, '17', 'Puerto Pinasco'),
(208, '17', 'Villa Hayes'),
(209, '18', '25 de Diciembre'),
(210, '18', 'Antequera'),
(211, '18', 'Capiibary'),
(212, '18', 'Choré'),
(213, '18', 'General Elizardo Aquino'),
(214, '18', 'General Francisco I. Resquín'),
(215, '18', 'Guajayvi'),
(216, '18', 'Itacurubí del Rosario'),
(217, '18', 'Lima'),
(218, '18', 'Nueva Germania'),
(219, '18', 'San Estanislao'),
(220, '18', 'San Pablo'),
(221, '18', 'San Pedro Capital'),
(222, '18', 'Tacuatí'),
(223, '18', 'Unión'),
(224, '18', 'Villa del Rosario'),
(225, '18', 'Yataity del Norte'),
(3, '2', 'Ciudad del Este'),
(4, '2', 'Domingo Martínez de Irala'),
(5, '2', 'Dr. Juan León Malloquín'),
(6, '2', 'Hernandaríaz'),
(7, '2', 'Iruña'),
(8, '2', 'Itakyry'),
(9, '2', 'Juan Emilio O''Leary'),
(10, '2', 'Los Cedrales'),
(11, '2', 'Mbaracayú'),
(12, '2', 'Minga Guazú'),
(13, '2', 'Minga Porá'),
(14, '2', 'Ñacunday'),
(15, '2', 'Naranjal'),
(16, '2', 'Presidente Franco'),
(17, '2', 'San Alberto'),
(18, '2', 'San Cristóbal'),
(19, '2', 'Santa Rita'),
(20, '2', 'Santa Rosa del Monday'),
(21, '2', 'Yguazú'),
(22, '3', 'Bella vista'),
(23, '3', 'Capitan Bado'),
(24, '3', 'Pedro juan Caballero'),
(25, '4', 'Asunción Capital'),
(26, '5', 'Mcal. Jose Felix Estigarribia'),
(27, '6', '3 de Febrero'),
(28, '6', 'Caaguazú'),
(29, '6', 'Carayaó'),
(30, '6', 'Coronel Oviedo'),
(31, '6', 'Dr. Cecilio Báez'),
(32, '6', 'Dr. J. Eulogio Estigarribia'),
(33, '6', 'Dr. Juan Manuel Frutos'),
(34, '6', 'José Domingo Ocampos'),
(35, '6', 'La Pastora'),
(36, '6', 'Mcal. Francisco Solano López'),
(37, '6', 'Nueva Londres'),
(38, '6', 'R.I. 3 Corrales'),
(39, '6', 'Raúl Arsenio Oviedo'),
(40, '6', 'Repatriación'),
(41, '6', 'San Joaquín'),
(42, '6', 'San José de los Arroyos'),
(43, '6', 'Santa Rosa del Mbutuy'),
(44, '6', 'Simón Bolivar'),
(45, '6', 'Vaquería'),
(46, '6', 'Yhú'),
(47, '7', 'Abaí'),
(48, '7', 'Buena Vista'),
(49, '7', 'Caazapá Capital'),
(50, '7', 'Dr. Moisés S. Bertoni'),
(51, '7', 'General Higinio Morínigo'),
(52, '7', 'Maciel'),
(53, '7', 'San Juan Nemopuceno'),
(54, '7', 'Tavaí'),
(55, '7', 'Yegros'),
(56, '7', 'Yuty'),
(57, '8', 'Corpus Chisti'),
(58, '8', 'Curuguaty'),
(59, '8', 'Francisco Caballero Alvarez'),
(60, '8', 'Itanará'),
(61, '8', 'Katuete'),
(62, '8', 'La Paloma'),
(63, '8', 'Salto del Guairá'),
(64, '8', 'Villa Curuguaty'),
(65, '8', 'Villa Ygatimi'),
(66, '8', 'Ypejhú'),
(67, '9', 'Areguá'),
(68, '9', 'Capiatá'),
(69, '9', 'Fernando de la Mora'),
(70, '9', 'Guarambaré'),
(71, '9', 'Itá'),
(72, '9', 'Itauguá'),
(73, '9', 'José Augusto Saldivar'),
(74, '9', 'Lambaré'),
(75, '9', 'Limpio'),
(76, '9', 'Luque'),
(77, '9', 'Mariano Roque Alonso'),
(78, '9', 'Ñemby'),
(79, '9', 'Nueva Italia'),
(80, '9', 'San Antonio'),
(81, '9', 'San Lorenzo'),
(82, '9', 'Villa Elisa'),
(83, '9', 'Villeta'),
(84, '9', 'Ypané'),
(85, '9', 'Yparacaí');
y listo!

ahora ejecuta tu archivo principal:

http://localhost/test/selectentrelazados.php
-
__________________
Firma:
Es mas dificil para el mono entender que el hombre desciende de el....

PD: Siempre doy karma al que me da una buena respuesta... ;0)
  #6 (permalink)  
Antiguo 16/03/2009, 09:31
 
Fecha de Ingreso: marzo-2009
Mensajes: 11
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: select enlazados (one moret time)

Yo lo hice así, lo que tiene dos inconvenientes.
La pagina se carga a si mismo.
no se queda seleccionada la opcion que elegimos.

Eso si, funcionar funciona y carga menu, categorias y subcategorias estupendamente.

Código PHP:
<html>
<head>
<title>título</title>    
<script language="javascript">
function salta(Sel){
if (Sel.ad.selectedIndex != 0){
document.location=Sel.ad.options[Sel.ad.selectedIndex].value
}}
</script>
</head>

<body>

<form>
1ºSELECT
<?php
include("conexion.php");
$MENU=$_REQUEST['menu'];
$registros=mysql_query("select * from tabla_menu order by cod");
$menu=$reg['menu'];
echo 
"<select name='ad' id='ad'  onchange='salta(this.form)'>";
echo 
"<option value='menu' selected>< Elegir Men&uacute; ></option>";                                
while (
$reg=mysql_fetch_array($registros)){                                            
echo 
"<option value='elegir_noticia.php?categorias=".$reg['menu']."' target='principal'>".$reg['menu']."</option>";
}                                
echo 
"</select>";
?>
</form>

2ºSELECT
<form>
<?php
$COD
=$_REQUEST['cod'];
$MENU=$_REQUEST['menu'];
$CATEGORIAS=$_REQUEST['categorias'];
$SUBCATEGORIAS=$_REQUEST['subcategorias'];
$NOTICIAS=$_REQUEST['noticias'];
$registros=mysql_query("select * from tabla_categorias where menu='$CATEGORIAS' order by cod");
$categorias=$reg['categorias'];
echo 
"<select name='ad' id='ad'  onchange='salta(this.form)'>";
echo 
"<option value='categorias' selected>< Elegir Categor&iacute;a ></option>";                                
while (
$reg=mysql_fetch_array($registros)){                                            
echo 
"<option value='elegir_noticia.php?categorias=".$reg['menu']."&subcategorias=".$reg['categorias']."' target='principal'>".$reg['categorias']."</option>";
}                                
echo 
"</select>";
?>
</form>

3ºSELECT
<form>
<?php
$COD
=$_REQUEST['cod'];
$MENU=$_REQUEST['menu'];
$CATEGORIAS=$_REQUEST['categorias'];
$SUBCATEGORIAS=$_REQUEST['subcategorias'];
$NOTICIAS=$_REQUEST['noticias'];
$registros=mysql_query("select * from tabla_subcategorias where categorias='$SUBCATEGORIAS' order by cod");
$subcategorias=$reg['subcategorias'];
echo 
"<select name='ad' id='ad' onchange='salta(this.form)'>";
echo 
"<option value='subcategorias' selected>< Elegir Subcategor&iacute;a ></option>";                                
while (
$reg=mysql_fetch_array($registros)){                                            
echo 
"<option value='crear_noticia.php?cod=".$reg['menu']."&id_menu=".$reg['id_menu']."&menu=".$reg['categorias']."&categorias=".$reg['id_categorias']."&id_subcategorias=".$reg['cod']."&subcategorias=".$reg['subcategorias']."' target='principal'>".$reg['subcategorias']."</option>";
}                                
echo 
"</select>";
?>
</form>

</body>
</html>
  #7 (permalink)  
Antiguo 16/03/2009, 09:37
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 11 años, 10 meses
Puntos: 20
Respuesta: select enlazados (one moret time)

ese es el inconveniente con no usar ajax...

crea los 4 archivos que puse ahi arriba y la base de datos y proba.... vas a ver que con ajax es mejor...

pero si queres que te quede selecionado usando solo php es facil...

Código PHP:
<?php if($_GET['cat'] == $row['categoria']){ ?> selected="selected" <?php ?>
pero te recomiendo hacerlo con ajax.. es mas userfriendly...
__________________
Firma:
Es mas dificil para el mono entender que el hombre desciende de el....

PD: Siempre doy karma al que me da una buena respuesta... ;0)
  #8 (permalink)  
Antiguo 16/03/2009, 09:41
 
Fecha de Ingreso: enero-2008
Mensajes: 97
Antigüedad: 12 años
Puntos: 3
Respuesta: select enlazados (one moret time)

Cita:
Iniciado por farra Ver Mensaje
Espero que este ejemplo de select entrelazados usando ajax y php te sirva...




Crea 4 archivos:


1) archivo selectentrelazados.php:

Código PHP:
<?php require_once('Connections/area.php'); ?>
<?php
mysql_select_db
($database_area$area);
$query_Recordset1 "SELECT Iddepartamento, departamento FROM departamento order by departamento ASC";
$Recordset1 mysql_query($query_Recordset1$area) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 mysql_num_rows($Recordset1);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
<script type="text/javascript" language="javascript">
<!--//
function toggle(what) {
        var aobj = document.getElementById(what);
        if( aobj.style.display == 'none' ) {
               aobj.style.display = '';
        } else {
               aobj.style.display = 'none';
        }
}
function CrearXMLHttp(){
    XMLHTTP=false;
    if(window.XMLHttpRequest){
        return new XMLHttpRequest();
    }else if(window.ActiveXObject){
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
}
// suponiendo que tu div se llama loading
function OpenPage(url,id,loading){
//alert(url+' '+id);
    req=CrearXMLHttp();
    if(req){
        req.onreadystatechange = function() { manejador(id,loading); }; // aca cambie
        req.open("POST",url,true);
        req.send(null);
                toggle(loading); // ojo aqui
    }
}
function manejador(id,loading){
    if(req.readyState == 4){
        if(req.status == 200){
                        toggle(loading); // ojo aca
            document.getElementById(id).innerHTML=req.responseText;
        }else{
            //alert("Error"+req.statusText)
            alert("Error: es posible que tu navegador no sea compatible con las funciones de esta pagina, proba ingresando de nuevo desde Internet Explorer.");
        }
    }
}

function cargaselect(){
var variable = document.getElementById('depto').value;
var url = 'select2.php?id='+variable;

        OpenPage(url,'ciudades','loading');
}
</script>
</head>

<body>
<div id="provincias">
  <label>
  <select name="select1" id="depto" onchange="cargaselect();">
  <?php do{ ?>
      <option value="<?php echo $row_Recordset1['Iddepartamento']; ?>"><?php echo $row_Recordset1['departamento']; ?></option>
    <?php } while ($row_Recordset1 mysql_fetch_assoc($Recordset1)); ?>
  </select>
  </label>
</div>
<br />
<br /><br />
<div id="ciudades">
     <?php require("cargando.php"); ?> 
</div>
</body>
</html>
<?php
mysql_free_result
($Recordset1);
?>
2) archivo select2.php:

Código PHP:
<?php require_once('Connections/area.php'); ?>
<?php
$id
=intval($_GET['id']);
mysql_select_db($database_area$area);
$query_Recordset2 "SELECT Idciudad, Iddepartamento, Ciudad FROM ciudad Where Iddepartamento = '$id'";
$Recordset2 mysql_query($query_Recordset2$area) or die(mysql_error());
$row_Recordset2 mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 mysql_num_rows($Recordset2);
?>
<select name="ciudad">
<?php do{ ?>
    <option value="<?php echo $row_Recordset2['Idciudad']; ?>"><?php echo htmlentities($row_Recordset2['Ciudad']); ?></option>
<?php } while ($row_Recordset2 mysql_fetch_assoc($Recordset2)); ?>
</select>
<?php require('cargando.php'); ?>
<?php
mysql_free_result
($Recordset2);
?>

3) archivo cargando.php:

Código PHP:

<br /><div id="loading" style="display:none; background-color:#FF0000; color:#FFFFFF; font-weight:bold;  width:120px;">Cargando...</div><br /> 

4) archivo area.php:


Código PHP:

<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_area "localhost";
$database_area "area";
$username_area "root";
$password_area "";
$area mysql_pconnect($hostname_area$username_area$password_area) or trigger_error(mysql_error(),E_USER_ERROR); 
?>
Ese ejemplo lo había visto esta mañana y estoy pendiente de probarlo. Lo que me preocupa es que como no entiendo ajax no se si sabré adaptarlo a mi caso.

Lo miraré detenidamente y luego comentaré todos los errores.

Interesa usar ajax para que no tenga que recargar toda la página entera si uso solo php.
  #9 (permalink)  
Antiguo 16/03/2009, 10:46
 
Fecha de Ingreso: marzo-2009
Mensajes: 11
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: select enlazados (one moret time)

Farra, esto que has puesto:
<?php if($_GET['cat'] == $row['categoria']){ ?> selected="selected" <?php } ?>

¿ sirve para dejar seleccionado el ejemplo que puse al recargar la página?
mi ejemplo al recargar no se queda seleccionada la opción que se elige.
  #10 (permalink)  
Antiguo 18/03/2009, 14:20
 
Fecha de Ingreso: enero-2008
Mensajes: 97
Antigüedad: 12 años
Puntos: 3
Respuesta: select enlazados (one moret time)

Al final lo he conseguido usando el ejemplo de farra, que es más simple que el que yo había visto (se parecen, pero este va mejor).

Muchas gracias!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:32.