Foros del Web » Programando para Internet » PHP »

Combobox Dinamicos php - 2 o mas Combos Anidados

Estas en el tema de Combobox Dinamicos php - 2 o mas Combos Anidados en el foro de PHP en Foros del Web. A raiz de que en la web hay poca informacion hacerca de combos dinamicos en php me eh tomado la molestia de programarlo, haber logrado ...
  #1 (permalink)  
Antiguo 13/04/2008, 06:19
 
Fecha de Ingreso: abril-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 1
Combobox Dinamicos php - 2 o mas Combos Anidados

A raiz de que en la web hay poca informacion hacerca de combos dinamicos en php me eh tomado la molestia de programarlo, haber logrado un codigo eficiente y muy facil de comprender, solo esepero que los sirva, no es una de mis virtudes el explicar mejor los dejo para que ustedes lo comprendan..

Doy gracias de ante mano a las personas que usen este codigo y pongan de referencia a mi persona por ser el creador del codigo...

Omar Yony Ramos Rojas para servirles....
__________________________________________________ _______________
BASE DE DATOS "combo" esta en Mysql
__________________________________________________ _______________
Código:
-- phpMyAdmin SQL Dump
-- version 2.10.1
-- http://www.phpmyadmin.net
-- 
-- Servidor: localhost
-- Tiempo de generación: 13-04-2008 a las 07:58:32
-- Versión del servidor: 5.0.45
-- Versión de PHP: 5.2.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Base de datos: `combo`
-- 

-- --------------------------------------------------------

-- 
-- Estructura de tabla para la tabla `dep`
-- 

