Foros del Web » Programando para Internet » PHP »

sistema de Asistencias de un liceo

Estas en el tema de sistema de Asistencias de un liceo en el foro de PHP en Foros del Web. sistema de Asistencias de un liceo(ayuda)...
  #1 (permalink)  
Antiguo 21/01/2012, 22:10
 
Fecha de Ingreso: enero-2012
Ubicación: venezuela
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta sistema de Asistencias de un liceo

sistema de Asistencias de un liceo(ayuda)
  #2 (permalink)  
Antiguo 21/01/2012, 22:18
 
Fecha de Ingreso: enero-2012
Ubicación: venezuela
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: sistema de Asistencias de un liceo

buenas amigos tenfo un problema y es q necesito comparar el registro de entrada y saldida d cualquier personal con su horario para registrar a esa persona si es un retraso, asistente o inasistente... mis dos tablas son:

tabla_asistencia

id_marcaje /fecha / horaE /horaS
aqui va su cedula / aqui la fecha del registro/ hora entrada /hora salida

tabla_horario

id_horario/Elunes/Slunes/Emartes/Smartes/Emiercoles/Smiercoles/Ejueves/Sjueves/Eviernes/Sviernes

el problma es como comparar x medio d php su hora de entrada y salida con su horario q le corresponde cada dia de la semana necesito gran ayuda ya q no he podido solucionar
  #3 (permalink)  
Antiguo 22/01/2012, 00:48
Avatar de ecarlevaro  
Fecha de Ingreso: octubre-2010
Ubicación: Paraná, Argentina
Mensajes: 80
Antigüedad: 13 años, 6 meses
Puntos: 13
Respuesta: sistema de Asistencias de un liceo

¿Cómo están conectadas las tablas horario y asistencia?.
¿En horario para cada trabajador hay un horario distinto (en cuyo caso debiera existir una columna id_marcaje) o los horarios varian para todos los trabajadores por igual en funcion del dia de la semana?
  #4 (permalink)  
Antiguo 22/01/2012, 17:13
 
Fecha de Ingreso: enero-2012
Ubicación: venezuela
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Respuesta: sistema de Asistencias de un liceo

bueno en el id_horario(va la cedula de identidad)
cada persona tiene un horario diferente con un registro de entrada y salida diferente
  #5 (permalink)  
Antiguo 23/01/2012, 14:10
Avatar de ecarlevaro  
Fecha de Ingreso: octubre-2010
Ubicación: Paraná, Argentina
Mensajes: 80
Antigüedad: 13 años, 6 meses
Puntos: 13
Respuesta: sistema de Asistencias de un liceo

Bueno, yo preferiría hacerlo a través de la base de datos, MySQL si es que usas esa base, aunque con esa estructura de tabla que tiene la tabla horario posiblemente no sea tan facil y habría que cambiar la estructura de la tabla. En cualquier caso te podrías pasar por el foro de MySQL, cuentan que hay una serie de genios por allá que pueden obtener cualquier dato de una base de datos.

Pero como dices que lo quieres hacer con PHP, yo empezaría por poder averiguar por cada maestro si llegó tarde o no y despues trabajar en analizar todos los maestros.
En ese caso tendríamos una variables $id que tendría la id del maestro que queremos averiguar como llegó. Para simplificar la exposición supongamos que solamente queremos controlar los horarios de entrada.
Primero hacemos las consultas a la base de datos, de los registros de ese maestro de asistencias y los horarios que les corresponde venir.
Luego convertimos las fechas de los registros de asistencias que nos da MySQL que tipicamente tienen el formato 'YYYY-MM-DD' que PHP los reconoce como cadenas, strings, por lo que no nos permite operar con ellas, a integer, con la funcion strtotime().
Luego con getdate() obtengo una matriz con datos de esa fecha, esa matriz en la clave 'wday' contiene el número de dia de la semana, 0 para domingo y 6 para el sabado.
Una vez que sabemos el dia de la semana que corresponde a esa fecha, nos vamos a la matriz $horarios que tiene los horarios que le corresponden a ese maestro, ya que esta matriz comienza con el 0 para domingo y el 6 para lunes (prestar atencion a la estructura de la consulta SQL).
Finalmente un simple IF que si la hora de entrada es menor a la hora a la que se debió entrar se notifica con 'TARDE'.

