PHP - Problema: INSERT INTO no añade más que un registro

   
Vista:

Problema: INSERT INTO no añade más que un registro

Publicado por connectee (3 intervenciones) el 28/04/2015 19:03:45
Hola!

Intento registrar (listar) el acceso de cada usuario (su id y el tiempo de acceso)
a una pagina web de acceso restringido en una tabla SQL (llamada accesos).

El problema es que se genera un único registro.
Los siguientes accesos no generan registros en la tabla.
He comprobado que borrando el registro (dejar la tabla sin registros),
el acceso de un usuario vuelve a generar un registro nuevo y
otra vez no se puede añadir otro registro.

Para comprobar si el script está bien he creado una lista de accesos de los usuarios a un fichero.
Es decir, más o menos lo mismo como la tabla SQL, pero con fichero (accesos.txt).

En el script del ejemplo ambas maneras (del SQL y del fichero) van paralelas.
También intento mantener un sintaxis parecido para las dos maneras.

El script del fichero va perfecto:
en cada acceso en fichero se añade una línea con la fecha, la hora y id del usuario.
En la tabla SQL queda con el único primer registro.

¿Dónde me equivoco?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
// declaro una función que registra la entrada de un usuario en un fichero
function registrar_acceso_fichero($id_usuario){
$ahora = time();
$mensaje = @strftime("%d-%m-%Y %H:%M:%S ", $ahora);
    if($id_usuario != -1){
    $mensaje .= "El usuario con id $id_usuario "."ha entrado a la zona privada.";
  }
      else{
          
='editor_indent'>
$mensaje .= "Intento fallido de acceso a la zona privada.";
 
         
='editor_indent'>
}
 
    $archivo = fopen("accesos.txt", "a+"); // fopen(ruta al archivo, modo de acceso )
    fwrite($archivo, "$mensaje \n"); // fwrite(archivo, cadena de texto) y salto de línea \r\n
    fclose($archivo);
}
 
// declarar función
function registrar_acceso_db($id_usuario){
$ahora = time();
$fecha_mysql = @strftime("%d-%m-%Y %H:%M:%S ", $ahora);
 
/*incapsulo la sentencia INSERT con la variable $consulta1 */
$consulta = "INSERT INTO accesos (idusuario, hora_acceso) VALUES ('$id_usuario', '$fecha_mysql')";
/* introduzco la vriable $resultado: mysql_query añade la fila*/
$resultado = mysql_query($consulta);
}
 
// el script empieza aquí
session_start();
mysql_connect("localhost", "root", "");
mysql_select_db("curso_php_");
 
$usuario = $_POST[usuario]; // asignar los valores del formulario a dos variables
$contrasena = $_POST[contrasena];
 
$consulta = "SELECT * FROM usuarios WHERE nombreusuario = '$usuario' AND contrasenausuario = '$contrasena'";
$resultado = mysql_query($consulta);
 
if(mysql_num_rows($resultado) != 0){
$_SESSION["autorizado"] = TRUE;
 
			   // (identificador de resultado, fila, nombre de campo o su número)
$id = mysql_result($resultado, 0, "idusuario");
 
registrar_acceso_fichero($id); // llamo la función para escribir el registro en un fichero
registrar_acceso_db($id); // llamo la función para escribir el registro en una tabla de db
header("location: zona_privada.php");
}
 
else{
session_destroy();
registrar_acceso_fichero(-1);
registrar_acceso_db(-1);
header("location: no_autorizado.html");
}
 
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Vainas

Problema: INSERT INTO no añade más que un registro

Publicado por Vainas (254 intervenciones) el 28/04/2015 20:32:22
Buenas:

Le he estado dando un rato vueltas y no veo el error tampoco. Se me ocurre lo siguiente:

Activa los errores de php para ver si al ejecutar esa consulta puede que nos de algo mas.

tendrias q hacer algo asi:

Al principio del fichero colocas esta instruccion:

1
error_reporting(E_ALL);

donde ejecutas la query del INSERT pones esto:

1
2
3
4
if($resultado = mysql_query($consulta)) {
} else {
   echo "Has tenido el siguiente error:<br />".mysql_error();
}

Con esto lo que haces es que si la consulta tiene un error lo mostrara. Esto te puede ayudar en un futuro a conocer tus errores en mysql.

Se me ocurre que puede dar un error la consulta y es que en la tabla accesos idusuario sea una clave primaria y entonces no te acepte valores repetidos... sino es esto con el error veremos que sucede.

Espero que sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Problema: INSERT INTO no añade más que un registro

Publicado por connectee (3 intervenciones) el 19/05/2015 19:35:50
Gracias, Vainas!

Tienes razón, no hay error.
Preinstalé Xampp y todo funciona bien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar