Foros del Web » Programando para Internet » PHP »

Recordar valor tras recargar formulario

Estas en el tema de Recordar valor tras recargar formulario en el foro de PHP en Foros del Web. Buenas, Estoy usando sesiones en el script que procesa mi formulario, con la finalidad de recordar que valores ha escrito el usuario. Luego en el ...
  #1 (permalink)  
Antiguo 22/09/2010, 16:04
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Recordar valor tras recargar formulario

Buenas,

Estoy usando sesiones en el script que procesa mi formulario, con la finalidad de recordar que valores ha escrito el usuario. Luego en el formulario las recupero de la siguiente forma

Código PHP:
Ver original
  1. <label for="email2">Vuelve a escribir tu correo electrónico: </label>
  2.         <input class="text" type="text" tabindex="4" maxlength="45" size="32" value="<?php echo $_SESSION['email2'] ?>" id="email2" name="email2" />

No tenia problemas hasta que me he encontrado con campos del tipo SELECT y CHECKBOX que no encuentro la forma de recordar que opción habían marcado, tengo el resultado en variables de sesión pero no se donde imprimir los resultados para que aparezcan seleccionados con la opción que marcó el usuario.

Código HTML:
Ver original
  1. <select class="texto" tabindex="11" name="sexo">
  2.             <option value="">&nbsp;</option>
  3.             <option value="1">Hombre</option>
  4.             <option value="2">Mujer</option>
  5.         </select>
  6.  
  7. <input type="checkbox" tabindex="14" name="condiciones"/>

¿Se os ocurre alguna forma?

A mi se me ocurre hacerlo como si fuese un if... si en la variable de sesion tengo el valor 2, haría un if $_SESSION['sexo']==1, haría aparecer un selected en el campo del Hombre, si es dos, en el de la Mujer... pero no sé si existe otra forma más cómoda...

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 22/09/2010, 16:56
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Recordar valor tras recargar formulario

Trata de hacer una búsqueda en el foro, hay mucho material que te dirá como hacerlo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 22/09/2010, 16:59
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Recordar valor tras recargar formulario

Exactamente es como habias pensado, pero hay otra forma un poco mas facil:

- Usa un array para el contenido del select con valores del cero (- selecciona -) al 2 ("Tres por semana"... ahh, no, era "Mujer", nada mas )
- Abres el select
- Con un foreach($array as $clave => $valor) recorres el array y comparas con $_SESSION['sexo'] para agregar el selected="selected" en el que corresponda
- Cierras el select
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 22/09/2010, 23:48
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Recordar valor tras recargar formulario

Cita:
Iniciado por abimaelrc Ver Mensaje
Trata de hacer una búsqueda en el foro, hay mucho material que te dirá como hacerlo.
Lo intenté abimaelrc, antes de publicar hice varias búsquedas en el foro y en la red, pero no encontré ningún método diferente al que propuse, y este me parece inviable si tienes que recordar x por ejemplo un pais (desplegable de mas de 200 valores), tienes que hacer mas de 200 condicionales?


Cita:
Iniciado por Triby Ver Mensaje
Exactamente es como habias pensado, pero hay otra forma un poco mas facil:

- Usa un array para el contenido del select con valores del cero (- selecciona -) al 2 ("Tres por semana"... ahh, no, era "Mujer", nada mas )
- Abres el select
- Con un foreach($array as $clave => $valor) recorres el array y comparas con $_SESSION['sexo'] para agregar el selected="selected" en el que corresponda
- Cierras el select
No acabo de entenderte esta forma, te agradecería que me pusieras un pequeño ejemplo.

Otra pregunta si el desplegable tiene 200 campos, tienes que hacer 200 condicionales?

Muchas gracias
  #5 (permalink)  
Antiguo 23/09/2010, 00:49
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 18 años, 10 meses
Puntos: 79
Respuesta: Recordar valor tras recargar formulario

para el select tienes que tener el value

cuando compares el value mientras recorres los option y encuentres el que es igual al seleccionado anteriormente colocas esto

funcion_que_recorre_select(){
if($valor==$xxxx) $valor_cuando_sea_igual="selected='selected'";
echo "<option value='$valor' $valor_cuando_sea_igual>$texto</option>";
unset($valor_cuando_sea_igual);
}

bueno esa es la idea, ponla en practica

para el checkbox, tienes que recoger el valor, que puede ser true o false como texto, me parece. si es true en la etiqueta del checkbox coloca checked='checked' o algo asi

salu2
  #6 (permalink)  
Antiguo 23/09/2010, 05:10
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Recordar valor tras recargar formulario

La lógica es algo así
Código PHP:
Ver original
  1. <?php
  2. $arr = array("foo", "bar", "baz", "candy");
  3. $mySelect = "baz";
  4. $options = '';
  5. foreach($arr as $v){
  6.     $s =  $mySelect == $v ? 'selected="selected"' : '';
  7.     $options .= "<option value='$v' $s>$v</option>";
  8. }
  9. ?>
  10.  
  11. <select>
  12. <?php echo $options; ?>
  13. </select>
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 23/09/2010, 14:37
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Recordar valor tras recargar formulario

Estoy siguiendo tu consejo abimaelrc

Me faltan dos los países y los años. De países hay mas de 200 y años unos 100 del 1910 al 2010, no queda otra que llenar el array a mano, tal y como he hecho con el Sexo, día y mes?

Me parece exagerado, pero si todo el mundo consigue recordar los campos select de esta forma, no quedará más remedio