Código PHP:
Ver original
  1. <?
  2.  
  3. //Ya conectados con la base de datos
  4.  
  5. //Consulto por las asistencias reales para el id $id
  6. $id = 1;
  7. $consulta = "SELECT fecha,he,hs FROM registro WHERE id='$id'";
  8. $resultadoR = mysqli_query($enlace,$consulta);
  9. //Consulto por los horarios correspondientes para ese maestro (devuelve una sola fila de resultados)
  10. $consulta = "SELECT de,le,me FROM horarios WHERE id='1' LIMIT 1";
  11. $resultadoH = mysqli_query($enlace,$consulta);
  12. //Recupero ese resultado en una matriz numérica desde 0 hasta 6 (los 7 dias de la semana) llamada $horario
  13. $horario = mysqli_fetch_row($resultadoH);
  14.  
  15. //Maqueto un poco con HTML
  16. echo '<p>Asistencias de maestros</p>
  17. <table>
  18. <tr>
  19. <th>Fecha</th>
  20.     <th>Entrada observada</th>
  21.     <th>Entrada correspondida</th>
  22.     <th>ESTADO</th>
  23. </tr>';
  24.  
  25. //Recorro los resultados del registro de asistencias con un while y guardando en $fila el resutlado
  26. while ($fila = mysqli_fetch_array($resultadoR))
  27. {
  28.  //Convierto la cadena (string) que me devuelve MySQL de tipo '2012-23-01' a una de tipo integer que pueda manejar con las funciones de fecha y hora de PHP
  29.  $fila['fecha'] = strtotime($fila['fecha']);
  30.     //Obtengo una matriz con informacion sobre esa fecha, me interesa la clave 'wday' que me da el dia de la semana comenzando por el 0 para el domingo y el 6 para el sabado
  31.     $dia = getdate($fila['fecha']);
  32.     echo "
  33.     <tr>
  34.      <td>". date('d-n-Y',$fila['fecha']). "</td>
  35.         <td>{$fila['he']}</td>
  36.         <td>{$horario[$dia['wday']]}</td>
  37.         <td>";
  38.     if ($horario[$dia['wday']] < $fila['he'])
  39.     {
  40.      echo '<b>TARDE</b>';
  41.     }
  42.     else
  43.     {
  44.      echo 'Bien';
  45.     }
  46.     echo '</td>
  47.     </tr>';
  48. }
  49. echo '</table>';
  50.  
  51. ?>
  #6 (permalink)  
Antiguo 23/01/2012, 20:23
 
Fecha de Ingreso: enero-2012
Ubicación: venezuela
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Respuesta: sistema de Asistencias de un liceo

amigo estuve probando tu codigo q me pasastes pero no me corre claro le conecta la base de datos y nada, hasta correg.. unas funciones mal escrita como mysqli y es mysql y aun asi nada hasta le puse <?php x el <? y nada
  #7 (permalink)  
Antiguo 24/01/2012, 07:16
Avatar de ecarlevaro  
Fecha de Ingreso: octubre-2010
Ubicación: Paraná, Argentina
Mensajes: 80
Antigüedad: 13 años, 6 meses
Puntos: 13
Respuesta: sistema de Asistencias de un liceo

mysql es una extensión para bases de datos algo vieja ya, te recomiendo usar mysqli que las funciones tienen el mismo nombre, pero los argumentos NO SON los mismos, hay pequeños cambios en el orden en que se pasan los argumentos.

