Foros del Web » Programando para Internet » PHP »

Problema con fechas, base de datos y un for

Estas en el tema de Problema con fechas, base de datos y un for en el foro de PHP en Foros del Web. Hola, Mi problema es que al querer mostrar todos los dias/meses/años y hacer un if($variable == $variable2) { $selectdia= "selected=\"selected\"" } Solo me muestra el ...
  #1 (permalink)  
Antiguo 19/02/2012, 06:47
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Problema con fechas, base de datos y un for

Hola,

Mi problema es que al querer mostrar todos los dias/meses/años y hacer un if($variable == $variable2) { $selectdia= "selected=\"selected\"" } Solo me muestra el dia que cojo de la base de datos.

Lo que quiero es que me muestre los 31 días, y si en la base de datos aparece el dia 24, que en ese dia se ponga "selected="selected"" para que aparezca seleccionado.

Aquí os dejo mi código. Coge el día/mes/año de la base de datos, pero sólo muestra ese y no los demás, y no sé cómo hacerlo.

Código PHP:
Ver original
  1. Fecha de nacimiento: <br/>
  2. <?php
  3. //Separamos la fecha
  4. $fecha = strtotime($row["fecha"]);
  5. $anoo = date("Y", $fecha);
  6. $mess = date("m", $fecha);
  7. $diaa = date("j", $fecha);
  8.  
  9.     echo "<select>";
  10. for ($dia = 01; $dia <= 31; $dia++) {
  11.     if($dia == $diaa) {
  12.         $selectdia = "selected=\"selected\"";
  13.     echo "D&iacute;a: <option value=\"".$dia."\" \"".$selectdia."\">".$dia."</option><br/>";   
  14.     }
  15. }
  16.  
  17. echo "</select>";
  18.  
  19. echo "<select>";
  20.  
  21. for ($mes = 01; $mes <= 12; $mes++) {
  22.     if($mes == $mess) {
  23.         $selectmes = "selected=\"selected\"";
  24.     echo "Mes: <option value=\"".$mes."\" \"".$selectmes."\">".$mes."</option><br/>";
  25.     }
  26. }
  27.  
  28. echo "</select>";
  29.  
  30. echo "<select>";
  31.  
  32. for ($ano = 2012; $ano >= 1990; $ano--) {
  33.     if($ano == $anoo) {
  34.         $selectano = "selected=\"selected\"";
  35.     echo "A&ntilde;o: <option value=\"".$ano."\" \"".$selectano."\">".$ano."</option><br/>";
  36.     }
  37. }
  38.  
  39. echo "</select>";
  40. ?><br/><br/>

Espero que me podáis ayudar, ya que estoy atascado. Gracias.
__________________
@JaimeMSE - ¡Sígueme!
  #2 (permalink)  
Antiguo 19/02/2012, 07:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con fechas, base de datos y un for

Pues saca el código que imprime dicho <option> del if() que lo condiciona o usa un else{} para imprimir el <option> normal.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 19/02/2012, 07:18
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Problema con fechas, base de datos y un for

Si hago una cosa así me muestra en vez de 1,2,3,4,5,6... me muestra 31 veces el número 27 (que es el que aparece en la base de datos).

Lo siento, pero no sé como ponerlo para que muestre del 1 al 31 y que si existe el dia en la DB ponga el selected=selected a ese dia, pero sigan apareciendo todos los demás dias :S

Código PHP:
Ver original
  1. echo "<select>";
  2. for ($dia = 01; $dia <= 31; $dia++) {
  3.     if($dia == $diaa) {
  4.         $selectdia = "selected=\"selected\"";
  5.     echo "D&iacute;a: <option value=\"".$dia."\" \"".$selectdia."\">".$dia."</option><br/>";   
  6.     }
  7.     else {
  8.     echo "D&iacute;a: <option value=\"".$dia."\">".$dia."</option><br/>";
  9.     }
  10. }
  11.  
  12. echo "</select>";
__________________
@JaimeMSE - ¡Sígueme!
  #4 (permalink)  
Antiguo 19/02/2012, 14:02
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con fechas, base de datos y un for

Ten en cuenta que no todos los meses tienen 31 días, puedes hacer algo así:

Código PHP:
Ver original
  1. <?php
  2. $fecha = strtotime('19-02-2012'); //aquí va tu fecha de la base de datos
  3.  
  4. $dias_mes = date('t', $fecha);
  5. $dia = date('j', $fecha);
  6. $mes = date('n', $fecha);
  7. $anio = date('Y', $fecha);
  8. ?>
  9.  
  10. Fecha nacimiento: <br />
  11.  
  12. <select name="dia">
  13. <?php for ($i = 1; $i <= $dias_mes; $i++) {
  14.     if ($i == $dia) {
  15.         echo '<option value="' . $i . '" selected="selected">' . $i . '</option>' . PHP_EOL;
  16.     } else {
  17.         echo '<option value="'.$i.'">'.$i.'</option>' . PHP_EOL;
  18.     }
  19. }
  20. ?>
  21. </select>
  22.  
  23. <select name="mes">
  24. <?php for ($i = 1; $i <= 12; $i++) {
  25.     if ($i == $mes) {
  26.         echo '<option value="' . $i . '" selected="selected">' . $i . '</option>' . PHP_EOL;
  27.     } else {
  28.         echo '<option value="'.$i.'">'.$i.'</option>' . PHP_EOL;
  29.     }
  30. }
  31. ?>
  32. </select>
  33.  
  34. <select name="anio">
  35. <?php for ($i = 2012; $i >= 1990; $i--) {
  36.     if ($i == $anio) {
  37.         echo '<option value="' . $i . '" selected="selected">' . $i . '</option>' . PHP_EOL;
  38.     } else {
  39.         echo '<option value="'.$i.'">'.$i.'</option>' . PHP_EOL;
  40.     }
  41. }
  42. ?>
  43. </select>

PD: PHP_EOL se usa para que se vea correctamente el código fuente generado.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 19/02/2012, 18:55
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Problema con fechas, base de datos y un for

Cita:
Iniciado por andresdzphp Ver Mensaje
Ten en cuenta que no todos los meses tienen 31 días, puedes hacer algo así:

Código PHP:
Ver original
  1. <?php
  2. $fecha = strtotime('19-02-2012'); //aquí va tu fecha de la base de datos
  3.  
  4. $dias_mes = date('t', $fecha);
  5. $dia = date('j', $fecha);
  6. $mes = date('n', $fecha);
  7. $anio = date('Y', $fecha);
  8. ?>
  9.  
  10. Fecha nacimiento: <br />
  11.  
  12. <select name="dia">
  13. <?php for ($i = 1; $i <= $dias_mes; $i++) {
  14.     if ($i == $dia) {
  15.         echo '<option value="' . $i . '" selected="selected">' . $i . '</option>' . PHP_EOL;
  16.     } else {
  17.         echo '<option value="'.$i.'">'.$i.'</option>' . PHP_EOL;
  18.     }
  19. }
  20. ?>
  21. </select>
  22.  
  23. <select name="mes">
  24. <?php for ($i = 1; $i <= 12; $i++) {
  25.     if ($i == $mes) {
  26.         echo '<option value="' . $i . '" selected="selected">' . $i . '</option>' . PHP_EOL;
  27.     } else {
  28.         echo '<option value="'.$i.'">'.$i.'</option>' . PHP_EOL;
  29.     }
  30. }
  31. ?>
  32. </select>
  33.  
  34. <select name="anio">
  35. <?php for ($i = 2012; $i >= 1990; $i--) {
  36.     if ($i == $anio) {
  37.         echo '<option value="' . $i . '" selected="selected">' . $i . '</option>' . PHP_EOL;
  38.     } else {
  39.         echo '<option value="'.$i.'">'.$i.'</option>' . PHP_EOL;
  40.     }
  41. }
  42. ?>
  43. </select>

PD: PHP_EOL se usa para que se vea correctamente el código fuente generado.

Saludos.
Muchas gracias, me ha funcionado correctamente :).

Una duda, ¿por qué usas comillas simples en vez de dobles, por ejemplo, en los echo?
__________________
@JaimeMSE - ¡Sígueme!
  #6 (permalink)  
Antiguo 19/02/2012, 19:04
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con fechas, base de datos y un for

Por simple gusto, personalmente odio escapar comillas \" y me gusta usar comillas dobles para los atributos html.

Lo puedes hacer con dobles si quieres:

Código PHP:
Ver original
  1. <?php
  2. $fecha = strtotime('19-02-2012'); //aquí va tu fecha de la base de datos
  3.  
  4. $dias_mes = date('t', $fecha);
  5. $dia = date('j', $fecha);
  6. $mes = date('n', $fecha);
  7. $anio = date('Y', $fecha);
  8. ?>
  9.  
  10. Fecha nacimiento: <br />
  11.  
  12. <select name="dia">
  13. <?php for ($i = 1; $i <= $dias_mes; $i++) {
  14.     if ($i == $dia) {
  15.         echo "<option value=\"$i\" selected=\"selected\">$i</option>" . PHP_EOL;
  16.     } else {
  17.         echo "<option value=\"$i\">$i</option>" . PHP_EOL;
  18.     }
  19. }
  20. ?>
  21. </select>
  22.  
  23. <select name="mes">
  24. <?php for ($i = 1; $i <= 12; $i++) {
  25.     if ($i == $mes) {
  26.         echo "<option value=\"$i\" selected=\"selected\">$i</option>" . PHP_EOL;
  27.     } else {
  28.         echo "<option value=\"$i\">$i</option>" . PHP_EOL;
  29.     }
  30. }
  31. ?>
  32. </select>
  33.  
  34. <select name="anio">
  35. <?php for ($i = 2012; $i >= 1990; $i--) {
  36.     if ($i == $anio) {
  37.         echo "<option value=\"$i\" selected=\"selected\">$i</option>" . PHP_EOL;
  38.     } else {
  39.         echo "<option value=\"$i\">$i</option>" . PHP_EOL;
  40.     }
  41. }
  42. ?>
  43. </select>

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 19/02/2012 a las 19:11
  #7 (permalink)  
Antiguo 19/02/2012, 19:09
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Problema con fechas, base de datos y un for

Cita:
Iniciado por andresdzphp Ver Mensaje
Por simple gusto, personalmente odio escapar comillas \" y me gusta usar comillas dobles para los atributos html.

Lo puedes hacer con dobles si quieres.

Saludos.
Ah, vale. Gracias por todo :)
__________________
@JaimeMSE - ¡Sígueme!

Etiquetas: variables
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:42.