Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Almacenar información de usuario específico

Estas en el tema de Almacenar información de usuario específico en el foro de PHP en Foros del Web. Hola amigos, a ver si me pueden ayudar; les explico la estructura de mi mi web: - Formulario de registro de tal forma que los ...
  #1 (permalink)  
Antiguo 10/08/2015, 15:21
 
Fecha de Ingreso: septiembre-2013
Mensajes: 76
Antigüedad: 10 años, 6 meses
Puntos: 0
Almacenar información de usuario específico

Hola amigos, a ver si me pueden ayudar; les explico la estructura de mi mi web:

- Formulario de registro de tal forma que los datos del usuario van a una base de datos de phpmyadmin que tiene una tabla nº 1 que se llama datosusuarios.

- Tras registrase, el usuario accede a la web a través de un sistema de login, de tal manera que cada usuario introduce su nombre de usuario y accede a ella.

- Tras acceder el usuario va a un enlace donde puede realizar un ejercicio, de tal manera que introduce unos valores y los envía; esos datos se almacenan en una tabla nº 2 de phpmyadmin que he llamado ejercicio1; esa tabla está vinculada a la tabla nº 1 mediante una clave foránea que es id_usuario.

Problema que tengo:
- El caso es que cuando el usuario realiza el ejercicio, el valor que introduce un usuario concreto se almacena de manera aleatoria en la tabla nº 2, y no de manera asociada a su id; me gustaría saber cómo puedo solucionar ese ese error.

Lo cierto es que no lo he hecho nunca así que a ver si me podéis orientar un poco.
No sé por donde irá la solución, si se trata de usuar alguna forma de mantener iniciada la sesión del usuario al acceder a cada enlace de cada ejercicio o tal.

Gracias de antemano amigos!
  #2 (permalink)  
Antiguo 10/08/2015, 15:36
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: Almacenar información de usuario específico

crea un campo de nombre_usuario o algo asi y vinculalo al usuario de la tabla 1, los datos que guardes en la tabla 2 deberian almacenar en el campo nombre_usuario la variable de sesion correspondiente, podria ser $_SESSION['user'] por ejempplo y asi distinques de quien es que en tu tabla y siempre los datos estaran vinvulados al usuario que se loguee
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 10/08/2015, 15:45
 
Fecha de Ingreso: septiembre-2013
Mensajes: 76
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Almacenar información de usuario específico

Antes de nada gracias por tu aportación y te comento lo siguiente:

A ver las dos tablas están relacionadas por el id_usuario, y luego los valores que introduce en el enlace ejercicio que son v1, v2 y v3; serían los valores que se deben almacenar en la tabla, que de hecho se almacenan pero no me lo asocia al id_usuario de la tabla datos usuarios y a su semejante id_usuario de la tabla nº2 ejercicio;
y luego lo que me has dicho de poner:

podria ser $_SESSION['user'] por ejempplo y asi distinques de quien es que en tu tabla y siempre los datos estaran vinvulados al usuario que se loguee;

no lo he entendido, a ver si me lo puedes mostrar con un ejemplo en el código.

mmm a ver si me pueden orientar un poco.
  #4 (permalink)  
Antiguo 10/08/2015, 18:32
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: Almacenar información de usuario específico

bueno te explico debes almacenar la id del usuario en la tabla 2 para que esta se pueda vincular, si no lo haces no se va a vincular, podria ser algo asi:

Código PHP:
Ver original
  1. <?php
  2. ?>
  3. <?php
  4.  
  5. $id_user = $_SESSION['id'];
  6.  
  7. $inserta = $db->query("INSERT INTO tabla (id_user, v1 ,v2, v3) VALUES ('$id_user' , 'valor1' , 'valor2' , 'valor3')");
  8. ?>
claro siempre que asignes la id a una variable de sesión al loguearte, en caso contrario tendrias que hacer una consulta para traer la ide del usuario y luego almacenarla
__________________
[email protected]
HITCEL
  #5 (permalink)  
Antiguo 11/08/2015, 01:41
 
Fecha de Ingreso: septiembre-2013
Mensajes: 76
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Almacenar información de usuario específico

Hola compañero, creo que te refieres a esto de acuerdo con el manual php:

PÁGINA 1.
Código PHP:

<?php
// pagina1.php

session_start();

echo 
'Bienvenido a la página #1';

$_SESSION['color']  = 'verde';
$_SESSION['animal'] = 'gato';
$_SESSION['time']   = time();

