Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Recordar opción seleccionada con php

Estas en el tema de Recordar opción seleccionada con php en el foro de Frameworks JS en Foros del Web. Hola a todos. Tengo una duda que me ha llevado todo el día: Quiero saber como puedo recordar o mantener el valor de una opción ...
  #1 (permalink)  
Antiguo 07/09/2009, 16:44
 
Fecha de Ingreso: octubre-2008
Mensajes: 109
Antigüedad: 15 años, 5 meses
Puntos: 0
Recordar opción seleccionada con php

Hola a todos.
Tengo una duda que me ha llevado todo el día:
Quiero saber como puedo recordar o mantener el valor de una opción que mando a través de un formulario generado con ajax.
La razón de esto es por quiero que el usuario vea a que corresponde los resultados que esta viendo.

Una vez leí que se podía hacer con cookies y cosas a sí pero creo que para lo que yo lo quiero es mucho más fácil.
Aquí el código que es a lo que muchas veces le entendemos más que al autor

Este código pertenece a un catalogo de entidades y que al hacer click carga el catalogo de municipios mediante ajax.(esto me recuerda otra duda con respecto a mi bd que al final preguntare)
Código HTML:
<!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=utf-8" />
<title>Ajax</title>
<script language="javascript" type="text/javascript" src="ajax.js"></script>
<link href="ajax.css" rel="stylesheet" type="text/css" />
</head>
<body>
<p class="style1">AJAX dynamic dropdowns </p>
<?php
if(!isset($_GET['entidad']) )
{
	$entidad='todo';
	}
else{
$entidad=$_GET['entidad'];
}
if(!isset($_GET['municipio']) )
{
	$municipio='0';
	}
else{
$municipio=$_GET['municipio'];
}
echo "$municipio"
 ?>
<form name='myForm' accept-charset="UTF-8" action="#" method="get">
  
  <table width="750" border="0">
    <tr>
      <td width="5%">
	  
	  Entidad</td><td width="20%">
        <select name="entidad" size="1" class="textofilas" onchange="ajaxFunction()" id="entidad">
        <option value="todo"<? if ($entidad=="todo") echo "selected=\"selected\""; ?>> Toda la rep&uacute;blica</option>
            <option value="01" <? if ($entidad=="01") echo "selected=\"selected\""; ?> >Aguascalientes</option>
            <option value="02" <? if ($entidad=="02") echo "selected=\"selected\""; ?> >Baja California</option>
            <option value="03" <? if ($entidad=="03") echo "selected=\"selected\""; ?> >Baja California Sur</option>
            <option value="04" <? if ($entidad=="04") echo "selected=\"selected\""; ?> >Campeche</option>
            <option value="05" <? if ($entidad=="05") echo "selected=\"selected\""; ?> >Coahuila</option>
            <option value="06" <? if ($entidad=="06") echo "selected=\"selected\""; ?> >Colima</option>
            <option value="07" <? if ($entidad=="07") echo "selected=\"selected\""; ?> >Chiapas</option>
            <option value="08" <? if ($entidad=="08") echo "selected=\"selected\""; ?> >Chihuahua</option>
            <option value="09" <? if ($entidad=="09") echo "selected=\"selected\""; ?> >Distrito Federal</option>
            <option value="10" <? if ($entidad=="10") echo "selected=\"selected\""; ?> >Durango</option>
            <option value="11" <? if ($entidad=="11") echo "selected=\"selected\""; ?> >Guanajuato</option>
            <option value="12" <? if ($entidad=="12") echo "selected=\"selected\""; ?> >Guerrero</option>
            <option value="13" <? if ($entidad=="13") echo "selected=\"selected\""; ?> >Hidalgo</option>
            <option value="14" <? if ($entidad=="14") echo "selected=\"selected\""; ?> >Jalisco</option>
            <option value="15" <? if ($entidad=="15") echo "selected=\"selected\""; ?> >M&eacute;xico</option>
            <option value="16" <? if ($entidad=="16") echo "selected=\"selected\""; ?> >Michoac&aacute;n</option>
            <option value="17" <? if ($entidad=="17") echo "selected=\"selected\""; ?> >Morelos</option>
            <option value="18" <? if ($entidad=="18") echo "selected=\"selected\""; ?> >Nayarit</option>
            <option value="19" <? if ($entidad=="19") echo "selected=\"selected\""; ?> >Nuevo Le&oacute;n</option>
            <option value="20" <? if ($entidad=="20") echo "selected=\"selected\""; ?> >Oaxaca</option>
            <option value="21" <? if ($entidad=="21") echo "selected=\"selected\""; ?> >Puebla</option>
            <option value="22" <? if ($entidad=="22") echo "selected=\"selected\""; ?> >Quer&eacute;taro</option>
            <option value="23" <? if ($entidad=="23") echo "selected=\"selected\""; ?> >Quintana Roo</option>
            <option value="24" <? if ($entidad=="24") echo "selected=\"selected\""; ?> >San Luis Potos&iacute;</option>
            <option value="25" <? if ($entidad=="25") echo "selected=\"selected\""; ?> >Sinaloa</option>
            <option value="26" <? if ($entidad=="26") echo "selected=\"selected\""; ?> >Sonora</option>
            <option value="27" <? if ($entidad=="27") echo "selected=\"selected\""; ?> >Tabasco</option>
            <option value="28" <? if ($entidad=="28") echo "selected=\"selected\""; ?> >Tamaulipas</option>
            <option value="29" <? if ($entidad=="29") echo "selected=\"selected\""; ?> >Tlaxcala</option>
            <option value="30" <? if ($entidad=="30") echo "selected=\"selected\""; ?>>Veracruz</option>
            <option value="31" <? if ($entidad=="31") echo "selected=\"selected\""; ?> >Yucat&aacute;n</option>
            <option value="32" <? if ($entidad=="32") echo "selected=\"selected\""; ?>>Zacatecas</option>
      </select>
	  
	  </td>
      <td width="76"><div id='ajaxDiv' style="width:200px"></div></td>
    </tr>
    <tr>
    <td colspan="3"><input type="submit" /></td>
    </tr>
  </table>

</form>
<script type="text/javascript">
muestraMun();
</script>
</body>
</html> 
Esta es mi archivo ajax.js
Código javascript:
Ver original
  1. // JavaScript Document
  2. function ajaxFunction(){
  3.     alert("fuckkkkkkkkkkk");
  4.     var ajaxRequest;  // magic variable
  5.     var ajaxDisplay = document.getElementById('ajaxDiv');
  6.    
  7.     try{
  8.         // Opera 8.0+, Firefox, Safari
  9.         ajaxRequest = new XMLHttpRequest();
  10.     } catch (e){
  11.         // Internet Explorer Browsers
  12.         try{
  13.             ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
  14.         } catch (e) {
  15.            
  16.             try{
  17.                 ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
  18.             } catch (e){
  19.                 // Something went wrong
  20.                 alert("Debe actualizar su navegador para hacer uso de la aplicaci&oacute;.");
  21.                 return false;
  22.             }
  23.         }
  24.     }
  25.    
  26.    
  27.     var entidad = 0;
  28.     var municipio = 0;
  29.    
  30.    
  31.     entidad = document.getElementById('entidad').value;
  32.             //municipio = document.getElementById('municipio').value;
  33.    
  34.     // Receive Data Function
  35.     ajaxRequest.onreadystatechange = function(){
  36.        
  37.         if(ajaxRequest.readyState == 4){
  38.            
  39.             ajaxDisplay.innerHTML = ajaxRequest.responseText;
  40.            
  41.         }
  42.         else
  43.             if (ajaxRequest.readyState == 1 && entidad != 'todo'  )
  44.             {
  45.                 ajaxDisplay.innerHTML = '<div align="left">Cargando lista de municipios..</div> ';
  46.                
  47.                 }
  48.        
  49.     }
  50.    
  51.     var queryString = "?entidad=" + entidad+"&municipio="+municipio;
  52.     ajaxRequest.open("GET", "genMun.php" + queryString, true);
  53.     alert(municipio);
  54.     ajaxRequest.send(null);
  55. }
  56.  
  57. function muestraMun(){
  58.     //if(document.getElementById('municipio').value == 'null')alert("!!");
  59.         //var munSel = document.getElementById('municipio').value;
  60.        
  61.         }

Y este mi archivo genmun.php
Código PHP:
<?php
header
('Content-Type: text/html; charset=UTF-8');
require_once(
"..\conexion.php"); // database connection

    // Retrieve data from Query String
$make $_GET['entidad'];
$make2 $_GET['municipio'];


if(
$make !='todo')
{
//build query

$query "SELECT municipio,nom_mun FROM xxxxxx WHERE entidad = '$make'  group by nom_mun ";
$result     = @mysql_query($query); 
$rowEstados     mysql_fetch_array($result);
//echo $query;
/////////////////////////////////////////////////
//if($make == 'todo')
//echo "<td style=\"display:none\"></td>";

//else
//{
    //Build Result String

$dropdown "<select name=\"municipio\" id=\"municipio\">";
$dropdown .= "<option value=\"0\">Seleccione Municipio</option>";


    
// Insert a new row in the table for each person returned
do {
    
$dropdown .= "<option value=".$rowEstados['municipio']."";
if(
$make2==$rowEstados['municipio'])
    
$dropdown.="selected=\"selected\"";
$dropdown.=">".utf8_encode(ucwords(strtolower(($rowEstados['nom_mun']))))."</option>";
    
}while (
$rowEstados mysql_fetch_array($result));

$dropdown .= "</select>";


echo 
$dropdown;
//}
mysql_free_result($result);
require_once(
"..\cerrarbd.php");
}
else return 
true;
?>
Entonces quiero que al enviar el formulario como trabaja sobre la misma pagina en el action, este a su vez muestre el select con la opción que se ha seleccionado previamente pero no consigo nada.

Mi idea era llamar a una función en js que verifique si existe valor para municipio y si existe llamar dese antes a la otra función que crea el catalogo de municipios pero no se cual es la diferencia o como puedo llamar a esta función.
He leído sobre onload pero no se si me funcione a mí por que deprando con firebug veo que al cargar mi página también carga las funciones más no las ejecuta hasta que doy click en el elemento de entidad.

Y una duda relacionada a como generar este catálogo de municipios es sobre que sería mejor: hacer la consulta a la bd o generar un archivo de xml con todos los elementos.
Esto es por que si queremos que no se caiga la bd por simples peticiones para construir un select, digamos que 1000 usuarios :D :D visitan el sitio al mismo tiempo y hacen click pues el servidor sufrirá, entonces no se que sería más conveniente.

Espero me puedan ayudar y no sea tanto rollo lo que he escrito..
  #2 (permalink)  
Antiguo 08/09/2009, 10:43
 
Fecha de Ingreso: octubre-2008
Mensajes: 109
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Recordar opción seleccionada con php

Lo estoy tratando de hacer funcionar con body onload:ajaxFunction() pero no funciona...
por favor algun tip?
  #3 (permalink)  
Antiguo 09/09/2009, 09:51
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Recordar opción seleccionada con php

A ver si podes sintetizar.

Tenes un select (en un formulario) que una vez que se utiliza no lleva a otra pagina, sino que envia una peticion ajax?

Si estas enviando algo por ajax, entonces ya tenes una variable que almacena tu dato. No necesitarias cookie. Es decir, no estas abandonando tu pagina.

SI necesitas cambiar de pagina mas de una vez, almacenas el dato en variables PHP SESSION (lo de las cookies yo no lo se usar).
  #4 (permalink)  
Antiguo 09/09/2009, 14:15
 
Fecha de Ingreso: octubre-2008
Mensajes: 109
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Recordar opción seleccionada con php

A ver si logro resumir:
Tengo un formulario con una lista de opciones y al seleccionar una desplega automáticamente otra lista mediante ajax.
Una vez seleccionada una opción mando mis variables a la misma página y cuando vuelve a cargar deben estar seleccionadas las opciones que escogí para que el usuario las vea.

