Foros del Web » Programando para Internet » PHP »

Update de campo segun fecha

Estas en el tema de Update de campo segun fecha en el foro de PHP en Foros del Web. Hola estan?, le cuento a ver si alguien me da una mano, tengo un sistema de usuarios con servicios, cada servicio tiene una fecha de ...
  #1 (permalink)  
Antiguo 28/02/2008, 08:01
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Update de campo segun fecha

Hola estan?, le cuento a ver si alguien me da una mano, tengo un sistema de usuarios con servicios, cada servicio tiene una fecha de vencimiento distinta campo "vencimiento", tengo un codigo que muestra si los servicios vencen o no en los proximos 15 dias, el codigo es el siguiente:

Código:
<?
list($anio,$mes,$dia)=split("-",$row["vencimiento"]);
$vencimiento = date( "Y-m-d", mktime(0,0,0, $mes, $dia-15, $anio)); //15 dias antes del vencimiento
$vencimiento=str_replace("-","",$vencimiento);
$hoy=str_replace("-","",date("Y-m-d"));
if ($hoy <=  $vencimiento){
echo "Servicio sin vencimientos próximos";
} else {
echo "Vencimiento en los próximos 15 días";
}
?>
Funciona perfecto, ahora lo que necesitaria es poner en la index una consulta que me haga un update en el campo "deuda" conviertiendo de "no a "si" si con respecto a hoy faltan 15 dias o menos con respecto a la fecha de vencimiento del servicio, y si faltan mas de 15 dias, que haga el update de "deuda" a "no".
Por que si aplico el codigo siguiente me cambia todos los campos:
Código:
$sql="update servicios set deuda='si'";
$result = mysql_query($sql);
Gracias desde ya.

Última edición por eximer; 28/02/2008 a las 08:08
  #2 (permalink)  
Antiguo 28/02/2008, 09:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Update de campo segun fecha

El problema es que tu en tu update, debes de pasarle el ID del servicio que vas a actualizar, y lo haces con la sintaxis IN:
Código PHP:
$sql="update servicios set deuda='si' WHERE id_servicio IN (1, 2, 3, 4)";
$result mysql_query($sql); 
Así que primero debes de calcular que IDs vas a actualizar a deuda, y después haces el update.

Saludos.
  #3 (permalink)  
Antiguo 28/02/2008, 09:13
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Update de campo segun fecha

Gracias por responder, lo que quiero es actualizar a deuda si de todos los campos, por eso coloque el ejemplo anterior que esta en php para saber como hacer una consulta que selccione todos los campos........ en el where no seria por id...seria por el campo vencimiento que en cada servicio es distinto.
  #4 (permalink)  
Antiguo 28/02/2008, 09:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Update de campo segun fecha

Entonces dependiendo de como se llame tu campo de vencimiento puedes hacerlo así:
Código:
update servicios set deuda='si' WHERE vencimiento >='$vencimiento'
Saludos.
  #5 (permalink)  
Antiguo 28/02/2008, 09:48
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Update de campo segun fecha

Pero como queda el codigo?, en la consulta de donde saco $vencimiento, el campo se llama vencimiento pero no tengo esa variable definida.
Osea quiero que en la index.php haya un codigo similar, pero que haga la consulta y el udpate automaticamente de la deuda, comparando la fecha de vencimiento d ela bd que tiene formato (Y-m-d) con 15 dias a partir d ela fecha actual.
Gracias
  #6 (permalink)  
Antiguo 28/02/2008, 09:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Update de campo segun fecha

Pues tu mismo ya pusiste el código y es el que esta mas arriba, aunque yo lo haría directo en SQL:
Código:
UPDATE `servicios` SET `deuda`='si' WHERE DATE_DIFF( CURDATE(), `vencimiento` ) >= 15
Saludos.
  #7 (permalink)  
Antiguo 28/02/2008, 10:32
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Update de campo segun fecha

Por algun motivo no me cambia bien, me cambia todas las deudas a si, incluso las que estan dentro de los 15 dias, sera que hay que convetir el campo vencimiento quitandole las -
  #8 (permalink)  
Antiguo 28/02/2008, 10:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Update de campo segun fecha

¿Que tipo de campo es vencimiento? Para que DATE_DIFF funcione, el tipo de campo debe de ser DATE, DATETIME o TIMESTAMP.

Saludos.
  #9 (permalink)  
Antiguo 28/02/2008, 10:36
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Update de campo segun fecha

Es DATE con formato 0000-00-00
El tema seria que haga el update a deuda "no" en todos los campos de la tabla si faltan con respecto a hoy mas de 15 dias para la fecha de vencimiento (campo vencimiento) o que ponga deuda si a todos los campos, si faltan menos.
El resultado serian algunos servicios con deudas si y otros con deuda no, segun la fecha de vencimiento.

Última edición por eximer; 28/02/2008 a las 10:42
  #10 (permalink)  
Antiguo 28/02/2008, 10:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Update de campo segun fecha

Ok, el query era incorrecto, prueba así:
Código PHP:
UPDATE `serviciosSET `deuda`='no' WHERE DATE_DIFFCURDATE(), `vencimiento` ) >= 15
UPDATE 
`serviciosSET `deuda`='si' WHERE DATE_DIFFCURDATE(), `vencimiento` ) < 15 
Saludos.
  #11 (permalink)  
Antiguo 28/02/2008, 11:23
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Update de campo segun fecha

Mira te pongo el codigo completo con lo que me dijiste, no me modicifa nada cuando lo ejecuto:

$sql = "SELECT * FROM servicios";
$result = mysql_query($sql);
$sql="UPDATE servicios SET deuda='no' WHERE DATE_DIFF( CURDATE(), 'vencimiento' ) >= 15";
$result = mysql_query($sql);
$sql="UPDATE servicios SET deuda='si' WHERE DATE_DIFF( CURDATE(), 'vencimiento' ) < 15";
$result = mysql_query($sql);
  #12 (permalink)  
Antiguo 28/02/2008, 11:27
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 9 meses
Puntos: 49
Re: Update de campo segun fecha

Prueba asi a ver si hay algun error:

Código PHP:
$sql "SELECT * FROM servicios";
$result mysql_query($sql) or die( mysql_error() );
$sql "UPDATE servicios SET deuda = 'no' WHERE DATE_DIFF( CURDATE(), vencimiento ) >= 15";
$result mysql_query($sql) or die( mysql_error() );
$sql "UPDATE servicios SET deuda = 'si' WHERE DATE_DIFF( CURDATE(), vencimiento ) < 15";
$result mysql_query($sql) or die( mysql_error() ); 
Saludos.
  #13 (permalink)  
Antiguo 28/02/2008, 11:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Update de campo segun fecha

Vencimiento debe de ir con backticks (`) no con comillas simples.

Saludos.
  #14 (permalink)  
Antiguo 28/02/2008, 11:31
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Update de campo segun fecha

Si, me dice:
Algo está equivocado en su sintax cerca '( CURDATE(), vencimiento ) >= 15' en la linea 1
  #15 (permalink)  
Antiguo 28/02/2008, 11:54
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Update de campo segun fecha

Arregle el erro de la siguiente forma:

$sql = "SELECT * FROM servicios";
$result = mysql_query($sql) or die( mysql_error() );
$sql = "UPDATE servicios SET deuda = 'si' WHERE PERIOD_DIFF( CURDATE(), vencimiento ) >= 15";
$result = mysql_query($sql) or die( mysql_error() );
$sql = "UPDATE servicios SET deuda = 'no' WHERE PERIOD_DIFF( CURDATE(), vencimiento ) < 15";
$result = mysql_query($sql) or die( mysql_error() );

Ahora hay un vencimiento que es del 8 de marzo de 2008 (2008-03-08) que deberia ponerla como si y queda como no a la deuda, donde esta el error?, si el 8 de marzo son menos de 15 dias con rescpeto al vencimiento.
  #16 (permalink)  
Antiguo 28/02/2008, 11:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Update de campo segun fecha

La función PERIOD_DIFF calcula la diferencia de meses entre dos fechas, mientras que DATE_DIFF el numero de días.

Saludos.
  #17 (permalink)  
Antiguo 28/02/2008, 11:59
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Update de campo segun fecha

Pero la linea:
$sql = "UPDATE servicios SET deuda = 'si' WHERE PERIOD_DIFF( CURDATE(), vencimiento ) >= 15"; me da error
  #18 (permalink)  
Antiguo 28/02/2008, 12:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Update de campo segun fecha

¿Que versión de MySQL estas usando?

Saludos.
  #19 (permalink)  
Antiguo 28/02/2008, 12:07
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Update de campo segun fecha

La 2.6.1 hay algun sustituto si esa funcion no existe en mi version.
  #20 (permalink)  
Antiguo 28/02/2008, 12:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Update de campo segun fecha

Mmm, estas usando una versión MUY antigua, te recomendaría mínimo actualizar a la versión 4.1, que es la mas vieja pero todavía se mantiene actualizada por MySQL, si te es posible subir a la versión 5 o 5.1, seria lo mejor.

No conozco un substituto mas que entonces haciendo el calculo manualmente en PHP fila por fila.

Saludos.
  #21 (permalink)  
Antiguo 28/02/2008, 12:13
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Update de campo segun fecha

Mmm. probe en subir a mi hosting y tambien me sale un error de sintxis:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( CURDATE(), vencimiento ) >= 15' at line 1

Creo que mi hosting tiene mysql 5 o algo asi, seguro que esta bien esta linea?

$sql = "UPDATE servicios SET deuda = 'si' WHERE DATE_DIFF( CURDATE(), vencimiento ) >= 15";
  #22 (permalink)  
Antiguo 28/02/2008, 12:19
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 1 mes
Puntos: 45
Re: Update de campo segun fecha

DATE_DIFF no existe lo correcto es DATEDIFF
Saludos!
  #23 (permalink)  
Antiguo 28/02/2008, 12:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Update de campo segun fecha

Cierto, creo se me paso a la hora de estar copiando y pegando..

Gracias por ver el error Genetix..
  #24 (permalink)  
Antiguo 28/02/2008, 14:07
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Update de campo segun fecha

Habian consultas que estaban invertidas las comparaciones, asi que la solucion:

$sql = "SELECT * FROM servicios";
$result = mysql_query($sql) or die( mysql_error() );
$sql = "UPDATE servicios SET deuda = 'no' WHERE DATEDIFF(vencimiento, CURDATE()) >= 15";
$result = mysql_query($sql) or die( mysql_error() );
$sql = "UPDATE servicios SET deuda = 'si' WHERE DATEDIFF(vencimiento, CURDATE()) < 15";
$result = mysql_query($sql) or die( mysql_error() );

Funciona!!!! gracias a todos porque yo laburo por prueba y error nomas, asi que me vino muy bien todo lo que fueron comentando.
Saludos.
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 05:54.