CREATE TABLE `dep` (
  `iddep` int(10) unsigned NOT NULL auto_increment,
  `pais_idp` int(10) unsigned NOT NULL,
  `departamento` varchar(25) default NULL,
  PRIMARY KEY  (`iddep`),
  KEY `dep_FKIndex1` (`pais_idp`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

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

INSERT INTO `dep` (`iddep`, `pais_idp`, `departamento`) VALUES 
(1, 1, 'Puno'),
(2, 1, 'arequipa'),
(3, 2, 'cordoba'),
(4, 2, 'San Luis');

-- --------------------------------------------------------

-- 
-- Estructura de tabla para la tabla `distrito`
-- 

CREATE TABLE `distrito` (
  `dep_iddep` int(10) unsigned NOT NULL,
  `distrito` varchar(12) NOT NULL,
  KEY `distrito_FKIndex1` (`dep_iddep`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

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

INSERT INTO `distrito` (`dep_iddep`, `distrito`) VALUES 
(1, 'Juliaca'),
(1, 'Puno'),
(1, 'huancane'),
(1, 'azangaro'),
(3, 'santo tome'),
(3, 'santiago'),
(3, 'Chaco'),
(3, 'San Rafael');

-- --------------------------------------------------------

-- 
-- Estructura de tabla para la tabla `pais`
-- 

CREATE TABLE `pais` (
  `idp` int(10) unsigned NOT NULL auto_increment,
  `pais` varchar(25) default NULL,
  PRIMARY KEY  (`idp`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

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

INSERT INTO `pais` (`idp`, `pais`) VALUES 
(1, 'peru'),
(2, 'argentina');

-- 
-- Filtros para las tablas descargadas (dump)
-- 

-- 
-- Filtros para la tabla `dep`
-- 
ALTER TABLE `dep`
  ADD CONSTRAINT `dep_ibfk_1` FOREIGN KEY (`pais_idp`) REFERENCES `pais` (`idp`) ON DELETE NO ACTION ON UPDATE NO ACTION;

-- 
-- Filtros para la tabla `distrito`
-- 
ALTER TABLE `distrito`
  ADD CONSTRAINT `distrito_ibfk_1` FOREIGN KEY (`dep_iddep`) REFERENCES `dep` (`iddep`) ON DELETE NO ACTION ON UPDATE NO ACTION;
__________________________________________________ _______________
CODIGO DE CONEXION DE LA BASE DE DATOS ARCHIVO "Mysql.php"
_______________________________________ __________________________
Código PHP:
<?php  
class MySQL{  
public 
$cont=0;
 private 
$conexion;  
  private 
$total_consultas;  
 public function 
MySQL(){  
  if(!isset(
$this->conexion)){  
  
$this->conexion = (mysql_connect("localhost","root","")) or die(mysql_error());  
  
mysql_select_db("combo",$this->conexion) or die(mysql_error());  
  }  
  }  
 public function 
consulta($consulta){  
  
$this->total_consultas++;  
  
$resultado mysql_query($consulta,$this->conexion);  
  if(!
$resultado){  
  echo 
'MySQL Error: ' mysql_error();  
  exit;  
  }  
  return 
$resultado;   
  }  
 public function 
fetch_array($consulta){   
  return 
mysql_fetch_array($consulta);  
  }  
 public function 
num_rows($consulta){   
  return 
mysql_num_rows($consulta);  
  }  
 public function 
getTotalConsultas(){  
  return 
$this->total_consultas;  
  }  
 }
?>
__________________________________________________ ______________
CODIGO DEL COMBOBOX DINAMICO EN ESTE CASO SE USO 3 PERO COMO PORDRAN VER SE PUEDEN AUMENTAR CUANTAS QUIERAN DEPENDIENDO DE LOS REQUERIMIENTOS EL ARCHIVO "combobox.php"
__________________________________________________ ______________
Código PHP:
<?php include("mysql.php");

$db = new MySQL();
$consulta_pais $db->consulta("SELECT * FROM pais");  
echo 
'<html>';
echo 
'<form method="post" action="combobox.php">'

$pais=$_POST['pais'];
$departamentos=$_POST['departamentos'];
$distrito=$_POST['distrito'];
            
echo 
'<select name="pais"   onChange="submit()" style="position:absolute;left:14px;top:5px;width:186px;font-family:Times New Roman;font-size:16px;z-index:0">';
if (
$db->num_rows($consulta_pais)>0){
echo 
"<option value= '$pais'>".$pais.'</option>';
while (
$resultado=$db->fetch_array($consulta_pais)){ echo '<option value= "'.$resultado['pais'].'">'.$resultado['pais'].'</option>';
}
}
echo 
'</select>';
echo 
'<br>';
                                
$consulta_cod_pais $db->consulta("SELECT idp FROM pais WHERE pais='$pais'");
$resultado_cod_pais=$db->fetch_array($consulta_cod_pais);
$cod_pais=$resultado_cod_pais['idp'];
$consulta_departamento $db->consulta("SELECT * FROM dep where pais_idp='$cod_pais'");
    
    
echo 
'<select name="departamentos"   onChange="submit()" style="position:absolute;left:14px;top:35px;width:186px;font-family:Times New Roman;font-size:16px;z-index:1">';
if (
$db->num_rows($consulta_departamento)>0){
echo 
"<option value= '$departamentos'>".$departamentos.'</option>';
while (
$resultado=$db->fetch_array($consulta_departamento)){ echo '<option value= "'.$resultado['departamento'].'">'.$resultado['departamento'].'</option>';
}
}
echo 
'</select>';
echo 
'<br>';
            
$consulta_cod_departamento $db->consulta("SELECT iddep FROM dep WHERE departamento='$departamentos'");
$resultado_cod_departamento=$db->fetch_array($consulta_cod_departamento);
$cod_departamento=$resultado_cod_departamento['iddep'];
$consulta_distrito $db->consulta("SELECT * FROM distrito where dep_iddep='$cod_departamento'");
            
            
echo 
'<select name="distrito" onChange="submit()"style="position:absolute;left:14px;top:65px;width:186px;font-family:Times New Roman;font-size:16px;z-index:2">';
if (
$db->num_rows($consulta_distrito)>0){
echo 
"<option value= '$distrito'>".$distrito.'</option>';
while (
$resultado=$db->fetch_array($consulta_distrito)){ echo '<option value= "'.$resultado['distrito'].'">'.$resultado['distrito'].'</option>';
}
}
echo 
'</select>';
        
echo 
'</html>';
echo 
'</form>';
?>

Última edición por jam1138; 07/06/2008 a las 16:07 Razón: Intendo por mejorar la presentación
  #2 (permalink)  
Antiguo 13/04/2008, 07:24
 
Fecha de Ingreso: abril-2008
Ubicación: Madrid
Mensajes: 22
Antigüedad: 16 años
Puntos: 1
Re: Combobox Dinamicos php - 2 o mas Combos Anidados

¿No crees que para eso serí mucho mejor utiliza AJAX?

Saludos
  #3 (permalink)  
Antiguo 13/04/2008, 11:48
 
Fecha de Ingreso: abril-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 1
Re: Combobox Dinamicos php - 2 o mas Combos Anidados

tambien lo hice en ajax pero esto es un for de PHP, y el reto estaba hacerlo en php usando solamente codigo PHP...
  #4 (permalink)  
Antiguo 13/04/2008, 12:36
 
Fecha de Ingreso: abril-2005
Mensajes: 1
Antigüedad: 19 años
Puntos: 1
De acuerdo Re: Combobox Dinamicos php - 2 o mas Combos Anidados



eh mano bien hecho, y pues sip, la verdad yo lo prefiero en PHP porque eso de tener que estar leendo en mas de un lenguaje un codigo em da mucha hueva

jejejej

gracias man, seguro que a mas de uno (incluido yo) nos servira tu codigo


y al critico ps decirle eh en vez de criticar ayuda a mejroar su codigo no? ¬¬
  #5 (permalink)  
Antiguo 13/04/2008, 13:37
Avatar de jpunk  
Fecha de Ingreso: octubre-2005
Ubicación: Bogota
Mensajes: 335
Antigüedad: 18 años, 6 meses
Puntos: 0
De acuerdo Re: Combobox Dinamicos php - 2 o mas Combos Anidados

Hey omarwhang

Excelente aporte, seguro me servirá de guía ya que tengo que hacer un combo de 4.
Y también me iré por hacerlo solo en php ya que en Ajax hasta ahora comienzo a estudiarlo.

Pero porque no colocas también tu versión en Ajax para hacer una comparativa de cual seria la forma más fácil de realizarlo.

Syscover podrías también exponer la forma de cómo lo harías en Ajax bueno si estas dispuesto obviamente….

Bueno gracias nuevamente omarwhang esto me servirá de punto de partida para mejorar ya que todavía me siento muy novato en esto.

Byeeee.
  #6 (permalink)  
Antiguo 31/05/2008, 16:07
 
Fecha de Ingreso: mayo-2008
Mensajes: 1
Antigüedad: 15 años, 10 meses
Puntos: 0
Pregunta Respuesta: Combobox Dinamicos php - 2 o mas Combos Anidados

Hola. El ejemplo es muy bueno. Y muchos han respondido que con ajax es mejor cosa que no dudo, pero quien tenga un ejemplo asi les agradeceria que lo publique.
He estado buscando en donde se enlacen mas de dos combos enlazados pero con la particularidad siguiente:

Tabla rubro
rubr_codigo PK
rubr_detalle

Tabla subrubro
subr_codigo PK
subr_rubr_codigo PFK (PK de la tabla rubro)

Tabla Marca
marc_codigo PK
marc_subr_codigo PFK (PK de la tabla subrubro)
marc_subr_rubr_codigo PFK (PK de la tabla subrubro)

Se entiende??

La idea es generar combos enlazados
pero que en la pagina donde esten alojados los combos no haya codigo php.
Es decir hacerlo con Ajax y/o Javascript no Obstructivo.
Busco este tipo de ejemplo porque estoy utilizando clases y plantillas y seria una buena manera el MVC que quiero implementar.

Les cuento que no encontre nada parecido por eso apelo a su ayuda.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 22:16.