// Trabajar si la cookie de sesión fue aceptada
echo '<br /><a href="pagina2.php">página 2</a>';

// O quizás pasar el id de sesión, si fuera necesario
echo '<br /><a href="pagina2.php?' SID '">página 2</a>';
?>
página 2

Código PHP:

<?php
// pagina2.php

session_start();

echo 
'Bienvenido a la página #2<br />';

echo 
$_SESSION['color'];  // verde
echo $_SESSION['animal']; // gato
echo date('Y m d H:i:s'$_SESSION['time']);

// Puede querer usar SID aquí, como hicimos en pagina1.php
echo '<br /><a href="pagina1.php">página 1</a>';
?>

Si aplico eso, en mi código de la página de checklogin cuando entra el usuario deberé añadir sesion_start déspués de ob_start(); el código que tengo de mi página de login de inicio es este:

Código PHP:
<?php

ob_start
();
$host "localhost"// Host name 
$username "root"// Mysql username 
$password ""// Mysql password 
$db_name "platform"// Database name 
$tbl_name "datos_usuarios"// Table name 

// Connect to server and select databse.
mysql_connect("$host""$username""$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$nombreusuario=$_POST['nombreusuario']; 
$contrasena=$_POST['contrasena']; 

// To protect MySQL injection (more detail about MySQL injection)
$nombreusuario stripslashes($nombreusuario);
$contrasena stripslashes($contrasena);
$nombreusuario mysql_real_escape_string($nombreusuario);
$contrasena mysql_real_escape_string($contrasena);
$sql="SELECT * FROM datos_usuarios WHERE nombreusuario='$nombreusuario'and contrasena='$contrasena'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count mysql_num_rows ($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"
$nombreusuario $_SESSION["nombreusuario"];
$contraseña $_SESSION["contrasena"];
header("location:login_success.php");
}
else {
echo 
"Wrong Username or Password";
}
ob_end_flush();
?>

Y por otro lado para conseguir el id del usuario que está en la tabla nº1 de phpmyadmin pero que no viene de la sesión anterior supongo que haría una consulta a phpmyadmin, tipo:

Código PHP:
<?php

//conectar al servidor


$connect mysql_connect("localhost""root""") ; 

if (!
$connect) {
die (
"Can not connect: " mysql_error () ) ; 
}


//conectar a la base de datos


mysql_select_db("platform"$connect) ; 

$sql "SELECT * FROM datos_usuarios";


//query la base de datos
$myData mysql_query($sql$connect); 
e
while ($record mysql_fetch_array ($myData)) {
echo  . 
$record ['idusuario'] .; 

} ;

mysql_close($connect) ; 
//fech de reusultados y convertirlos a través de un array

?>
¿Sería esto correcto o cómo y donde iría la consulta del id_usuario a la base de datos?

Por otro lado, y buscando alternativas a realizarlo así:

He estado indagando cómo ir almacenando los datos para mantener abierta la sesión de un usuario al pasar de una página a otra y he encontrado varias posibilidades, a ver si me aconsejáis si alguna de esas es mejor:

- usar: function.session-set-save-handler.


- Estoy abierto a otras propuestas, dejo el tema abierto para que me propongan alguna alternativa que consideren mejor.


Un saludo y gracias!
  #6 (permalink)  
Antiguo 12/08/2015, 00:46
 
Fecha de Ingreso: septiembre-2013
Mensajes: 76
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Almacenar información de usuario específico

Vaya, nadie me echa una manita?
  #7 (permalink)  
Antiguo 12/08/2015, 01:57
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Almacenar información de usuario específico

Buenas,
Cita:
Iniciado por jesus_spanishteacher Ver Mensaje
Vaya, nadie me echa una manita?
La solución te la ha dado xfxstudios

Cita:
Iniciado por xfxstudios Ver Mensaje
bueno te explico debes almacenar la id del usuario en la tabla 2 para que esta se pueda vincular, si no lo haces no se va a vincular, podria ser algo asi:

Código PHP:
Ver original
  1. <?php
  2. ?>
  3. <?php
  4.  
  5. $id_user = $_SESSION['id'];
  6.  
  7. $inserta = $db->query("INSERT INTO tabla (id_user, v1 ,v2, v3) VALUES ('$id_user' , 'valor1' , 'valor2' , 'valor3')");
  8. ?>
