PHP - Problema con combobox de 2 niveles

   
Vista:

Problema con combobox de 2 niveles

Publicado por Pablo (11 intervenciones) el 11/06/2011 22:21:07
Hola a todos, hace unos días encontré un código codigo de ajax, es un combobox dependientes de 2 niveles. El problema que tengo es que si bien funciona correctamente, al momento de guardar los datos en una tabla de la BD me registra los ID y yo necesito que registre los nombres, para que esa info la puedan ver los visitantes de la página y si salen números no entienden nada.

Gracias por su tiempo!

Los códigos son los siguientes:
select_dependientes_proceso.pbp
?php
// Array que vincula los IDs de los selects declarados en el HTML con el nombre de la tabla donde se encuentra su contenido
$listadoSelects=array(
"paises"=>"lista_paises",
"estados"=>"lista_estados"
);

function validaSelect($selectDestino)
{
// Se valida que el select enviado via GET exista
global $listadoSelects;
if(isset($listadoSelects[$selectDestino])) return true;
else return false;
}

function validaOpcion($opcionSeleccionada)
{
// Se valida que la opcion seleccionada por el usuario en el select tenga un valor numerico
if(is_numeric($opcionSeleccionada)) return true;
else return false;
}

$selectDestino=$_GET["select"]; $opcionSeleccionada=$_GET["opcion"];

if(validaSelect($selectDestino) && validaOpcion($opcionSeleccionada))
{
$tabla=$listadoSelects[$selectDestino];
include 'conexion.php';
conectar();
$consulta=mysql_query("SELECT id, opcion FROM $tabla WHERE relacion='$opcionSeleccionada'") or die(mysql_error());
desconectar();

// Comienzo a imprimir el select
echo "<select name='".$selectDestino."' id='".$selectDestino."' onChange='cargaContenido(this.id)'>";
echo "<option value='0'>Elige</option>";
while($registro=mysql_fetch_row($consulta))
{
// Convierto los caracteres conflictivos a sus entidades HTML correspondientes para su correcta visualizacion
$registro[1]=htmlentities($registro[1]);
// Imprimo las opciones del select
echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
}
echo "</select>";
}
?>

select_dependientes.php
<?php
function generaPaises()
{
include 'conexion.php';
conectar();
$consulta=mysql_query("SELECT id, opcion FROM lista_paises");
desconectar();

// Voy imprimiendo el primer select compuesto por los paises
echo "<select name='paises' id='paises' onChange='cargaContenido(this.id)'>";
echo "<option value='0'>Elige</option>";
while($registro=mysql_fetch_row($consulta))
{
echo "<option value='".$registro["0"]."'>".$registro[1]."</option>";
}
echo "</select>";
}
?>

<html lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Registrar</title>
<link rel="stylesheet" type="text/css" href="select_dependientes.css">
<script type="text/javascript" src="select_dependientes.js"></script>
</head>

<body>

<form action="registrar_proveedor.php" method="post">

Nombre:<input type="text" name="nombre">

<div id="demo" style="width:600px;">
<div id="demoDer">
<select disabled="disabled" name="estados" id="estados">
<option value="0">Selecciona opci&oacute;n...</option>
</select>
</div>
<div id="demoIzq"><?php generaPaises(); ?></div>
<input type="submit" value="enviar">

</body>
</html>

