Foros del Web » Programando para Internet » PHP »

escribir los dias que hay entre 2 fechas

Estas en el tema de escribir los dias que hay entre 2 fechas en el foro de PHP en Foros del Web. hola buenas tengo 2 codigos uno k agrega a una base de datos un codigo,nombre y 2 fechas y otro que muestra la informacion hasta ...
  #1 (permalink)  
Antiguo 25/02/2012, 06:54
Avatar de xinote  
Fecha de Ingreso: enero-2012
Ubicación: Valladolid, Spain
Mensajes: 78
Antigüedad: 12 años, 3 meses
Puntos: 0
escribir los dias que hay entre 2 fechas

hola buenas tengo 2 codigos uno k agrega a una base de datos un codigo,nombre y 2 fechas y otro que muestra la informacion hasta hay bien pero el 2º codigo ademas muestra los dias que faltan entre las 2 fechas y eh hay el problema me muestra lo del 1º cliente,y en el 2º y sucesivos repite los dias que faltan en el 1º como si escribiese continuamente lo mismo y no hiciese el calculo aki dejo lso codigos aver si alguien sabe dar con ello... ymuchas gracias de antemano.

AGREGAR.PHP
Código PHP:
<html> 
<head> 

<title>agregar clientes</title> 


<script language="JavaScript" src="calendario/javascripts.js"></script>
    <link rel="STYLESHEET" type="text/css" href="calendario/estilo.css">

</head> 

<body background="extras/naturaleza.jpg">

<?php
include ('header.php');
include (
'menu1.php');
include (
'menu2.php');
include (
'menu_vacas.php'); 
?>
    <p>&nbsp;</p> 
    
    <?php
error_reporting
(0);
?>

<?php

$fecha 
date("Y/n/d");

if(
$_POST[enviar]) {
    require 
'config.php' ;
    function 
quitar($texto) {
        
$texto trim($texto) ;
        
$texto htmlspecialchars($texto) ;
        
$texto str_replace(chr(160),'',$texto) ; # Elimina espacios que no pueden ser borrados por trim()
        
return $texto ;
    }
    
$codigo $_POST['codigo']; 
    
$con mysql_query("select * from vacaciones where codigo='$codigo'") ;
    if(
mysql_result(0,0)) {
        echo 
'El cliente ya existe en la base de datos. Haz click <a href="javascript:history.back(-1)">aqui</a> para regresar.' ;
    }
    else {
$nombre $_POST['nombre']; 
$fechaini $_POST['fechaini']; 
$fechafin $_POST['fechafin']; 
$pedidos $_POST['pedidos']; 











mysql_query("INSERT INTO vacaciones (codigo, nombre, fechaini, fechafin, pedidos) VALUES('$codigo','$nombre','$fechaini','$fechafin','$pedidos')"); 
print 
'<font face="Verdana, Geneva, sans-serif" size="+3"><b><center>';
print 
'La informacion sobre el cliente <br><br>';
print ( 
$codigo );
print 
'<br><br>';
print 
'ah sido guardada'
print 
'<br><br>';
$copy=mysql_query("select * from copyright");
while (
$row=mysql_fetch_array($copy))
{
$nombreauto 'doña';
$nombreauto2 'carmen'
print 
$nombreauto;
print 
$nombreauto2;
echo 
'<br><br>Haz click <a href="javascript:history.back(-1)">aqui</a> para regresar.' ;
    
}
}
}
else {
?> 


<form name="formulario" method="post" action="<?=$_SERVER[PHP_SELF]?>"> 
  <p><b>Codigo:</b><br> 
  <input type="text" name="codigo" maxlength="3"><br> 
  <b>Nombre:</b><br> 
  <input type="text" name="nombre" maxlength="50"><br> 
  <b>Inicio Vacaciones:</b><br> 
  <input type="text" name="fechaini" maxlength="50" value='<?php echo"$fecha"?>'><br> 
  <b>Final Vacaciones:</b><br> 
  <input type="text" name="fechafin" maxlength="40" value="<?php echo"$fecha"?>"><br> 
  <b>Pedidos:</b><br>
  <textarea name="pedidos" id="456" cols="25" rows="5"></textarea>
  Fecha inicio: 


    <br> 


    

    
      <input type="submit" name="enviar" value="Guardar">

</div>
<?php
}


?>

  <p>  
</body> 
</html>
MOSTRAR.PHP

Código PHP:
<?php  
include ('header.php'); 
include (
'menu1.php'); 
include (
'menu2.php');
include (
'menu_vacas.php');  
require (
'config.php');  
$nbrow=0;  

print 
" <form>";  

//calculo SQL entre 2 fechas 
$diasvacas mysql_query("SELECT TO_DAYS(fechafin) - TO_DAYS(fechaini) FROM vacaciones order by codigo ASC"); 
$calcula mysql_result($diasvacas,0);  
//extraigo info de la sql
$result mysql_query("SELECT *,DATE_FORMAT(fechaini,'%d/%m/%Y') as fechaini, DATE_FORMAT(fechafin,'%d/%m/%Y') as fechafin  FROM vacaciones order by codigo ASC");  

echo 
"<table CELLSPACING=1 CELLPADDING=1 width='80%' border='1' align='center' align='center' bgcolor='#00FFFF'> \n";  
echo 
"<tr><td><b><center>Codigo</td><td><b><center>Nombre</td><td><b><center>Fecha Inicio</td><td><b><center>Fecha Final</td><td><b><center>Revistas para guardar</td><td><b><center>Vuelve en..</td></tr> \n";  

while(
$row=mysql_fetch_array($result))  
{  
$nbrow++;  
$cont++;  

$codigo=$row["codigo"];  
$nombre =$row["nombre"];  
$fechaini $row["fechaini"];  
$fechafin =$row["fechafin"];  
$pedidos $row["pedidos"];  


print 
"<tr bgcolor='#FBF3E4'> ";  
print 
"<br>"


print 
"<td> <div align=\"center\"><font color=\"#000000\"><font size=\"1\"><font face=\"Verdana\">$codigo</font></font></div></td>";  
print 
"<td> <div align=\"center\"><font color=\"#000000\"><font size=\"1\"><font face=\"Verdana\">$nombre</font></font></div></td>";  
print 
"<td> <div align=\"center\"><font color=\"#000000\"><font size=\"1\"><font face=\"Verdana\">$fechaini</font></font></div></td>"
print 
"<td> <div align=\"center\"><font color=\"#000000\"><font size=\"1\"><font face=\"Verdana\">$fechafin</font></font></div></td>";  
print 
"<td> <b><font face='comic sans ms'><center><textarea name='valor5' rows='3' align='center' width='95%' disabled readonly> $pedidos </textarea></td>";  

print 
"<td> <div align=\"center\"><font color=\"#000000\"><font size=\"1\"><font face=\"Verdana\">$calcula dias</font></font></div></td>"




print 
"</tr>";  


}  
print 
"</form> \n";  
echo 
"</table> \n <p><br><p>";  


//imprime número de registros  
print "<b><font size=\"1\"><center><font face=\"Verdana\">Actualmente tenemos<font color='#FF0000'> $nbrow <font color='#000000'>Clientes de vacaciones </font></b>";  




?> 

  
<body bgcolor="#FFFFCC">
  #2 (permalink)  
Antiguo 25/02/2012, 15:05
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: escribir los dias que hay entre 2 fechas

El bucle While hace avanzar el puntero del recurso $result, pero el recurso $calcula no está dentro del while sino que es siempre el mismo valor. Para no complicar más las cosas que recomiendo que unifiques las selects:

SELECT *, TO_DAYS(fechafin) - TO_DAYS(fechaini) as diff, DATE_FORMAT(fechaini,'%d/%m/%Y') as fechaini, DATE_FORMAT(fechafin,'%d/%m/%Y') as fechafin FROM vacaciones order by codigo ASC

o similar, saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 26/02/2012, 09:57
Avatar de xinote  
Fecha de Ingreso: enero-2012
Ubicación: Valladolid, Spain
Mensajes: 78
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: escribir los dias que hay entre 2 fechas

Cita:
Iniciado por repara2 Ver Mensaje
El bucle While hace avanzar el puntero del recurso $result, pero el recurso $calcula no está dentro del while sino que es siempre el mismo valor. Para no complicar más las cosas que recomiendo que unifiques las selects:

SELECT *, TO_DAYS(fechafin) - TO_DAYS(fechaini) as diff, DATE_FORMAT(fechaini,'%d/%m/%Y') as fechaini, DATE_FORMAT(fechafin,'%d/%m/%Y') as fechafin FROM vacaciones order by codigo ASC

o similar, saludos
Na no consigo unificar los 2 select sin que me de error y como wueno funciona ya sabes lo dicho si algo funciona no lo tokes xd
y lo de contar los dias como podria hacerlo para eso k dices de meterlo en el bucle?? por k me oty volviendo loco literalmente xd
  #4 (permalink)  
Antiguo 26/02/2012, 10:34
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: escribir los dias que hay entre 2 fechas

Tal y como tienes el código, hay dos selects:

Código PHP:
Ver original
  1. //calculo SQL entre 2 fechas
  2. $diasvacas = mysql_query("SELECT TO_DAYS(fechafin) - TO_DAYS(fechaini) FROM vacaciones order by codigo ASC");
calcular la diferencia en días, y

Código PHP:
Ver original
  1. //extraigo info de la sql
  2. $result = mysql_query("SELECT *,DATE_FORMAT(fechaini,'%d/%m/%Y') as fechaini, DATE_FORMAT(fechafin,'%d/%m/%Y') as fechafin  FROM vacaciones order by codigo ASC");

para obtener las fechas con formato. Por lo tanto, hay 2 consultas a la DB, para obtener los valores de una y de otra se deben recorrerlas por separado. El error es que tú solo recorres una en la linea:

Código PHP:
Ver original
  1. while($row=mysql_fetch_array($result))

y no haces caso de la anterior, que se guarda en $calcula.

Dado que la información de ambas select viene de la misma tabla, lo lógico sería hacer una select para obtener todos los valores juntos:

Código MySQL:
Ver original
  1. SELECT V.*, (TO_DAYS(V.fechafin) - TO_DAYS(V.fechaini)) as diff, DATE_FORMAT(V.fechaini,'%d/%m/%Y') as fechaini, DATE_FORMAT(V.fechafin,'%d/%m/%Y') as fechafin FROM vacaciones V order by codigo ASC

Ahora una misma select contiene todos los valores y puedes recorrerla en un sólo while(). Si la select te da error es porque mi sintaxis en incorrecta, compruébala en tu cliente mysql.
__________________
Fere libenter homines, id quod volunt, credunt.
  #5 (permalink)  
Antiguo 26/02/2012, 12:01
Avatar de xinote  
Fecha de Ingreso: enero-2012
Ubicación: Valladolid, Spain
Mensajes: 78
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: escribir los dias que hay entre 2 fechas

Cita:
Iniciado por repara2 Ver Mensaje
Tal y como tienes el código, hay dos selects:

Código PHP:
Ver original
  1. //calculo SQL entre 2 fechas
  2. $diasvacas = mysql_query("SELECT TO_DAYS(fechafin) - TO_DAYS(fechaini) FROM vacaciones order by codigo ASC");
calcular la diferencia en días, y

Código PHP:
Ver original
  1. //extraigo info de la sql
  2. $result = mysql_query("SELECT *,DATE_FORMAT(fechaini,'%d/%m/%Y') as fechaini, DATE_FORMAT(fechafin,'%d/%m/%Y') as fechafin  FROM vacaciones order by codigo ASC");

para obtener las fechas con formato. Por lo tanto, hay 2 consultas a la DB, para obtener los valores de una y de otra se deben recorrerlas por separado. El error es que tú solo recorres una en la linea:

Código PHP:
Ver original
  1. while($row=mysql_fetch_array($result))

y no haces caso de la anterior, que se guarda en $calcula.

Dado que la información de ambas select viene de la misma tabla, lo lógico sería hacer una select para obtener todos los valores juntos:

Código MySQL:
Ver original
  1. SELECT V.*, (TO_DAYS(V.fechafin) - TO_DAYS(V.fechaini)) as diff, DATE_FORMAT(V.fechaini,'%d/%m/%Y') as fechaini, DATE_FORMAT(V.fechafin,'%d/%m/%Y') as fechafin FROM vacaciones V order by codigo ASC

Ahora una misma select contiene todos los valores y puedes recorrerla en un sólo while(). Si la select te da error es porque mi sintaxis en incorrecta, compruébala en tu cliente mysql.

na con ese select k me pusistes tu no funciona,lo modifike despues haber y tampoco de exo se me keda como cargando sin mostrar nada en la pantalla no entendi que era lo de V. asi k lo modifike para ver y tampoco ahora esta asi pero asi no carga
Código PHP:
$result mysql_query("SELECT *, (TO_DAYS(fechafin) - TO_DAYS(fechaini)) as diff, DATE_FORMAT(fechaini,'%d/%m/%Y') as fechaini, DATE_FORMAT(fechafin,'%d/%m/%Y') as fechafin FROM vacaciones ORDER BY codigo ASC"); 
Código PHP:
while($row=mysql_fetch_array($result))  

$calcula mysql_result($result,0); 
  #6 (permalink)  
Antiguo 27/02/2012, 00:00
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: escribir los dias que hay entre 2 fechas

se me keda como cargando sin mostrar nada en la pantalla // utiliza ini_set("display_errors", 1) para ver qué pasa. El script es muy simple, no deberías tener tantas complicaciones
no entendi que era lo de V //V es el alias de tabla, consulta el manual
En la select que te dí falta una V, quedaría así:

Código SQL:
Ver original
  1. SELECT V.*, (TO_DAYS(V.fechafin) - TO_DAYS(V.fechaini)) AS diff, DATE_FORMAT(V.fechaini,'%d/%m/%Y') AS fechaini, DATE_FORMAT(V.fechafin,'%d/%m/%Y') AS fechafin FROM vacaciones V ORDER BY V.codigo ASC

Si no hace nada o se queda cargando o lo que sea, prueba la select en eun cliente mysql a ver si funciona. La modificación que has hecho dentro del while es incorrecta, la solución es una unica select.
Entiendo que vacaciones es una sola base de datos. Comprueba que tenga los correspondientes indicies, clave primaria, etc....
__________________
Fere libenter homines, id quod volunt, credunt.
  #7 (permalink)  
Antiguo 27/02/2012, 09:02
Avatar de xinote  
Fecha de Ingreso: enero-2012
Ubicación: Valladolid, Spain
Mensajes: 78
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: escribir los dias que hay entre 2 fechas

Cita:
Iniciado por repara2 Ver Mensaje
se me keda como cargando sin mostrar nada en la pantalla // utiliza ini_set("display_errors", 1) para ver qué pasa. El script es muy simple, no deberías tener tantas complicaciones
no entendi que era lo de V //V es el alias de tabla, consulta el manual
En la select que te dí falta una V, quedaría así:

Código SQL:
Ver original
  1. SELECT V.*, (TO_DAYS(V.fechafin) - TO_DAYS(V.fechaini)) AS diff, DATE_FORMAT(V.fechaini,'%d/%m/%Y') AS fechaini, DATE_FORMAT(V.fechafin,'%d/%m/%Y') AS fechafin FROM vacaciones V ORDER BY V.codigo ASC

Si no hace nada o se queda cargando o lo que sea, prueba la select en eun cliente mysql a ver si funciona. La modificación que has hecho dentro del while es incorrecta, la solución es una unica select.
Entiendo que vacaciones es una sola base de datos. Comprueba que tenga los correspondientes indicies, clave primaria, etc....

Vale gracias la SELECT funciona la probe y si que carga,lo que no me carga es cuando pongo el $calcula pasra que escriba la siferencia de dias¡¡¡,de exo si la pongo dentro del while es cuando no carga
  #8 (permalink)  
Antiguo 27/02/2012, 09:14
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: escribir los dias que hay entre 2 fechas

No tienes que calcular ninguna diferencia de días, eso lo hace la select. CUando recorres la select dentro del while, hay una clave "diff" que es la que tiene el valor que buscas.
__________________
Fere libenter homines, id quod volunt, credunt.
  #9 (permalink)  
Antiguo 27/02/2012, 09:32
Avatar de xinote  
Fecha de Ingreso: enero-2012
Ubicación: Valladolid, Spain
Mensajes: 78
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: escribir los dias que hay entre 2 fechas

Si wueno pero imagino que habra k asignar el valor "diff" obtenido en la select a una variable para despues poder escribirla en la tabla no???
  #10 (permalink)  
Antiguo 27/02/2012, 09:44
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: escribir los dias que hay entre 2 fechas

$result['diff']
__________________
Fere libenter homines, id quod volunt, credunt.
  #11 (permalink)  
Antiguo 27/02/2012, 11:27
Avatar de xinote  
Fecha de Ingreso: enero-2012
Ubicación: Valladolid, Spain
Mensajes: 78
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: escribir los dias que hay entre 2 fechas

Y en donde se supone que deberia colocar $result['diff'] por que lo puse en la tabla y me da un error concretamente:

Código PHP:
Parse errorsyntax errorunexpected T_ENCAPSED_AND_WHITESPACEexpecting T_STRING or T_VARIABLE or T_NUM_STRING in 
asi es como lo puse

Código PHP:
print "<td> <div align=\"center\"><font color=\"#000000\"><font size=\"1\"><font face=\"Verdana\"></font>$result['diff']</font></div></td>"
  #12 (permalink)  
Antiguo 27/02/2012, 13:55
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: escribir los dias que hay entre 2 fechas

Es que está mal concatenado:
Código PHP:
Ver original
  1. print "<td> <div align=\"center\"><font color=\"#000000\"><font size=\"1\"><font face=\"Verdana\"></font>{$result['diff']}</font></div></td>";
__________________
Fere libenter homines, id quod volunt, credunt.

Etiquetas: dias, formulario, html, mysql, registro, sql
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 15:51.