Código PHP:
Ver original
  1. <?php
  2. // Desplegable Sexo
  3. $arrSexo = array("","Hombre", "Mujer");
  4. $mySelectSexo = $_SESSION['form_registro']['sexo'];
  5. $optionsSexo = '';
  6. foreach($arrSexo as $v){
  7.     $s =  $mySelectSexo == $v ? 'selected="selected"' : '';
  8.     $optionsSexo .= "<option value='$v' $s>$v</option>";
  9. }
  10. // Desplegable Día
  11. $arrDia = array("Día","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31");
  12. $mySelectDia = $_SESSION['form_registro']['birthdateDay'];
  13. $optionsDia = '';
  14. foreach($arrDia as $v){
  15.     $s =  $mySelectDia == $v ? 'selected="selected"' : '';
  16.     $optionsDia .= "<option value='$v' $s>$v</option>";
  17. }
  18. // Desplegable Mes
  19. $arrMes = array("Mes","Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  20. $mySelectMes = $_SESSION['form_registro']['birthdateMonth'];
  21. $optionsMes = '';
  22. foreach($arrMes as $v){
  23.     $s =  $mySelectMes == $v ? 'selected="selected"' : '';
  24.     $optionsMes .= "<option value='$v' $s>$v</option>";
  25. }
  26. ?>

Muchas gracias de antemano!
  #8 (permalink)  
Antiguo 23/09/2010, 14:45
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Recordar valor tras recargar formulario

No tienes que hacerlo en un array, puedes usar alguna base de datos.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 23/09/2010, 14:48
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Recordar valor tras recargar formulario

Tambien podrias hacer una funcion para todas esas tareas repetitivas!!!
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 23/09/2010, 22:05
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 18 años, 10 meses
Puntos: 79
Respuesta: Recordar valor tras recargar formulario

Prueba este simple código

Código PHP:
Ver original
  1. <?
  2. //CODIGO PERRUNO
  3. $convanho=$_GET["canho"]+date("Y")-1;
  4. $totaldiasmes=date("t",mktime(0,0,0,$_GET["cmes"],1,$convanho));
  5. if(!$_GET["cmes"] || !$_GET["canho"]) $totaldiasmes=0;
  6. $asexo=array("","Masculino","Femenino");
  7. $aanho[]=$adia[]="";
  8. for($i=date("Y");$i>=1910;$i--) $aanho[]=$i;
  9. for($i=1;$i<=$totaldiasmes;$i++) $adia[]=$i;
  10. $ames=array("","Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  11.  
  12. function combophp($array,$elesel,$nombre,$nombre2){
  13.     print "<p>$nombre: <select name=\"$nombre2\" id=\"$nombre2\" onchange=\"combo()\">";
  14.     foreach($array as $i=>$v){
  15.         ($elesel==$i)?$s="selected=\"selected\"":$s="";
  16.         print "\n<option value=\"$i\" $s>$v</option>";
  17.     }
  18.     print "</select></p>";
  19. }
  20.  
  21. combophp($asexo,$_GET["csexo"],"sexo","sexo");
  22. combophp($aanho,$_GET["canho"],"a&ntilde;o:","anho");
  23. combophp($ames,$_GET["cmes"],"mes","mes");
  24. combophp($adia,$_GET["cdia"],"dia","dia");
  25. ?>
  26.  
  27. <script type="text/javascript">
  28. function combo(){
  29.     s=document.getElementById("sexo").value
  30.     a=document.getElementById("anho").value
  31.     m=document.getElementById("mes").value
  32.     d=document.getElementById("dia").value
  33.     location.href="?csexo="+s+"&canho="+a+"&cmes="+m+"&cdia="+d
  34. }
  35. </script>

el javascript lo acomodas en el header o lo pruebas asi, tu vez, dime si te funca
salu2
  #11 (permalink)  
Antiguo 24/09/2010, 02:58
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Recordar valor tras recargar formulario

Gracias Perr0,

¿El objetivo de esta linea es sacar los dias que tiene un determinado mes?
$totaldiasmes=date("t",mktime(0,0,0,$_GET["cmes"],1,$convanho))

Si es así, en febrero debería aparecer menos de 30 días y siempre me aparece 31, pero dejando de lado esto. Mi intención no era utilizar javascript, esa parte ya la verifico con jquery y no dejo validar el formulario si todos los campos no están rellenados y cumplen unas condiciones.

Pero estaba desactivando el javascript, para que el usuario que no tenga, se pueda registrar igualmente, por eso, te agradezco el código pero me interesa que no use javascript para recordar las selecciones que hizo el usuario.

Salu2!
  #12 (permalink)  
Antiguo 24/09/2010, 07:36
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 18 años, 10 meses
Puntos: 79
Respuesta: Recordar valor tras recargar formulario

neodani, que tal:

asi es $totaldiasmes=date("t",mktime(0,0,0,$_GET["cmes"],1,$convanho)) te da el numero de dias del mes

ahora si ocupas date("t"), te da el numero de dias del mes del servidor.

bueno, te cuento que el codigo me funciona bien, te explico simplemente como funciona cosa de que lo acomodes, puedes quitar el onchange en todos los combos y luego presionar enviar, si ocupas POST, tendras que cambiar los GET.

lo tendrias que acomodar a tu medida, ahora el número de dias los puedes dejar fijo hasta el 31, mi intensión fue que te arroje el número de dias correspiendte al mes y al año (esto es precisamente por los años bisiestos), si quieres que te funcione asi, tendrias que usar ajax y validar cuando tengas algún valor en año y mes para que te arroje el número de dias preciso.

como te repito me funciono bien el script, es cosa de copiar y pegar y crear un archivo php y correrlo.

detallo el codigo
Código:
$convanho=$_GET["canho"]+date("Y")-1; //malo
hay que corregirlo por este
Código:
$convanho=date("Y")-($_GET["canho"]-1); //corregido
obtengo el valor del combo del año $_GET["canho"], este será asi:
2010 -> valor 1 (o el año actual)
2009 -> valor 2
.
.
.
1910 -> valor 101

entonces el valor de la selección del año no me sirve de por si solo porque es un número tipo indice, para ello le sumo el año actual en este caso 2010 y le resto 1 porque parto con el número 1

osea
2010-(1-1)=2010
2010-(2-1)=2009
2010-(3-1)=2008
.
.
.
2010-(101-1)=1910


$totaldiasmes=date("t",mktime(0,0,0,$_GET["cmes"],1,$convanho));
genero el tiempo al que nos referimos con mktime
la hora,minutos y segundos no los contabilizamos asi se van a cero
con $_GET["cmes"] recojo el mes seleccionado del combo mes
con $convanho recojo el año seleccionado del combo año con el valor como corresponde
el dia siempre como 1

luego al hacer a la fecha generada date("t",[fecha generada]) obtengo el total de dias de ese mes.

salu2

bueno queda en que lo adaptes a tu manera
  #13 (permalink)  
Antiguo 06/10/2010, 15:25
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Recordar valor tras recargar formulario

Buenas,

No consigo hacer el desplegable de los países de forma que al recargar el formulario recuerde el PAIS seleccionado.

La técnica que apliqué para los campos sexo, dia, mes y año no me sirve ya que para esos campos el value era el mismo que el nombre.
Pero para el caso de los países me interesa que sea el propio ID de la base de datos.

Ejemplo
Código HTML:
Ver original
  1. <option value="1">Afganistán</option><option value="2">Albania</option><option value="3">Alemania</option><option value="4">American Samoa</option><option value="5">Andorra</option><option value="6">Angola</option><option value="7">Anguila</option><option value="8">Antigua and Barbuda</option><option value="9">Antillas Holandesas</option><option value="10">Antártida</option><option value="11">Arabia Saudita</option><option value="12">Argelia</option><option value="13">Argentina</option><option value="14">Armenia</option><option value="15">Aruba</option><option value="17">Australia</option><option value="18">Austria</option><option value="19">Azerbaijan</option><option value="20">Bahamas</option><option value="21">Bahrein</option><option value="22">Bangladesh</option><option value="23">Barbados</option><option value="24">Belice</option><option value="25">Benin</option><option value="26">Bermuda</option><option value="27">Bielorrusia</option><option value="28">Bolivia</option><option value="29">Bosnia y Herzegovina</option><option value="30">Botsuana</option><option value="31">Bouvet Island</option><option value="32">Brasil</option><option value="33">British Indian Ocean Territory</option><option value="34">Brunei Darussalam</option><option value="35">Bulgaria</option><option value="36">Burkina Faso</option><option value="37">Burundi</option><option value="38">Bután</option><option value="39">Bélgica</option><option value="40">Cabo Verda</option><option value="41">Camboya</option><option value="42">Camerún</option><option value="43">Canadá</option><option value="45">Chad</option><option value="46">Chile</option><option value="47">China</option><option value="48">Chipre</option><option value="49">Colombia</option><option value="50">Comores</option><option value="51">Congo</option><option value="52">Corea del Norte</option><option value="53">Corea del Sur</option><option value="54">Costa Rica</option><option value="55">Cote D Ivoire</option><option value="56">Croacia</option><option value="57">Cuba</option><option value="58">Dinamarca</option><option value="59">Djibouti</option><option value="60">Dominica</option><option value="61">East Timor</option><option value="62">Ecuador</option><option value="63">Egipto</option><option value="64">El Salvador</option><option value="65">El Vaticano</option><option value="66">Emiratos Arabes Unidos</option><option value="67">Eritrea</option><option value="68">Eslovaquia</option><option value="69">Eslovenia</option><option selected="selected" value="70">España</option><option value="71">Estados Unidos</option><option value="72">Estonia</option><option value="73">Etiopía</option><option value="74">Fiji</option><option value="75">Filipinas</option><option value="76">Finlandia</option><option value="77">Francia</option><option value="78">French Guiana</option><option value="79">French Polynesia</option><option value="80">French Southern Territories</option><option value="81">Gabón</option><option value="82">Gambia</option><option value="83">Georgia</option><option value="84">Ghana</option><option value="85">Gibraltar</option><option value="86">Granada</option><option value="87">Grecia</option><option value="88">Groenlandia</option><option value="89">Guadalupe</option><option value="90">Guam</option><option value="91">Guatemala</option><option value="92">Guinea</option><option value="93">Guinea Ecuatorial</option><option value="94">Guinea-Bissau</option><option value="95">Guyana</option><option value="96">Haití</option><option value="97">Heard Island and McDonald Isla</option><option value="98">Holanda</option><option value="99">Honduras</option><option value="100">Hong Kong</option><option value="101">Hungría</option><option value="102">India</option><option value="103">Indonesia</option><option value="104">Iraq</option><option value="105">Irlanda</option><option value="106">Isalas Cocos</option><option value="107">Isla Christmas</option><option value="108">Islandia</option><option value="109">Islas Caimán</option><option value="110">Islas Cook</option><option value="111">Islas Feroe</option><option value="112">Islas Malvinas</option><option value="113">Islas Marshall</option><option value="114">Islas Mauricio</option><option value="115">Islas Salomón</option><option value="116">Islas Sandwhich</option><option value="117">Islas Turks y Caicos</option><option value="118">Islas Wallis y Futuna</option><option value="119">Israel</option><option value="120">Italia</option><option value="121">Jamaica</option><option value="122">Japón</option><option value="123">Jordania</option><option value="124">Kazakhstán</option><option value="125">Kenia</option><option value="126">Kiribati</option><option value="127">Kuwait</option><option value="128">Kyrgyzstán</option><option value="129">Laos</option><option value="130">Latvia</option><option value="131">Lesoto</option><option value="132">Liberia</option><option value="133">Libia</option><option value="134">Liechtenstein</option><option value="135">Lituania</option><option value="136">Luxemburgo</option><option value="137">Líbano</option><option value="138">Macao</option><option value="139">Macedonia</option><option value="140">Madagascar</option><option value="141">Malasia</option><option value="142">Malaui</option><option value="143">Maldivas</option><option value="144">Malta</option><option value="145">Malí</option><option value="146">Marruecos</option><option value="147">Martinique</option><option value="148">Mauritania</option><option value="149">Mayotte</option><option value="150">Micronesia</option><option value="151">Moldavia</option><option value="152">Mongolia</option><option value="153">Montserrat</option><option value="154">Mozambique</option><option value="155">Myanmar</option><option value="156">México</option><option value="157">Mónaco</option><option value="158">Namibia</option><option value="159">Nauru</option><option value="160">Nepal</option><option value="161">Nicaragua</option><option value="162">Nigeria</option><option value="163">Niue</option><option value="164">Norfolk Island</option><option value="165">Northern Mariana Islands</option><option value="166">Noruega</option><option value="167">Nueva Caledonia</option><option value="168">Nueva Zelanda</option><option value="169">Níger</option><option value="170">Omán</option><option value="171">Pakistán</option><option value="172">Palau</option><option value="173">Palestinian Territory</option><option value="174">Panamá</option><option value="175">Papúa Nueva Guinea</option><option value="176">Paraguay</option><option value="177">Perú</option><option value="178">Pitcairn</option><option value="179">Polonia</option><option value="180">Portugal</option><option value="181">Puerto Rico</option><option value="182">Qatar</option><option value="183">Reino Unido</option><option value="184">República Centroafricana</option><option value="185">República Checa</option><option value="186">República Democrática del Cong</option><option value="187">República Dominicana</option><option value="188">República Islámica de Irán</option><option value="189">Ruanda</option><option value="190">Rumania</option><option value="191">Rusian</option><option value="192">Saint Kitts and Nevis</option><option value="193">Saint Pierre y Miquelon</option><option value="194">Samoa</option><option value="195">San Marino</option><option value="196">San Vicente y Las Granadinas</option><option value="197">Santa Elena</option><option value="198">Santa Lucía</option><option value="199">Sao Tome and Principe</option><option value="200">Senegal</option><option value="201">Serbia y Montenegro</option><option value="202">Seychelles</option><option value="203">Sierra Leona</option><option value="204">Singapur</option><option value="205">Siria</option><option value="206">Somalía</option><option value="207">Sri Lanka</option>

Lo intenté así pero no se porqué a veces falla y no carga los ID correctamente.

Código PHP:
Ver original
  1. $query = "SELECT pais_id, pais FROM tbl_paises";
  2.         $comando = $db_master->prepare($query);
  3.         $comando->execute();
  4.         $mySelectSexo = $_SESSION['form_registro']['pais'];
  5.         while( $datos = $comando->fetch() ) {
  6.             $s =  $mySelectSexo == $datos[0] ? 'selected="selected"' : '';
  7.             echo "<option value=$datos[0] $s>$datos[1]</option>";
  8.         }

¿Se os ocurre alguna alternativa?

Muchas gracias de antemano

Etiquetas: recargar, recordar, tras, formulario
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 10:06.