BD:
CREATE TABLE `lista_paises` (
`id` int(3) unsigned NOT NULL default '0',
`opcion` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=22;
INSERT INTO `lista_paises` (`id`, `opcion`) VALUES (0, 'Elige'),
(1, 'Argentina'),
(2, 'Bolivia'),
(3, 'Brasil'),
(4, 'Canada'),
(5, 'Chile'),
(6, 'Colombia'),
(7, 'Costa Rica'),
(8, 'Cuba'),
(9, 'Ecuador');

CREATE TABLE `lista_estados` (
`id` int(5) unsigned NOT NULL auto_increment,
`opcion` varchar(100) NOT NULL,
`relacion` int(3) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `codigo_pais` (`relacion`)
) ENGINE=MyISAM AUTO_INCREMENT=490;


INSERT INTO `lista_estados` (`id`, `opcion`, `relacion`) VALUES (1, 'Buenos Aires', 1),
(2, 'Capital Federal', 1),
(3, 'Catamarca', 1),
(4, 'Chaco', 1),
(5, 'Chubut', 1),
(6, 'Cordoba', 1),
(7, 'Corrientes', 1),
(8, 'Entre Rios', 1),
(9, 'Formosa', 1),
(10, 'Jujuy', 1),
(11, 'La Pampa', 1),
(12, 'La Rioja', 1),
(13, 'Mendoza', 1),
(14, 'Misiones', 1),
(15, 'Neuquen', 1),
(16, 'Rio Negro', 1),
(17, 'Salta', 1),
(18, 'San Juan', 1),
(19, 'San Luis', 1),
(20, 'Santa Cruz', 1),
(21, 'Santa Fe', 1),
(22, 'Santiago del Estero', 1),
(23, 'Tierra del Fuego', 1),
(24, 'Tucuman', 1),
(25, 'Chuquisaca', 2),
(26, 'Cochabamba', 2),
(27, 'Beni', 2),
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con combobox de 2 niveles

Publicado por Andres (149 intervenciones) el 13/06/2011 23:06:49
Si entendi bien, lo q' quiere es guardar el nombre de los estados y paises. siendo asi, loq ' hay q' cambiar es el datod del value en los combos.
Es decir:

1
echo "<option value='".$registro["1"]."'>".$registro[1]."</option>";


Espero sea de ayuda,
Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con combobox de 2 niveles

Publicado por Pablo (11 intervenciones) el 14/06/2011 06:18:41
Hola Andres, primero que nada gracias por tu ayuda. Intenté de esa manera, si bien me guarda el nombre del país correctamente, de esa manera no me permite seleccionar el estado, queda el select de estados en blanco.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con combobox de 2 niveles

Publicado por Andres (149 intervenciones) el 14/06/2011 15:40:26
Bueno, entonces seria q' se siga guardando el id de la ciudad y el pais, y cuando se necesite ver la informacion correspondiente hacer la consulta a las tablas para traer los nombres correspondientes, buscando por el Id.
1
2
3
$Sql="SELECT * FROM lista_estados WHERE id='".$AquiLaVarAComparar."'";
...
//aca lo q' sigue para mostrar el nombre del estado.


Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con combobox de 2 niveles

Publicado por Pablo (11 intervenciones) el 16/06/2011 23:17:21
Muchas gracias Andrés, la verdad intenté pero mi cabeza no da para tanto, me sale humo y no lo logro hacer.
El archivo que muestra la información se llama info.php y muestra datos especificos de una propiedad seleccionada.

Los datos que necesito reflejar son los de estados y paises en texto, pero en la tabla donde se guardan esos datos (re_listings) me figuran como un número, y al intentar hacer lo que me comentaste no se como vincularlo.

Te muestro el archivo (el campo que marco en negrita es el que muestra los paises y estados):

<?
require_once("conn.php");
require_once("includes.php");

if(empty($_GET[id]))
{
header("location:index.php");
exit();
}

$q1 = "select * from re_agents, re_listings where re_listings.ListingID = '$_GET[id]' and re_listings.AgentID = re_agents.AgentID ";
$r1 = mysql_query($q1) or die(mysql_error());
$a1 = mysql_fetch_array($r1);

//////////////////////////////////////////////////////
////////////////// Home View Counter Start
//////////////////////////////////////////////////////

if($a1[AgentID] != $_SESSION[AgentID])
{
if(!empty($_COOKIE[RealEstates]))
{
$CookieArray = explode("|", $_COOKIE[RealEstates]);
array_unique($CookieArray);

$rev = count($CookieArray);

if(!in_array($_GET[id], $CookieArray))
{
$NewValue = $_COOKIE[RealEstates]."|".$_GET[id];
setcookie ("RealEstates", $NewValue);

$ch = '1';
}
}
else
{
setcookie ("RealEstates", $_GET[id]);
}




if($rev == '0' || empty($rev))
{
$HomeCount = 1;
}
else
{
if(isset($ch))
{
$HomeCount = $rev + 1;
}
else
{
$HomeCount = $rev;
}
}

$HomeViews = $HomeCount." homes viewed this visit.";
}

//////////////////////////////////////////////////////
////////////////// Home View Counter End
//////////////////////////////////////////////////////


if(empty($i) || $i == '1')
{
$Image1 = "bg_info2.gif";

$desc = nl2br($a1[DetailedDesc]);

$MyPrice = number_format($a1[Price], 1, ".", ",");
$ShowInfo = "<table border=0 align=center width=\"100%\">\n\t<tr>\n\t<td width=\"60%\" valign=top align=left style=\"color: #000\"><font size=2 face=verdana color=black><b>País:</b>$a1[pais]<br><b>Estado:</b>$a1[estado]<br><b>Dirección:</b> $a1[address]</font><br><font size=2 face=verdana color=black></font></td>\n\t<td width=\"40%\" valign=top align=center><font size=2 face=verdana color=white><B>Precio: $aset[Currencya]$MyPrice</td>\n</tr>\n\n<tr>\n\t<td valign=top style=\"color: #000\" align=left><font size=2 face=verdana color=black><b>Nº Identificador de propiedad:</b> $a1[ListingID]<br><br><b>Detalles de la propiedad:</b><br>$a1[rooms] Ambiente(s) <br>$a1[bathrooms] Baño(s) <br>Garage para: $a1[garage] auto(s) <br><br><b>Barrio:</b> $a1[Neighbourhood]<br><br><b>Metros cubiertos:</b> $a1[SquareMeters] M2<br><b>Metros del Terreno:</b> $a1[LotSize] M2 <br><br><b>Años de la construcción:</b> $a1[HomeAge]<br><br><b>Descripción detallada</b></font><br>$desc<br><br><font size=2 face=verdana style=\"color: #000\"><b>Más detalles:</b></font><br>";
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con combobox de 2 niveles

Publicado por Andres (149 intervenciones) el 17/06/2011 19:35:23
La consulta del pais y estado se debe agregar antes de mostrar el dato, es decir, hace la consulta de cada uno de los datos y lo muestra en donde se requiere. siguiendo el codigo, seria asi:

1
2
3
4
5
6
7
8
9
10
......
 
$Sql=mysql_query("SELECT * FROM lista_paises WHERE id='".$a1[pais]."'");
$Pais=mysql_fetch_array($Sql);
 
$Sql="SELECT * FROM lista_estados WHERE id='".$a1[estado]."'";
$Estado=mysql_fetch_array($Sql);
 
$MyPrice = number_format($a1[Price], 1, ".", ",");
$ShowInfo = "<table border=0 align=center width=\"100%\">\n\t<tr>\n\t<td width=\"60%\" valign=top align=left style=\"color: #000\"><font size=2 face=verdana color=black><b>País:</b>$Pais[opcion]<br><b>Estado:</b>$Estado[opcion]<br><b>Dirección:</b> $a1[address]</font><br><font size=2 face=verdana color=black></font></td>\n\t<td width=\"40%\" valign=top align=center><font size=2 face=verdana color=white><B>Precio: $aset[Currencya]$MyPrice</td>\n</tr>\n\n<tr>\n\t<td valign=top style=\"color: #000\" align=left><font size=2 face=verdana color=black><b>Nº Identificador de propiedad:</b> $a1[ListingID]<br><br><b>Detalles de la propiedad:</b><br>$a1[rooms] Ambiente(s) <br>$a1[bathrooms] Baño(s) <br>Garage para: $a1[garage] auto(s) <br><br><b>Barrio:</b> $a1[Neighbourhood]<br><br><b>Metros cubiertos:</b> $a1[SquareMeters] M2<br><b>Metros del Terreno:</b> $a1[LotSize] M2 <br><br><b>Años de la construcción:</b> $a1[HomeAge]<br><br><b>Descripción detallada</b></font><br>$desc<br><br><font size=2 face=verdana style=\"color: #000\"><b>Más detalles:</b></font><br>";


Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con combobox de 2 niveles

Publicado por Andres (149 intervenciones) el 17/06/2011 19:38:37
En la consulta de estado me olvide agregar la ejecucion del query:

1
2
$Sql=mysql_query("SELECT * FROM lista_estados WHERE id='".$a1[estado]."'");
$Estado=mysql_fetch_array($Sql);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con combobox de 2 niveles

Publicado por Pablo (11 intervenciones) el 22/06/2011 21:35:21
Hola Andrés, dejame darte las gracias, la verdad me fuiste de mucha ayuda y ya tengo todo casi listo. Agradezco muchisimo tu tiempo!!! Te mando un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar