Comunidad de diseño web y desarrollo en internet online

Problema con combobox 2 niveles

Citar            
MensajeEscrito el 17 Jun 2011 02:36 am
Hola a todos, tengo un problema con un combobox que he bajado. Si bien funciona correctamente el problema que tengo es que al momento de guardar los datos en la tabla me guarda el ID y no el valor, y yo necesito que guarde el valor para que de esta manera cuando un usuario accede a la info pueda ver el texto correspondiente y no un número.

Los archivos son los siguientes:


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>";
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>AJAX, Ejemplos: Combos (select) dependientes, codigo fuente - ejemplo</title>
<link rel="stylesheet" type="text/css" href="select_dependientes.css">
<script type="text/javascript" src="select_dependientes.js"></script>
</head>

<body>

<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>
</div>
</body>
</html>




select_dependientes_proceso.php:


<?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>";
}
?>

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),

Intenté cambiando el valor en .$registro[0] por $registro[1]. En ese caso me guarda el nombre del país pero no me permite luego elegir el estado.

Desde ya agradezco cualquier aporte!!!

Por Matias-78

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Jun 2011 12:10 pm
En el cñodigo que has pegado en ninguna parte se guarda nada.

Pero, lo que debes guardar de la selección del usuario es el id del registro si ese id es campo clave. Después, al momento de recuperar el valor, solo tienes que buscar el registro que tiene ese id.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 17 Jun 2011 05:21 pm
La selección del usuario se guarda en una tabla llamada re_listings, por una parte el país dentro del campo (country) y el estado en el campo (state), ambas selecciones se guardan como números, que son el ID de cada selección.

Ahora cuando el usuario va a la sección info.php aparecen todos los datos como texto, a excepción de país y estado que aparecen como valor numérico.

El archivo que debo modificar es el info.php para que al llamar al campo (country) y (state) busque el registro de ese ID en las tablas lista_paises y lista_estados, pero realmente mi cabeza parece no dar para tanto :S

Archivo info.php

<?
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>Estado:</b>$a1[state]<br><b>País:</b>$a1[country]<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>";

Por Matias-78

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Jun 2011 05:33 pm
Sería...

Código MySQL :

SELECT * FROM re_agents, re_listings, lista_paises, lista_estados WHERE
e_listings.ListingID = '$_GET[id]' AND
re_listings.AgentID = re_agents.AgentID AND 
re_listings.country = lista_paises.id AND
re_listings.state = lista_estado.id

Conviene no usar asterico en el SELECT sino listar los campos que te interesa usar de la consulta.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 17 Jun 2011 07:17 pm
Te molesto la última porque ya está casi listo. De las tablas paises y estados, necesito el campo opción que es el que contiene el valor de texto. Donde debo indicar el campo opcion?

Disculpa el tiempo que te robo, pero te agradezco muchisimo, hacia mucho tiempo que estaba luchando con esto. Después me pasas la factura de cuanto te debo :D

Por Matias-78

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Jun 2011 08:59 pm
Lo que pasa es que tú usas mysql_fetch_array(); para traer los resultados de la búsqueda, lo más cómodo es usar mysql_fetch_assoc(). La diferencia es que esta función te devuelve un array cuyo índice es el nombre del campo de la tabla o tablas.

Prueba lo siguiente:

Código PHP :

$r1 = mysql_query($q1) or die(mysql_error());
$a1 = mysql_fetch_assoc($r1);
echo "<pre>"; var_dump($a1); echo "</pre>";


Eso te mostrará cómo está conformado el array $a1, de allí te darás cuenta de lo que tienes que hacer y con qué hacerlo... espero.

Je!. Esto es como en cierto negocio ilegal: el primero es gratis ;).

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 17 Jun 2011 10:39 pm
Creo que si el primero es gratis te voy a echar a perder el negocio :oops: porque ahora quedé más perdido.

Con la linea echo "<pre>"; var_dump($a1); echo "</pre>"; se me llena la pantalla de códigos y entre ellos "" ["state"]=> string(3) "216" ["country"]=> string(2) "12" ["ShortDesc"]=>

La verdad creo que ahora estoy peor :S

Por Matias-78

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Jun 2011 12:42 am
En esa lista más abajo también aparece esto: ["id"]=>
string(3) "216"
["opcion"]=>
string(4) "California"
["relacion"]=>
string(2) "12"

}

Por Matias-78

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Jun 2011 01:55 am
Al final ya pude hacerlo funcionar!!!! Estoy re feliz, y todo por tu ayuda!!!!!!!! Me salvaste la vida, porque la verdad ya me tenia loco este tema. ^^

Te agradezco muchisimo la ayuda que me diste, y bueno no se en que podria ayudarte. Graciasssssssssssssssssssss :D:D:D:D

Por Matias-78

16 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.