Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: inquilin@19 en 21 Octubre 2011, 16:17 pm



Título: Script php
Publicado por: inquilin@19 en 21 Octubre 2011, 16:17 pm
Hola a todos, vereis, tengo un problemilla, resulta que tengo que hacer un contador que me diga los dias, horas, minutos y segundos que quedan para tal fecha (un cumpleaños, por ejemplo) e probado a acer el contador pero solo consigo que sea estático y no se como hacer para que lo lea el html alguna ayuda?
muchas gracias


Título: Re: Script php
Publicado por: dark_sargon en 21 Octubre 2011, 19:22 pm
Yo lo haría con PHP y javascript. De tal forma que el script PHP te dé los valores de las variables HH:MM:SS pero como dices, estas son estáticas. Luego de tenerlas las pones como valores iniciales de un contador en javascript que se actualiza automáticamente cada segundo.


Título: Re: Script php
Publicado por: madpitbull_99 en 21 Octubre 2011, 20:54 pm
Eso es un contador inverso. En javascript se haría de la siguiente manera:

Código
  1. <script language="javascript">
  2.  
  3.      //Fechas inicial y final
  4.  
  5.      var Hoy=new Date()
  6.      var Nav=new Date(Hoy.getFullYear(), 11, 25)
  7.      var mseg_dia=1000*60*60*24
  8.      var dias
  9.  
  10.      if (Hoy.getMonth()==11 && Hoy.getDate()>25)
  11.          Nav.setFullYear(Nav.getFullYear()+1)
  12.  
  13.      dias = Math.ceil((Nav.getTime()-Hoy.getTime())/(mseg_dia))
  14.      document.write("Quedan "+dias+" dias hasta Navidad")
  15.  
  16. </script>

Si quieres usar JQuery sería así:

Código
  1. var newYear = new Date();
  2. newYear = new Date(newYear.getFullYear() + 1, 1 - 1, 1);
  3. $('#defaultCountdown').countdown({until: newYear});
  4.  
  5. $('#removeCountdown').toggle(function() {
  6.        $(this).text('Re-attach');
  7.        $('#defaultCountdown').countdown('destroy');
  8.    },
  9.    function() {
  10.        $(this).text('Remove');
  11.        $('#defaultCountdown').countdown({until: newYear});
  12.    }
  13. );

Fuente (http://keith-wood.name/countdown.html). Si quieres ver más ejemplos, busca en Google por "javascript countdown".



Título: Re: Script php
Publicado por: inquilin@19 en 21 Octubre 2011, 22:01 pm
Creo que me servira, lo tengo que implementar en una pagina html, pero tenemos un manual que mas o menos dice como se hace.
Ahora mi pregunta es, tengo este código:
<html>
<head>
<title>usuario y correo</title>
</head>
<body>
<h1>Bienvenido a la Web!</h1><p/>
<h3>Introduce tus datos de usuario</h3><p/>
<form action="formato_a1.php" method="POST">
   <p><strong>UserName:</strong><br/>
   <input type="text" name="username"/></p>

   <p><strong>E-mailAddress:</strong><br/>
   <textarea name="emailaddress" rows="" cols="20"></textarea></p>
   <p><input type="submit" value="check and send"/></p>
</form>
</body>
</html>

que va enlazado a este php
<?php
echo "<p>Bienvenido<b>".$_POST=ucwords($_POST["username"])."</b></p>";

if (strstr($_POST["emailaddress"],"@")) {
   echo "<p>Tu e-mail es correcto:<b>".$_POST["emailaddress"]."</b></p>";
   } else {
   echo "<p> ERROR! Tu dirección de e-mail no es válida, revísala</p>";
}
?>
El primer echo me sale bien, pongo el nombre del usuario y me le muestra, la pega es que al meter el email, se supone que si no lleva @ tiene que dar error pero aunque lleve @ sigue dando error. ¿Que he puesto mal?


Título: Re: Script php
Publicado por: WHK en 21 Octubre 2011, 22:10 pm
Hola, en ves de stst() usa esto:
Código
  1. <?php if(filter_var($email, FILTER_VALIDATE_EMAIL)){ ... ?>

Además pon el cast en parentesis:
Código
  1. echo "<p>Bienvenido<b>".($_POST=ucwords($_POST["username"]))."</b></p>";

dale un vistazo a tu php si tienes errores activados para ver mejor que pasa.


Título: Re: Script php
Publicado por: dark_sargon en 21 Octubre 2011, 22:12 pm
Según entendí ya tienes el contador pero quieres que en tu documeto se actualice cada segundo.

Hice un ejemplo para Halloween con PHP y javascript.
http://www.actimediaonline.com/hora.php (http://www.actimediaonline.com/hora.php)

El problema de obtener la fecha actual con javascript es que tomará la del cliente y no la de tu propio reloj (servidor). Por esa razón digo que sería mejor con PHP.

hora.php
Código
  1. <?php
  2. //Aca defines la hora cero (cuando el contador llega a 0)
  3. //Yo pongo de ejemplo Halloween de éste año (31/Oct/11 a las 00:00:00)
  4.   $dia_cero = 31;
  5. //$hora_cero = 0;
  6. //$min_cero = 0;
  7. //$seg_cero = 0;
  8.  
  9. //Aca defines la zona horaria
  10.   date_default_timezone_set('America/Bogota');
  11.  
  12. //Aca obtienes la hora actual del servidor
  13.   $dia_act = date('d');
  14.   $hora_act = date('H');
  15.   $min_act = date('i');
  16.   $seg_act = date('s');
  17.  
  18. //Calculas el tiempo restante
  19.   $dia_rest = ($dia_cero - $dia_act) - 1;
  20.   $hora_rest = 23 - $hora_act;
  21.   $min_rest = 59 - $min_act;
  22.   $seg_rest = 60 - $seg_act;
  23. ?>
  24.  
  25. <html>
  26. <head>
  27.   <script language="javascript" type="text/javascript">
  28.      var dia_rest = <?php echo $dia_rest ?>;
  29.      var hora_rest = <?php echo $hora_rest ?>;
  30.      var min_rest = <?php echo $min_rest ?>;
  31.      var seg_rest = <?php echo $seg_rest ?>;
  32.  
  33.      var reloj = setInterval("muestraTemp()",1000);
  34.  
  35.      function muestraTemp(){
  36.         seg_rest -= 1;
  37.         if(seg_rest < 0){
  38.            seg_rest = 59;
  39.            min_rest -= 1;
  40.         }
  41.  
  42.         if(min_rest < 0){
  43.            min_rest = 59;
  44.            hora_rest -= 1;
  45.         }
  46.  
  47.         if(hora_rest < 0){
  48.            hora_rest = 23;
  49.            dia_rest -= 1;
  50.         }
  51.  
  52.         if(seg_rest==0&&min_rest==0&&hora_rest==0&&dia_rest==0){
  53.            clearInterval(reloj);
  54.         }
  55.  
  56.         document.timer_halloween.segundos.value = seg_rest;
  57.         document.timer_halloween.minutos.value = min_rest;
  58.         document.timer_halloween.horas.value = hora_rest;
  59.         document.timer_halloween.dias.value = dia_rest;
  60.      }
  61.  
  62.   </script>
  63. </head>
  64.  
  65. <body>
  66. <h1>Halloween en...</h1>
  67.   <form name="timer_halloween">
  68.      <input type="text" size="1" name="dias"> d&iacute;a(s)&nbsp;&nbsp;
  69.      <input type="text" size="1" name="horas"> hora(s)&nbsp;&nbsp;
  70.      <input type="text" size="1" name="minutos"> minuto(s)&nbsp;&nbsp;
  71.      <input type="text" size="1" name="segundos"> segundo(s)
  72.   </form>
  73. </body>
  74. </html>


Título: Re: Script php
Publicado por: inquilin@19 en 21 Octubre 2011, 22:22 pm
Si! Es lo que necesitaba, yo lo hacia pero de tal manera que era estatico, es decir, mostraba como el resultado de una resta solamente.
A proposito de lo que dices de que es mejor con php, el java es un lenguaje que nosotros no usamos (no se por qué la verdad), por eso me esta costando encontrar ayuda para hacer este contador.
Referente al otro problema, el de chekear si el email es correcto o no he usado el codigo de WHK pero me sigue saliendo igual.

Muchisimas gracias por la ayuda! Estoy estudiando esto en mi ciclo formativo pero me temo que soy demasiado pato :p


Título: Re: Script php
Publicado por: inquilin@19 en 22 Octubre 2011, 13:36 pm
Hola otra vez, por fin e conseguido tener el contador hecho, pero ahora tengo otro problema. Necesito que esté enlazado con el html para mostrarlo en el navegador.
Esto es lo que tengo por ahora y donde me he atascado:
codigo html
Código:
<html>
<head>
<title>Contador de fechas</title>
</head>
<body>
<h1>¿Cuántos días quedan para tu cumpleaños?</h1><p/>
<h3>Introduce la fecha de tu próximo cumpleaños y mira cuánto queda</h3><p/>
<form action="contador_cumpleanos_bueno.php" method="POST">
<p><strong>MES</strong><br/>
<input type="text" name="mes"/></p>

<p><strong>DIA</strong><br/>
<input type="text" name="dia"/></p>

<p><strong>AÑO</strong><br/>
<input type="text" name="ano"/></p>
<p><input type="submit" value="Mira cuántos días quedan"/></p>

</form>
</body>
</html>

CODIGO PHP
Código:
 <?php
countdown(2012,9,26,7,30,20);
function countdown($year, $month, $day, $hour, $minute, $second)
{
  $cuentaatras = mktime($hour, $minute, $second, $month, $day, $year, -1);

  $hoy = time();

  $diferencia = $cuentaatras - $hoy;
  if ($diferencia < 0) $diferencia = 0;

  $diasrestantes = floor($diferencia/60/60/24);
  $horasrestantes = floor(($diferencia - $diasrestantes*60*60*24)/60/60);
  $minutosrestantes = floor(($diferencia - $diasrestantes*60*60*24 -
     $horasrestantes*60*60)/60);
  $segundosrestantes = floor (($diferencia- $diasrestantes*60*60*24 -
                               $horasrestantes*60*60 -
                               $minutosrestantes*60)/60);
 
  echo "Quedan ".$diasrestantes." diass ".
                 $horasrestantes." horas ".
                 $minutosrestantes." minutos y ".
                 $segundosrestantes."segundos";
}
?> 

Ahi es donde me he atascado, ya que ponga lo que ponga en el navegador me sale siempre la misma fecha


Título: Re: Script php
Publicado por: dark_sargon en 22 Octubre 2011, 19:44 pm
Pues no estás recibiendo los valores de tu formulario.

En la segunda línea de tu PHP:
Código
  1. countdown(2012,9,26,7,30,20);

Le estás pasando argumentos constantes a tu función. Debes tomar los datos de tu formulario con:
Código
  1. $dia = $_POST['campo_dia'];

Con la línea anterior tendras almacenado el valor del campo de nombre  campo_dia en la variable $dia.

Como sugerencia, es mejor que hagas tu propio script ya que ese que tienes ahí parece que tomara valores de año, mes, día, hora, minutos y segundos. Tú solo estás pasando con tu formulario mes, dia y año.