Lo he solucionado de esta manera:

Leo las variables desde mi url y las alamceno en una variable temporal y funciona como quería aunque el rendimiento no se sí sea el óptimo dado que tarda algo de tiempo en hacer el query.

Alguna idea de como puedo optimizar esto???

Código:
// JavaScript Document
function ajaxFunction(){
	var entidad2 = 0;
	var municipio = 0;
	
	var values = getValues();
	if(values != null){
		entidad2 = document.getElementById('entidad').value;
		municipio = unescape(values["municipio"]);
		if(entidad2 != unescape(values["entidad"]) ){
		municipio=0;
		}
		
		
	//alert(document.myForm.entidad.options[document.myForm.entidad.selectedIndex].value);
	var ajaxRequest;  // magic variable
	var ajaxDisplay = document.getElementById('ajaxDiv');
	
	try{
		// Opera 8.0+, Firefox, Safari
		ajaxRequest = new XMLHttpRequest();
		}catch (e){
		// Internet Explorer Browsers
			try{
				ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
				}catch (e) {
					try{
						ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
						}catch (e){
				// Something went wrong
					alert("Debe actualizar su navegador para hacer uso de la aplicaci&oacute;.");
					return false;
					}
				}
			}	
	/*if(entidad != 0)
	{
		
// Define las variables
entidad = unescape(values["entidad"]);
municipio = unescape(values["municipio"]);
		}
	//		municipio = document.getElementById('municipio').value;
	*/
	// Receive Data Function 
	ajaxRequest.onreadystatechange = function(){
		if(ajaxRequest.readyState == 4){
			ajaxDisplay.innerHTML = ajaxRequest.responseText;
			}
		else 
			if (ajaxRequest.readyState != 4 && entidad2 != "todo")
			{
				ajaxDisplay.innerHTML = '<div align="left">Cargando lista de municipios..</div> ';
				}
		}
	//paso de parametros en la url	
	var queryString = "?entidad=" + entidad2+"&municipio="+municipio;
	ajaxRequest.open("GET", "genMun.php" + queryString, true);
	ajaxRequest.send(null); 
	}
}
//termina funcion ajax	

// Esta funcion extrae los valores de la url para entidad y municipio
function getValues(){
var urlEnd = document.URL.indexOf('?');
var values = new Array();
var names;

if (urlEnd != -1){
var params = document.URL.substring(urlEnd+1, document.URL.length).split('&');

for(i=0; i<params.length; i++) {
names = params[i].split('=');
values[names[0]] = names[1];
}
}
return values;
}
Código PHP:
<?php
header
('Content-Type: text/html; charset=UTF-8');
require_once(
"..\conexion.php"); // database connection

    // Retrieve data from Query String
$make $_GET['entidad'];
$make2 $_GET['municipio'];
//echo "make2=".$make2;

if($make !='todo')
{
//build query

$query "SELECT municipio,nom_mun FROM xxxxx WHERE entidad = '$make'  group by nom_mun ";
$result     = @mysql_query($query); 
$rowEstados     mysql_fetch_array($result);
//echo $query;
/////////////////////////////////////////////////
//if($make == 'todo')
//echo "<td style=\"display:none\"></td>";

//else
//{
    //Build Result String

$dropdown "<select name=\"municipio\" id=\"municipio\">";
$dropdown .= "<option value=\"0\">Seleccione Municipio</option>";


    
// Insert a new row in the table for each person returned
do {
    
$dropdown .= "<option value=".$rowEstados['municipio'];
if(
$make2==$rowEstados['municipio'])
    
$dropdown.=" selected=\"selected\"";
$dropdown.=">".utf8_encode(ucwords(strtolower(($rowEstados['nom_mun']))))."</option>";
    
}while (
$rowEstados mysql_fetch_array($result));

$dropdown .= "</select>";


echo 
$dropdown;
//}
mysql_free_result($result);
require_once(
"..\cerrarbd.php");
}
else return 
true;
?>
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




La zona horaria es GMT -6. Ahora son las 18:59.