Foros del Web » Programando para Internet » PHP »

marcacion mediante DNI

Estas en el tema de marcacion mediante DNI en el foro de PHP en Foros del Web. Estimado compañeros soy nuevo aqui y en esto de php y quisiera que me den una manito respecto un programilla que estoy haciendo para que ...
  #1 (permalink)  
Antiguo 13/07/2009, 11:04
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 10 años, 4 meses
Puntos: 0
marcacion mediante DNI

Estimado compañeros soy nuevo aqui y en esto de php y quisiera que me den una manito respecto un programilla que estoy haciendo para que se marque la entrada y salida del personal tengo dos tb:
tb control
idcontrol
cirun
fecha
hora

tb empleados
idempleados
apellidos
nombres
cirun
f_ingreso

tengo este codigo hasta ahurita me inserta el cirun la fecha y la hora en la tb control pero lo que no puedo es que al insertar el cirun primero me lo compare en la tb empleados y luego lo inserte en la tb control toda vez que tengo que verificar si el cirun esta bien escrito.

<?PHP
//declaraciones de variables
$base="ces";
$tabla="control";
$tabla1="empleado";
$v1=$_POST['cirun'];
$v2=$_POST['fecha'];
$v3=$_POST['hora'];

// conexion base de datos
$conexion=mysql_connect("localhost","root","123456 " );
mysql_select_db($base,$conexion);

// insertar datos a la tabla control
mysql_query("INSERT INTO $tabla (cirun, fecha, hora) VALUES ('$v1', '$v2', '$v3');", $conexion);
if (mysql_errno($conexion)==0){echo "<h2><CENTER></CENTER></b></H2>";
}else{
if (mysql_errno($conexion)==1062){echo "<h2>Marcacion Incorrecta<br></h2>";
}else{
$numerror=mysql_errno($conexion);
$descrerror=mysql_error($conexion);
echo "Se ha producido un error nº $numerror que corresponde a: $descrerror <br>";
}

}
//cierre de la conexion
mysql_close();
?>

y este codigo inserta la fecha y hora
<?php //insertar fecha de manera automatica
$fecha = time ();
$f_ing_insert = date ( "Y-m-d h:i:s" , $fecha );
$hora = time ();
$h_ing_insert = time ( "h:i:s" , $hora );
?>
<input type="hidden" name="fecha" value=<?php echo "'".$f_ing_insert."'";?> />
<input type="hidden" name="hora" value=<?php echo "'".$h_ing_insert."'";?> />

nose si me deje entender y le agradesco por anticipado la ayuda gracias...

Última edición por pedroca; 13/07/2009 a las 14:01
  #2 (permalink)  
Antiguo 13/07/2009, 12:08
Avatar de halt  
Fecha de Ingreso: junio-2009
Ubicación: Barcelona
Mensajes: 27
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: marcacion mediante DNI

Pues en esta linea, al final añade lo que te e puesto:

Código PHP:
mysql_query("INSERT INTO $tabla (cirun, fecha, hora) VALUES ('$v1', '$v2', '$v3') where cirun='$v1'"$conexion); 
y si no es asi, prueba con esto otro

Código PHP:
mysql_query("INSERT INTO $tabla (cirun, fecha, hora) VALUES ('$v1', '$v2', '$v3') where $tabla.cirun='$v1'"$conexion); 
  #3 (permalink)  
Antiguo 13/07/2009, 14:01
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: marcacion mediante DNI

me sale este error: Se ha producido un error nº 1064 que corresponde a: 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 'where cirun=''' at line 1

sabes creoq ue me explique mal anteriormente la comprobacion del cirun tiene que hacerlo en la tabla empleados y la insercion del cirun se hace en la tabla control la comprobacion es solo para que no escriban burreras y introduscan su cirun correcto.

gracias por la ayuda ...
Saludos,
  #4 (permalink)  
Antiguo 13/07/2009, 16:20
Avatar de anf
anf
 
Fecha de Ingreso: junio-2009
Mensajes: 30
Antigüedad: 10 años, 5 meses
Puntos: 4
De acuerdo Respuesta: marcacion mediante DNI

Demasiado código:

Código PHP:
<?php //insertar fecha de manera automatica
$fecha time ();
$f_ing_insert date "Y-m-d h:i:s" $fecha );
$hora time ();
$h_ing_insert time "h:i:s" $hora );
?>
<input type="hidden" name="fecha" value=<?php echo "'".$f_ing_insert."'";?> />
<input type="hidden" name="hora" value=<?php echo "'".$h_ing_insert."'";?>
Mejor:

Código:
<input type="hidden" name="fecha" value=<?=date("Y-m-d h:i:s")?> />
<input type="hidden" name="hora" value=<?=date("h:i:s")?> />
date(); asume por defecto time(); salvo le especifiques otro unix-timestamp. Aunque por otro lado es tontería poner en un formulario datos de tiempo, ya que la hora que saldrá sera la hora exacta en la que el usuario cargo la página, y no la hora que ingreso en el sistema, pudiendo dar datos imprecisos si se quiere tener un control exacto.

Es mejor que uses en la sentencia SQL el ' " . date("tu formato de fecha") . " ' para tomar el valor en el momento preciso de loggeo.

<? ?> es igual que <?php ?>, <?="blah"?> es igual que <? echo "bleh"; ?> y que <? print "blih"; ?>

En cuanto a lo que necesitas, primero debes hacer un SELECT:

Código PHP:
if ($link mysql_connect("localhost","user","pass")) {
    
$sql "SELECT * FROM tabla_usuarios WHERE campo1='criterio1' AND campo2='criterio2'";
    
$rows mysql_affected_rows(mysql_db_query("base_de_datos",$sql));
    if (
$rows) {
        
$sql "INSERT INTO tabla_control (dato1,dato2,dato3) VALUES (' " $var1 " ',' " $var2 " ',' " $var3 " ')";
        
mysql_db_query("base_de_datos",$sql);
    } else { 
/* han metido mal los datos, manda un error o el formulario de nuevo*/ }
} else { die(
"Imposible conectar con la base de datos."); } 
Una vez coincidan los datos que necesites verificar procedes a insertar lo que quieras donde quieras.

De todas formas debería funcionar lo que te puso halt, quizá tengas otro error en el código.

Saludos.
  #5 (permalink)  
Antiguo 14/07/2009, 14:11
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: marcacion mediante DNI

estimado anf:
nose donde le estoy pelando pero me sale este error dame una manito porfa:
Warning: mysql_affected_rows(): supplied resource is not a valid MySQL-Link resource in //... on line 17 que es donde esta este pedaso de codigo:
$rows = mysql_affected_rows(mysql_db_query("$base",$sql));

Gracias...
  #6 (permalink)  
Antiguo 14/07/2009, 16:52
Avatar de anf
anf
 
Fecha de Ingreso: junio-2009
Mensajes: 30
Antigüedad: 10 años, 5 meses
Puntos: 4
Respuesta: marcacion mediante DNI

Cita:
Iniciado por pedroca Ver Mensaje
estimado anf:
nose donde le estoy pelando pero me sale este error dame una manito porfa:
Warning: mysql_affected_rows(): supplied resource is not a valid MySQL-Link resource in //... on line 17 que es donde esta este pedaso de codigo:
$rows = mysql_affected_rows(mysql_db_query("$base",$sql));

Gracias...
Sin ver todo el código quizá sea por que pones comillas dobles a una variable, no lo he probado pero supongo que no tendrá nada que ver usar "esta $variable" en un String con echo o print que dentro del mysql_db_query(), prueba a poner directamente mysql_db_query($base,$sql) en vez de mysql_db_query("$base",$sql) y si puedes pégame parte del código y a no ser que sea un servidor localhost no pegues tu usuario y contraseña del mysql_connect().

Por cierto mi código esta incompleto, falta un mysql_close($link); al final de la consulta.

Espero poder ayudarte.
  #7 (permalink)  
Antiguo 15/07/2009, 13:19
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: marcacion mediante DNI

estimado Anf
ahora no me sale ningun error y tampoco me sale ningun mensaje que me diaga que el cirun existe y esta correcto, tampoco no inserta nada y a proposito de insertar como tendria que hacer para que no ingrese ningun dato en blanco y siempre pida datos al insertar aqui te lo pongo completo para que lo veas y otra vez gracias por tu tiempo
y disculpa la molestia es que recien estoy con esto del php y me parece interesante y por ahora necesito ayuda para realizar esto que estoy haciendo...

<?PHP
//declaraciones de variables
$base="ces";
$tabla="control";
$tabla1="empleados";
$v1=$_POST["cirun"];
$v2=$_POST["fecha"];
$v3=$_POST["hora"];

// insertar datos a la tabla control
if ($link = mysql_connect("localhost","usuario","pass")) {
$sql = "SELECT * FROM $tabla1 WHERE cirun='cirun'";
$rows = mysql_db_query("$base", $sql);
// $rows = mysql_affected_rows(mysql_db_query("$base", $sql));
if ($rows) {
$sql = "INSERT INTO $tabla (cirun, fecha, hora) VALUES ('$v1','$v2','$v3')";
mysql_db_query("$base" ,$sql);
} else { /*han metido mal su carnet */ }
} else { die("Imposible conectar con la base de datos."); }