claro siempre que asignes la id a una variable de sesión al loguearte, en caso contrario tendrias que hacer una consulta para traer la ide del usuario y luego almacenarla
1.- Si tu servidor lo permite, usa mysqli en vez de mysql. (En servidores con versiones modernas de PHP te dará errores el script)

2.- Las contraseñas se guardan "hasheadas" mediante sha1() o cualquier otra función que se te ocurra. Así que deberías compararlas con el mismo preceso de hasheo.
Código PHP:
$contrasena mysql_real_escape_string($contrasena);
$sql="SELECT * FROM datos_usuarios WHERE nombreusuario='$nombreusuario'and contrasena='sha1($contrasena)'"
3.- En las consultas, usa solo lo que necesites...
Código PHP:
$sql="SELECT id, usuario, password FROM datos_usuarios WHERE...";

// mejor que:
$sql="SELECT * FROM datos_usuarios WHERE..."
4.- Asignar correctamente las variables de sesion.
Código PHP:
session_start();

$id   1;
$user 'usuario';
$pass sha1('12345678');

$_SESSION = array(
    
'id'   => $id,
    
'user' => $user,
    
'pass' => $pass,
);

var_dump($_SESSION);

// salida
array (size=3)
  
'id' => int 1
  
'user' => string 'usuario' (length=7)
  
'pass' => string '7c222fb2927d828af22f592134e8932480637c0d' (length=40
5.- Guarda en la sesión el id del usuario. Lo podrás usar despues donde quieras sin necesidad de hacer consultas a la base de datos. Es lo que comentaba xfxstudios en el mensaje anterior.
Como en el ejemplo del punto nº 4

6.- Sobre esto:
Cita:
He estado indagando cómo ir almacenando los datos para mantener abierta la sesión de un usuario al pasar de una página a otra y he encontrado varias posibilidades, a ver si me aconsejáis si alguna de esas es mejor:

- usar: function.session-set-save-handler.
"Es lo mismo" que session_start(), solo que permite trabajar con las sesiones en la base de datos. Es un poco más complejo de lo que parece a simple vista.

Habría que perfilar más cosas, pero por ahora con esto tienes para un rato de trabajo

PD.: Lo he escrito con cortes contínuos por el captcha de cloudFlare, así que igual se me ha quedado algo atrás. Cualquier cosa me comentan.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #8 (permalink)  
Antiguo 13/08/2015, 15:13
 
Fecha de Ingreso: septiembre-2013
Mensajes: 76
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Almacenar información de usuario específico

Bueno he retocado el código, teniendo en cuenta algunos matices, a ver si me podéis hacer las pertinentes correcciones:

- El usuario no introduce su id_usuario por lo tanto tengo que realizar la consulta a la base de datos; la consulta que he creado sería esta, a ver que os parece:

Código PHP:

<?php

//consulta para traer id del usuario.

$connect mysql_connect("localhost""root""") ; 

if (!
$connect) {
die (
"Can not connect: " mysql_error () ) ; 
}


//conectar a la base de datos


mysql_select_db("nombredb"$connect) ; 

$sql="SELECT id_usuario FROM datos_usuarios WHERE nombreusuario='$nombreusuario'and contrasena='$contrasena'"

$num_resultados=mysqli_num_rows($id_usuario)

//usar la anterior o esta: $num_resultados=$resultado->num_rows


$array=mysqli_fetch_row($id_usuario)
//$array=$resultado->fetch_row()
?>
DUDA: ESTE CÓDIGO IRÍA DENTRO DE UN ARCHIVO AL QUE LLAMARÍA POR EJEMPLO CONEXIÓN, QUE A SU VEZ INCLUIRÍA EL CÓDIGO QUE DETALLO A CONTINUACIÓN?????


PARA MANTENER LA SESIÓN DE USUARIO ABIERTA:
Código PHP:
<?php
 session_start
();
$id_usuario  '';
$nombreusuario '';
$contrasena sha1('');

$_SESSION = array(
    
'id'   => $id_usuario,
    
'user' => $nombreusuario,
    
'pass' => $contrasena,
);

var_dump($_SESSION);

// salida
array (size=3)
  
'id_usuario' => int 1
  
'nombreusuario' => string '' (length=7)
  
'contrasena' => string '' (length=40)  

?>
y ya para pasar los valores a la tabla de ejercicio 1, pues pondría el que me habéis propuesto, pero he cambiado una cosilla a ver que os parece:

Código PHP:

<?php
     
    $id_usuario 
$_SESSION['id_usuario'];
     

//tabla ya creada en la que vamos insertando campos en momentos distintos
    
$inserta $db->query("INSERT INTO nombre tabla  (v1 ,v2, v3) VALUES ('$valor1' , '$valor2' , '$valor3')"where 'id_usuario' $id_usuario,   ;
    
?>

//primera vez que accedemos a la tabla. 
 $inserta = $db->query("INSERT INTO tabla (id_user, v1 ,v2, v3) VALUES ('$id_user' , 'valor1' , 'valor2' , 'valor3')");

Gracias por la ayuda, espero vuestras respuestas, me gustaría-estoy deseando tenerminarlo y tenerlo listo este finde!!!
  #9 (permalink)  
Antiguo 13/08/2015, 15:18
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: Almacenar información de usuario específico

esto que es?:
Cita:
$inserta = $db->query("INSERT INTO nombre tabla (v1 ,v2, v3) VALUES ('$valor1' , '$valor2' , '$valor3')") where 'id_usuario' = $id_usuario, ;
?>
es un insert y no le veo el uso de WHERE alli necesario, como te dije crea una columna en esa tabla donde vas a almacenar la iod del usuario tantas veces el registre datos alli, de esa manera vas a poder vincular los datos con este
__________________
[email protected]
HITCEL
  #10 (permalink)  
Antiguo 13/08/2015, 15:28
 
Fecha de Ingreso: septiembre-2013
Mensajes: 76
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Almacenar información de usuario específico

Si te refieres a crearla en phpmyadmin, ya está hecho. Qué te parece el resto de código o abro un tema nuevo para esa parte de código??
  #11 (permalink)  
Antiguo 13/08/2015, 15:34
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: Almacenar información de usuario específico

no es necesario abrir un nuevo tema para eso:
esta:
Cita:
$inserta = $db->query("INSERT INTO nombre tabla (v1 ,v2, v3) VALUES ('$valor1' , '$valor2' , '$valor3')") where 'id_usuario' = $id_usuario, ;
deberia quedar asi:
Código PHP:
Ver original
  1. $inserta = $db->query("INSERT INTO nombre tabla  (id_usuario, v1 ,v2, v3) VALUES ('$id_usuario' , '$valor1' , '$valor2' , '$valor3')");
de esa forma ese registro queda asociado al usuario que lo inserto y puedes condicionar las busquedas o muestras basados en esa columna
__________________
[email protected]
HITCEL
  #12 (permalink)  
Antiguo 14/08/2015, 01:52
 
Fecha de Ingreso: septiembre-2013
Mensajes: 76
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Almacenar información de usuario específico

Hola de nuevo, en relación al código anterior estoy teniendo problemas para implementar el array anterior, en concreto con la salida del mismo:


Código PHP:
<?php
 session_start
();
$id_usuario  '';
$nombreusuario '';
$contrasena sha1('');

$_SESSION = array(
    
'id_usuario'   => $id_usuario,
    
'nombreusuario' => $nombreusuario,
    
'contrasena' => $contrasena,
);

var_dump($_SESSION);

// salida
array (size=3)
  
'id_usuario' => int 1
  
'nombreusuario' => string 'usuario' (length=7)
  
'contrasena' => string '7c222fb2927d828af22f592134e8932480637c0d' (length=40)
Me salía este error inicialmente en la salida del array:
Parse error: syntax error, unexpected '=', expecting ')' in C:\xampp\htdocs\variablesdesesion.php on line 42

Para solucionarlo cambié en el mismo:
// salida
array (size=>3)
//cambié el = por => y me lo solucionó pero en la siguiente parte del array me daba este error:

Parse error: syntax error, unexpected ''id_usuario'' (T_CONSTANT_ENCAPSED_STRING) in C:\xampp\htdocs\variablesdesesion.php on line 43 ( la línea 43 es la de 'id_usuario' => int 1

'id_usuario' => int 1
'nombreusuario' => string 'usuario' (length=7)
'contrasena' => string '7c222fb2927d828af22f592134e8932480637c0d' (length=40)


La verdad que el array al que estoy acostumbrado no lleva el valor int, y lo he intentado modificar siguiendo los arrays del manual php:

http://http://php.net/manual/es/lang...ypes.array.php


pero no me ha solucionado mucho , a ver si me podéis ayudar con ello; un saludo y gracias!!

Etiquetas: almacenar, formulario, registro, tabla, usuario, 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 13:18.