Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Resta con variables tipo time no inserta resultados desde php a mysql

Estas en el tema de Resta con variables tipo time no inserta resultados desde php a mysql en el foro de PHP en Foros del Web. Muy buen día, soy nuevo en "Foros del Web". Este es mi primer tema, si estoy haciéndolo mal, por favor oriéntenme. Estoy haciendo una base ...
  #1 (permalink)  
Antiguo 21/08/2012, 10:42
Avatar de boggiepopphantom  
Fecha de Ingreso: agosto-2012
Mensajes: 29
Antigüedad: 11 años, 8 meses
Puntos: 0
Resta con variables tipo time no inserta resultados desde php a mysql

Muy buen día, soy nuevo en "Foros del Web". Este es mi primer tema, si estoy haciéndolo mal, por favor oriéntenme.

Estoy haciendo una base de datos para registrar tiempos; se me ocurrió hacer dos tablas: en la primera registro los tiempos en orden, donde el primer tiempo es el tiempo de salida y, a partir del segundo, son los tiempos de llegada. Mi intención luego es mediante un formulario php, hacer las restas de los tiempos con el primer tiempo, e insertar la diferencia en una segunda tabla, pero que lo inserte en el registro que yo le indique desde el formulario.

Lo de la primera tabla me ha ido sin problema, me guarda los tiempos sin líos, en una variable tipo time; he aquí el código:


Código PHP:
$conexion=mysql_connect("servidor","usuario","password") or die("MySql Error"); 
mysql_select_db("DB",$conexion) or die("database selection error"); 
function 
send_time(){
mysql_query('insert into tabla1 (pos,tiempo) values (NULL,curtime())');

Para lo de la segunda tabla, procuré la siguiente consulta, definiendo previamente las variables position y num con POST, a partir de dos valores que se ingresan en el formulario, pero no hace nada:

Código PHP:
function insert_time($position,$num){
$conexion=mysql_connect("servidor","usuario","password") or die("MySql Error"); 
mysql_select_db("DB",$conexion) or die("database selection error"); 
//Buscamos el campo que registra el tiempo de inicio
$largada=mysql_query('SELECT * FROM tabla1 WHERE pos="1"');
$lar=mysql_fetch_array($largada);
$tin=$lar["tiempo"];//Este es el tiempo de inicio
$row=mysql_query('SELECT * FROM tabla1 WHERE pos=$position');
$tpar=mysql_fetch_array($row);
$pos=$tpar["tiempo"];//Este es el tiempo del participante
$timedif=SUBTIME($pos,$tin);//Esto determina el tiempo que emplea
mysql_query('UPDATE tabla2 SET tc=$timedif WHERE num=$num');

Cuando ingreso los valores en el formulario, la página se actualiza como si aplicara la fórmula, pero al revisar la tabla en phpmyadmin, el campo en el que debería haber guardado la diferencia de tiempos, aparece NULL. No se si el problema es el manejo de las variables de tiempo, o del fetch_array; agradecería por favor me indiquen una manera de solucionar mi problema.

De antemano muchas gracias

Atte
Boggiepopphantom
  #2 (permalink)  
Antiguo 21/08/2012, 10:54
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Resta con variables tipo time no inserta resultados desde php a mysql

acostumbra siempre ha depurar la consultas
Código PHP:
Ver original
  1. mysql_query(/*tu consulta*/) or die(mysql_error());

si embargo es bueno que veas esto http://www.forosdelweb.com/f18/anunc...ecada-1008145/, como vez mysql_* esta tendiendo a desaparecer.

Ahora tu consulta
Código php:
Ver original
  1. UPDATE tabla2 SET tc='$timedif' WHERE num=$num
fijate que si es un campo date debería ir entre comillas, pero ve si te da un error de depuración, otra cosa la funcion SUBTIME que te devuelve?? o que tienes declarado en ella??
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 21/08/2012, 10:55
 
Fecha de Ingreso: agosto-2012
Mensajes: 4
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: Resta con variables tipo time no inserta resultados desde php a mysql

hola creo entender tu problema y es en la sintaxis de mysql

Cita:
function insert_time($position,$num){
$conexion=mysql_connect("servidor","usuario","pass word") or die("MySql Error");
mysql_select_db("DB",$conexion) or die("database selection error");
//Buscamos el campo que registra el tiempo de inicio
$largada=mysql_query('SELECT * FROM tabla1 WHERE pos="1"');
$lar=mysql_fetch_array($largada);
$tin=$lar["tiempo"];//Este es el tiempo de inicio
$row=mysql_query('SELECT * FROM tabla1 WHERE pos=$position');
$tpar=mysql_fetch_array($row);
$pos=$tpar["tiempo"];//Este es el tiempo del participante
$timedif=SUBTIME($pos,$tin);//Esto determina el tiempo que emplea
mysql_query('UPDATE tabla2 SET tc=$timedif WHERE num=$num');
si te fijas en tus consultas

$row=mysql_query('SELECT * FROM tabla1 WHERE pos=$position');

y

mysql_query('UPDATE tabla2 SET tc=$timedif WHERE num=$num');

estas usando la sinataxys de STring con comilla simple ' ' eso toma lo que sea que tengas como un string puro de esa manera el php nunca traduce tus variables $position y $num pudieras cambiar simplemente a comillas simples pero te recomiendo la sintaxis de concatenacion


Cita:
function insert_time($position,$num){
$conexion=mysql_connect("servidor","usuario","pass word") or die("MySql Error");
mysql_select_db("DB",$conexion) or die("database selection error");
//Buscamos el campo que registra el tiempo de inicio
$largada=mysql_query('SELECT * FROM tabla1 WHERE pos="1"');
$lar=mysql_fetch_array($largada);
$tin=$lar["tiempo"];//Este es el tiempo de inicio
$row=mysql_query('SELECT * FROM tabla1 WHERE pos='.$position.'');
$tpar=mysql_fetch_array($row);
$pos=$tpar["tiempo"];//Este es el tiempo del participante
$timedif=SUBTIME($pos,$tin);//Esto determina el tiempo que emplea
mysql_query('UPDATE tabla2 SET tc=$timedif WHERE num='.$num.'');
nota:
no se si ese codigo lo ejecutes todo en el metodo insert_time() pero si es asi te recomiendo sacar la conexion de la BD de ahi y separar las consultas de esa manera tienes mas limpio tu codigo y es ams facil depurarlo

saludos y espero certe de ayuda, si no es asi aqui segire para ayudarte
animo ;)
  #4 (permalink)  
Antiguo 22/08/2012, 00:41
Avatar de boggiepopphantom  
Fecha de Ingreso: agosto-2012
Mensajes: 29
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Resta con variables tipo time no inserta resultados desde php a mysql

Cita:
Iniciado por carlos_belisario Ver Mensaje
acostumbra siempre ha depurar la consultas
Código PHP:
Ver original
  1. mysql_query(/*tu consulta*/) or die(mysql_error());

si embargo es bueno que veas esto [url]http://www.forosdelweb.com/f18/anuncio-extension-mysql-ha-sido-deprecada-1008145/[/url], como vez mysql_* esta tendiendo a desaparecer.

Ahora tu consulta
Código php:
Ver original
  1. UPDATE tabla2 SET tc='$timedif' WHERE num=$num
fijate que si es un campo date debería ir entre comillas, pero ve si te da un error de depuración, otra cosa la funcion SUBTIME que te devuelve?? o que tienes declarado en ella??

Hola carlos_belisario, gracias por tu pronta respuesta. Respecto del link, lo reviso mañana, pues creo que debo actualizar mi versión de php de xamp, gracias por le dato.

De momento, no he modificado el mysql pero, siguiendo tu consejo, no me sirvió lo de las dobles comillas, ni colocando comillas simples y punto; siguiendo el consejo tuyo y de luinix, hice algunas modificaciones, pero no puedo determinar si son útiles. Las agrego a continuación:
Código PHP:
<?php
$position
=$_POST['position'];
$numpart=$_POST['numpart'];
$conexion=mysql_connect("servidor","usuario","password") or die("MySql Error"); 
mysql_select_db("ranking",$conexion) or die("database selection error"); 
function 
send_time(){
mysql_query('insert into position (pos,tiempo) values (NULL,curtime())') or die(mysql_error());
}
function 
insert_time($position,$numpart){
//Buscamos el campo que registra el tiempo de largada de carrera
$largada=mysql_query('SELECT * FROM position WHERE pos=="1"') or die("Largada");
$lar=mysql_fetch_array($largada);
$tin=$lar["tiempo"];//Este es el tiempo de inicio de la carrera
$row=mysql_query('SELECT * FROM position WHERE pos='.$position.'') or die("row");
$tpar=mysql_fetch_array($row);
$pos=$tpar["tiempo"];//Este es el tiempo del participante
$timedif=$pos-$tin;//Esto determina el tiempo que emplea
mysql_query('UPDATE racers SET tc='.$timedif.' WHERE numpart='.$numpart.'') or die("timedif");
}
?>
Respecto de la pregunta en el subdif, pues la usaba con la esperanza que me restara los dos tiempos, pero nada. El asunto es que no me bota error.

No se si, al hacer resta de dos tiempos, el resultado no sea algo que pueda guardarse en un campo de tipo tiempo. No se que hacer, ¿Quéme sugieren?
  #5 (permalink)  
Antiguo 22/08/2012, 00:51
Avatar de boggiepopphantom  
Fecha de Ingreso: agosto-2012
Mensajes: 29
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Resta con variables tipo time no inserta resultados desde php a mysql

Cita:
Iniciado por luinix Ver Mensaje
hola creo entender tu problema y es en la sintaxis de mysql



si te fijas en tus consultas

$row=mysql_query('SELECT * FROM tabla1 WHERE pos=$position');

y

mysql_query('UPDATE tabla2 SET tc=$timedif WHERE num=$num');

estas usando la sinataxys de STring con comilla simple ' ' eso toma lo que sea que tengas como un string puro de esa manera el php nunca traduce tus variables $position y $num pudieras cambiar simplemente a comillas simples pero te recomiendo la sintaxis de concatenacion




nota:
no se si ese codigo lo ejecutes todo en el metodo insert_time() pero si es asi te recomiendo sacar la conexion de la BD de ahi y separar las consultas de esa manera tienes mas limpio tu codigo y es ams facil depurarlo

saludos y espero certe de ayuda, si no es asi aqui segire para ayudarte
animo ;)

Hola luinix, gracias por tu pronta respuesta; hice los siguientes cambios al código, pero no me resulta lo que necesito; el asunto, como comentaba en la respuesta de carlos_belisario, es que no me bota error; ingreso los datos en la variable position y numpart en el formulario, pero nada, no hace nada, ni envía error, ni nada.

La idea es que en la primera tabla, llamada position, se guardan los tiempo, luego trato de restar los tiempos con el tiempo "1" en la función insert_time, y esa resta guardarla en una segunda tabla, llamada racers, en el campo correspondiente al participante con el número que yo indique en la variable numpart. Los cambios quedaron como:

Código PHP:
$position=$_POST['position'];
$numpart=$_POST['numpart'];
$conexion=mysql_connect("localhost","root") or die("MySql Error"); 
mysql_select_db("ranking",$conexion) or die("database selection error"); 
function 
send_time(){
mysql_query('insert into position (pos,tiempo) values (NULL,curtime())') or die(mysql_error());
}
function 
insert_time($position,$numpart){
//Buscamos el campo que registra el tiempo de largada de carrera
$largada=mysql_query('SELECT * FROM position WHERE pos=="1"') or die("Largada");
$lar=mysql_fetch_array($largada);
$tin=$lar["tiempo"];//Este es el tiempo de inicio de la carrera
$row=mysql_query('SELECT * FROM position WHERE pos='.$position.'') or die("row");
$tpar=mysql_fetch_array($row);
$pos=$tpar["tiempo"];//Este es el tiempo del participante
$timedif=$pos-$tin;//Esto determina el tiempo que emplea
mysql_query('UPDATE racers SET tc='.$timedif.' WHERE numpart='.$numpart.'') or die("timedif"); 
¿Alguna sugerencia? Gracias a todos!

PD: ¿Me podrias recomendar un enlace para leer acerca de sintaxis de concatenación? Creo que no tengo muy claro el asunto, y no se si lo hice bien en las modificaciones. Si lo hice mal, por favor oriéntenme. De antemano gracias!
  #6 (permalink)  
Antiguo 22/08/2012, 00:53
Avatar de boggiepopphantom  
Fecha de Ingreso: agosto-2012
Mensajes: 29
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Resta con variables tipo time no inserta resultados desde php a mysql

Cita:
Iniciado por boggiepopphantom Ver Mensaje
Hola carlos_belisario, gracias por tu pronta respuesta. Respecto del link, lo reviso mañana, pues creo que debo actualizar mi versión de php de xamp, gracias por le dato.

De momento, no he modificado el mysql pero, siguiendo tu consejo, no me sirvió lo de las dobles comillas, ni colocando comillas simples y punto; siguiendo el consejo tuyo y de luinix, hice algunas modificaciones, pero no puedo determinar si son útiles. Las agrego a continuación:
Código PHP:
<?php
$position
=$_POST['position'];
$numpart=$_POST['numpart'];
$conexion=mysql_connect("servidor","usuario","password") or die("MySql Error"); 
mysql_select_db("ranking",$conexion) or die("database selection error"); 
function 
send_time(){
mysql_query('insert into position (pos,tiempo) values (NULL,curtime())') or die(mysql_error());
}
function 
insert_time($position,$numpart){
//Buscamos el campo que registra el tiempo de largada de carrera
$largada=mysql_query('SELECT * FROM position WHERE pos=="1"') or die("Largada");
$lar=mysql_fetch_array($largada);
$tin=$lar["tiempo"];//Este es el tiempo de inicio de la carrera
$row=mysql_query('SELECT * FROM position WHERE pos='.$position.'') or die("row");
$tpar=mysql_fetch_array($row);
$pos=$tpar["tiempo"];//Este es el tiempo del participante
$timedif=$pos-$tin;//Esto determina el tiempo que emplea
mysql_query('UPDATE racers SET tc='.$timedif.' WHERE numpart='.$numpart.'') or die("timedif");
}
?>
Respecto de la pregunta en el subdif, pues la usaba con la esperanza que me restara los dos tiempos, pero nada. El asunto es que no me bota error.

No se si, al hacer resta de dos tiempos, el resultado no sea algo que pueda guardarse en un campo de tipo tiempo. No se que hacer, ¿Quéme sugieren?
Por cierto, los campos a modificar son de tipo tiempo en la base de datos. Gracias!
  #7 (permalink)  
Antiguo 24/08/2012, 18:46
Avatar de boggiepopphantom  
Fecha de Ingreso: agosto-2012
Mensajes: 29
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Resta con variables tipo time no inserta resultados desde php a mysql

Buen día a todos, les cuento que seguí sus consejos, y pues el problema estaba en cuestiones como cambiar comillas simples por dobles, y utilizar mysql_fetch_row en vez de array. Muchas gracias por sus sugerencias. Y esteré molestando cuando los necesite, jajajaja Un Saludo

Atte
Boggiepopphantom

Etiquetas: formulario, mysql, registro, resta, sql, tabla, variables, usuarios
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:03.