Si vas a usar la extensión mysql modifica el código para que pases los argumentos correctos, si vas a usar mysqli solo deja el código como está, solo asegúrate de tener la extensión mysqli (viene por default en PHP >= 5.0. Si usas MySQL version >4.1.3 es altamente recomendable que uses la extensión mysqli.
  #8 (permalink)  
Antiguo 24/01/2012, 21:01
 
Fecha de Ingreso: enero-2012
Ubicación: venezuela
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: sistema de Asistencias de un liceo

no hermano ya modifiq el codigo y asi tal cual lo hicistes y nada x eso t pregunto q si tu mismo lo probastes xq me da error
  #9 (permalink)  
Antiguo 24/01/2012, 22:01
 
Fecha de Ingreso: enero-2012
Ubicación: venezuela
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: sistema de Asistencias de un liceo

ayudame un poco mas en esto yo ya capte la idea d la logica d tu codigo pero no me da el codigo, cree las bases d datos , la conexion y nada.. pruebalo tu completo a ver si te da amigo
  #10 (permalink)  
Antiguo 24/01/2012, 22:22
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: sistema de Asistencias de un liceo

jeje, Si las tablas no existen en tu base de datos lo más lógico es que no te funcione el script que te han hecho. Mejor intenta hacerlo tu mismo
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.

Última edición por GatorV; 25/01/2012 a las 10:46
  #11 (permalink)  
Antiguo 25/01/2012, 06:40
Avatar de ecarlevaro  
Fecha de Ingreso: octubre-2010
Ubicación: Paraná, Argentina
Mensajes: 80
Antigüedad: 13 años, 6 meses
Puntos: 13
Respuesta: sistema de Asistencias de un liceo

@edwardrealmadrid88 sí, lo probé, lo estoy viendo en funcionamiento en ahora mismo sobre PHP 5.2.

Ten en cuenta lo que te dice @iovan, los nombres de las tablas de MySQL y la estructura de la tabla deben ser las mismas. En otro caso, modifica las consultas SELECT, donde dice FROM coloca el nombre de la tabla que corresponda y lo mismo para los nombres de campo.

Además supongo que las fechas en la tabla asistencia es un campo MySQL de tipo DATE (típicamente con formato "YYYY-MM-DD", y las horas de tipo TIME tipicamente con formato "HH:MM:SS".

Y si quieres que te ayudemos, DEBERÍAS como mínimo pasar bien el error que dice tirarte...
  #12 (permalink)  
Antiguo 28/01/2012, 11:36
 
Fecha de Ingreso: enero-2012
Ubicación: venezuela
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Respuesta: sistema de Asistencias de un liceo

amigo estuve viendo el codigo y acomodandolo y asi lo acomode yo estoy es trabajando con:

MySQL
Servidor: localhost via TCP/IP
Versión del servidor: 5.1.30-community
Versión del protocolo: 10
Usuario: root@localhost
Juegos de caracteres de MySQL: UTF-8 Unicode (utf8)

Servidor web
Apache/2.2.21 (Win32) DAV/2 mod_ssl/2.2.21 OpenSSL/1.0.0e mod_autoindex_color PHP/5.2.8
Versión del cliente: 5.1.30
extensión PHP: mysql

phpMyAdmin
Acerca de esta versión: 3.1.1

la tabla de la base de datos es la siguiente:

Código MySQL:
Ver original
  1. -- phpMyAdmin SQL Dump
  2. -- version 3.1.1
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- Servidor: localhost
  6. -- Tiempo de generación: 28-01-2012 a las 17:31:12
  7. -- Versión del servidor: 5.1.30
  8. -- Versión de PHP: 5.2.8
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11.  
  12. --
  13. -- Base de datos: `asistencia`
  14. --
  15.  
  16. -- --------------------------------------------------------
  17.  
  18. --
  19. -- Estructura de tabla para la tabla `horarios`
  20. --
  21.  
  22. CREATE TABLE IF NOT EXISTS `horarios` (
  23.   `id` int(11) NOT NULL,
  24.   `de` time NOT NULL,
  25.   `le` time NOT NULL,
  26.   `me` time NOT NULL,
  27.   `mie` time NOT NULL,
  28.   `je` time NOT NULL,
  29.   `ve` time NOT NULL,
  30.   `se` time NOT NULL,
  31.   PRIMARY KEY (`id`)
  32. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  33.  
  34. --
  35. -- Volcar la base de datos para la tabla `horarios`
  36. --
  37.  
  38. INSERT INTO `horarios` (`id`, `de`, `le`, `me`, `mie`, `je`, `ve`, `se`) VALUES
  39. (1, '07:00:00', '08:00:00', '09:00:00', '10:00:00', '13:00:00', '15:00:00', '16:00:00');
  40.  
  41. -- --------------------------------------------------------
  42.  
  43. --
  44. -- Estructura de tabla para la tabla `registro`
  45. --
  46.  
  47. CREATE TABLE IF NOT EXISTS `registro` (
  48.   `id` int(11) NOT NULL,
  49.   `fecha` date NOT NULL,
  50.   `he` time NOT NULL,
  51.   `hs` time NOT NULL,
  52.   PRIMARY KEY (`id`)
  53. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  54.  
  55. --
  56. -- Volcar la base de datos para la tabla `registro`
  57. --
  58.  
  59. INSERT INTO `registro` (`id`, `fecha`, `he`, `hs`) VALUES
  60. (1, '2012-01-22', '07:00:00', '12:00:00');


y el la asistencia.php es la siguiente

Código PHP:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5. <title>Documento sin t&iacute;tulo</title>
  6. </head>
  7.  
  8. <body>
  9.  
  10. <?php
  11. //conexion con el servidor
  12. $conexion=mysql_connect("localhost","root","") or die("No Se Puede Conectar");
  13. //selecccion de la base de datos
  14. mysql_select_db("asistencia",$conexion) or die("No Hay Base de Datos Seleccionada.");
  15. //Consulto por las asistencias reales para el id $id
  16. $consulta="SELECT fecha,he,hs FROM registro WHERE id='1'";
  17. $resultadoR=mysql_query($consulta,$conexion);
  18. //Consulto por los horarios correspondientes para ese maestro (devuelve una sola fila de resultados)
  19. $consulta1="SELECT de,le,me,mie,je,ve,se FROM horarios WHERE id='1' ";
  20. $resultadoH=mysql_query($consulta1,$conexion);
  21. //Recupero ese resultado en una matriz numérica desde 0 hasta 6 (los 7 dias de la semana) llamada $horario
  22. $horario=mysql_fetch_row($resultadoH);
  23.          
  24.            
  25. ?>
  26. *
  27. <p>Asistencias de maestros</p>
  28. <table border="1">
  29. <tr>
  30.     <th>Fecha</th>
  31. * * <th>Entrada observada</th>
  32. * * <th>Entrada correspondida</th>
  33. * * <th>ESTADO</th>
  34. </tr>
  35.  
  36. <?php
  37.  
  38. while($fila=mysql_fetch_array($resultadoR)){
  39.  
  40. $fila["fecha"]=strtotime($fila["fecha"]);
  41. $dia=getdate($fila["fecha"]);
  42.  
  43. if ($horario[$dia['wday']] < $fila['he'])
  44.     {
  45.      $mensaje="TARDE";
  46.     }
  47.     else
  48.     {
  49.      $mensaje="Bien";
  50.     }
  51. ?>
  52. *
  53. <tr>
  54.   <th><?php $fila["fecha"] ?></th>
  55.   <th><?php $fila["he"] ?></th>
  56.   <th><?php $horario[$dia["wday"]] ?></th>
  57.   <th><?php $mensaje ?></th>
  58. </tr>
  59. </table>
  60.  
  61. <?php
  62. }
  63. ?>
  64.  
  65. *
  66.  
  67. </body>
  68. </html>

solo me muestra la tabla sin los valores aun estoy intentando pero nada de nada... alguna mano??? creo q es una tonteria lo q me hace falta
  #13 (permalink)  
Antiguo 28/01/2012, 12:02
Avatar de ecarlevaro  
Fecha de Ingreso: octubre-2010
Ubicación: Paraná, Argentina
Mensajes: 80
Antigüedad: 13 años, 6 meses
Puntos: 13
Respuesta: sistema de Asistencias de un liceo

Vamos por partes.

Añade un print_r antes del while y dentro del while para que te quede así:

Código PHP:
Ver original
  1. <?php
  2.  
  3. [B]print_r($horario);[/B]
  4.  
  5. while($fila=mysql_fetch_array($resultadoR)){
  6.  
  7. [B]print_r($fila);[/B]
  8.  
  9. $fila["fecha"]=strtotime($fila["fecha"]);
  10. $dia=getdate($fila["fecha"]);
  11.  
  12. if ($horario[$dia['wday']] < $fila['he'])
  13.     {
  14.      $mensaje="TARDE";
  15.     }
  16.     else
  17.     {
  18.      $mensaje="Bien";
  19.     }
  20. ?>

Y comenta que es lo que te imprime en pantalla.
  #14 (permalink)  
Antiguo 28/01/2012, 12:29
 
Fecha de Ingreso: enero-2012
Ubicación: venezuela
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: sistema de Asistencias de un liceo

esto es antes delk WHILE
Array ( [0] => 07:00:00 [1] => 08:00:00 [2] => 09:00:00 [3] => 10:00:00 [4] => 13:00:00 [5] => 15:00:00 [6] => 16:00:00 )

y esto es despues del WHILE
Array ( [0] => 2012-01-22 [fecha] => 2012-01-22 [1] => 07:00:00 [he] => 07:00:00 [2] => 12:00:00 [hs] => 12:00:00 )
  #15 (permalink)  
Antiguo 28/01/2012, 13:04
Avatar de ecarlevaro  
Fecha de Ingreso: octubre-2010
Ubicación: Paraná, Argentina
Mensajes: 80
Antigüedad: 13 años, 6 meses
Puntos: 13
Respuesta: sistema de Asistencias de un liceo

¡Claro que es una tonteria! Y no lo notamos antes.

¡Olvidaste los echo!.

Código PHP:
Ver original
  1. <tr>
  2.   <th><?php $fila["fecha"] ?></th>
  3.   <th><?php $fila["he"] ?></th>
  4.   <th><?php $horario[$dia["wday"]] ?></th>
  5.   <th><?php $mensaje ?></th>
  6. </tr>
  7. </table>

¿donde ves un " echo $mensaje "?.

Eso pasa por mezclar HTML y PHP. Si quieres mezclar HTML y PHP, por lo menos programa todo en PHP y evita estar abriendo <?php y cerrando con ?> pues es muy ineficiente del lado del servidor.
Escribe todo en PHP y las salidas que quieras dar con HTML las das con echo "<html>".
  #16 (permalink)  
Antiguo 28/01/2012, 13:14
 
Fecha de Ingreso: enero-2012
Ubicación: venezuela
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: sistema de Asistencias de un liceo

jajajajajajjajaj el bendito echo jajajaajajaj y si tienes razon lo de no mezclar ... ya me imprimio la tabla ahora en base a ese codigo q m funciona tengo q implantarlo en otro codigo q tngo q me registra la asistencia de entrada y salida y luego con este mismo codigo emplearlo para los horarios de salidas ya q este me validad si la entrada es bien o tarde de acuerdo a su horario
  #17 (permalink)  
Antiguo 10/02/2012, 19:48
 
Fecha de Ingreso: enero-2012
Ubicación: venezuela
Mensajes: 19
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Respuesta: sistema de Asistencias de un liceo

buenas tengo una duda sera que esto se puede hacer? o hay alguna forma de hacerlo ? es q no me da
Código PHP:
Ver original
  1. $hora_total=mysql_fetch_row($reult);
  2. while($fila=mysql_fetch_array($reult2)){
  3.  
  4. $fecha=strtotime($fila["fecha"]);
  5. $dia=getdate($fecha);
  6. $wday=$dia["wday"];
  7.  
  8. $h_total=array('1'=>'$hora_toral[1]','2'=>'$hora_total[2]','3'=>'$hora_total[3]','4'=>'$hora_total[4]','5'=>'$hora_total[5]');
  9.  
  10. <?php echo $h_total[$wday] ?>
  11.  
  12. }
  13.  
  14. $hora_total hago es un array numero trayendo me sus valores con sus indices numericos esto lo hago para solo trerme los dias, lunes, martes, miercoles, jueves y viernes cada uno d ellos tiene almacenado horas totales... ok ahora con esos valores formo un nuevo array para poder imprimir con el wday el dia actual y con eso traerme el dia del array numero las horas totales osea ejemplo si es lunes es el '1' de acuerdo al getdate('w') y q ese 1 se posicione en el array $h_total en la posicion 1 que seria $hora_total[1] no se pero no me da creo q no es la forma q se debe hacer pero fue lo unico q se me ocurrio esto lo hago xq no kiero tomar el sabado=6 y el domingo=o en mi listado si me pueden ayudar se los agradeceria

Etiquetas: sistema
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 02:54.