//cierre de la conexion
mysql_close($link);
?>
  #8 (permalink)  
Antiguo 15/07/2009, 15:27
Avatar de anf
anf
 
Fecha de Ingreso: junio-2009
Mensajes: 30
Antigüedad: 10 años, 5 meses
Puntos: 4
Respuesta: marcacion mediante DNI

El mensaje de error cuando ponen mal algun dato está localizado aquí:

Código PHP:
} else { /*han metido mal su carnet */ 
Que podría ser por ejemplo:

Código PHP:
} else { print "Error al introducir los datos, inténtelo de nuevo."; } 
O lo que tu quieras dependiendo de tu página.

En esta parte hay un pequeño error:

Código PHP:
$rows mysql_db_query("$base"$sql);
//    $rows = mysql_affected_rows(mysql_db_query("$base", $sql)); 
Cambialo por:

Código PHP:
$rows mysql_affected_rows(mysql_db_query($base$sql));
//    $rows = mysql_affected_rows(mysql_db_query("$base", $sql)); 
Y si quieres que solo se ejecute el código si ponen todos los datos, haz algo tan sencillo como:

Código PHP:
if ($v1 && $v2 && $v3) { /* si existe $v1, $v2 y $v3 */
/* hacemos las operaciones */
} else { print "Debes introducir todos los datos."; } 
No sé si he resuelto algo o parte de lo que preguntas, o quizá te haya liado un poco mas, ya nos cuentas por si alguien te puede responder mejor que yo.

De todas formas te recomiendo visitar videotutoriales punto com y bajarte el Curso de PHP y MySQL del fantástico Jesus Conde aka 'OutKast', aprenderás muchísimo simplemente viendo vídeos y practicando en tu servidor local.


Script completo:

Código PHP:
<?php
/* declaraciones de variables */
$base "ces";
$tabla_control "control";
$tabla_empleados "empleados";
$cirun $_POST["cirun"];
$v2 $_POST["fecha"]; /* esta variable sobra */
$v3 $_POST["hora"]; /* esta también */
/* puedes obtener medidas de tiempo con date();
busca en php.net acerca de date(); */

if ($cirun) {
    if (
$link mysql_connect("localhost","usuario","pass")) {
        
/* Conexión correcta */
        
$sql "SELECT * FROM $tabla_empleados WHERE cirun = '$cirun' ";
        
$rows mysql_affected_rows(mysql_db_query($base$sql));
        if (
$rows) {
            
/* ha introducido un código válido */
            
$sql "INSERT INTO $tabla_control (cirun, fecha, hora) 
            VALUES ('$cirun',' "
.date("Y-m-d h:i:s")." ',' ".date("h:i:s")." ')";
            
/* por eso dije que sobraban */

            /* ejecutamos la consulta */
            
mysql_db_query($base ,$sql);
            
/* si hay error hacemos debug */
            
if (mysql_errno()) {
                print 
"
                <p>Se ha producido un error</p>
                <p>Error en la consulta:</p>
                SQL: $sql<hr />
                <p>Error nº "
.mysql_errno()."</p>
                <p>MySQL dijo: "
.mysql_error()."</p>
                "
;
            }
        } else {
            
/* no existe ningun cirum en la base de datos o han metido mal su carnet */
            
print "Su carnet no es válido o no esta registrado.";
        }
        
/* cierre de la conexion */
        
mysql_close($link);
    } else {
        
/* La conexion MySQL falló */
        
die("Imposible conectar con la base de datos.");
    }
} else {
    
/* Falta $cirun */
    
print "Debe introducir su carnet.";
}
?>
  #9 (permalink)  
Antiguo 15/07/2009, 17:05
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 10 años, 4 meses
Puntos: 0
De acuerdo Respuesta: marcacion mediante DNI

Gracias estimado Anf lo revisare con calma y te comento mañana como me fue
Saludos,
  #10 (permalink)  
Antiguo 16/07/2009, 13:41
Avatar de pedroca  
Fecha de Ingreso: julio-2009
Mensajes: 97
Antigüedad: 10 años, 4 meses
Puntos: 0
De acuerdo Respuesta: marcacion mediante DNI

estimado anf gracias por la ayuda solo que salia un error pero ya lo solucione cambiando esto
$rows = mysql_affected_rows(mysql_db_query($base, $sql));
por esto y ahora funciona perfectamente
$rows = mysql_num_rows(mysql_db_query($base, $sql));

Gracias nuevamente
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 09:35.