Autor Tema: Asociar un dato de dos tablas en la misma bd  (Leído 10267 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado manuelitox

  • Novato
  • *
  • Mensajes: 19
  • Puntuación: 1
    • Ver Perfil
Asociar un dato de dos tablas en la misma bd
« : 12 de enero de 2011, 11:28:07 am »
Buenos días! me acabo de registrar en el foro, pero ya llevo semanas documentándome por aquí. Excelente toda la información que por aquí se encuentra.

Tengo varias dudas y me gustaría exponerla a continuación. Primeramente, tengo una tabla en la cual se agrega información de registro, es decir: nombre, apellido, entre otros. Y luego tengo una segunda tabla, en la cual los usuarios seleccionarán una serie de datos y luego envían el formulario. Quiero que al momento de enviar esos datos de la segunda tabla exista alguna manera de identificar quién fue el que genero esa información. Tengo pensado asociar el id o nombre de la tabla de registro con la segunda tabla, pero tengo una vaga idea de como hacerlo, me gustaría ayudaran en ese punto.

Por ejemplo, con el siguiente código: insert into tabla2 --- where "usuario = id" agregaría el id de tabla registro a tabla 2. Pero con esto lograría que se genere automático. Es decir, para acceder a la segunda tabla el usuario debe estar logeado y cuando ingrese y envie información del formulario (2tabla) dicho campo id quedará registrado automáticamente?

O debo en el sistema de logeo agregar id a una variable en $_SESSION y luego en cada archivo que vaya a utilizarlo, colocarlo al comienzo del archivo?

Pero al realizar esto puedo también prohibir el ingreso a una pagina del website solo a usuarios registrados? Es decir, puedo utilizar dos veces $_session? una para que mantenga e inserte el id y otra para restringa el acceso a usuarios no registrados?

Disculpen ustedes si son muchas dudas expuestas en un solo lugar. Me despido esperando una pronta respuesta y deseandoles a todos un buen día.

A continuacíon les dejo los enlaces a los archivos que estoy trabajando.

http://pastebin.com/upepxS5T > insert.php (este envia los datos del formulario a la segunda tabla)
http://pastebin.com/f4sX7EZM > entrar.php (se encarga del logeo de usuario)
http://pastebin.com/G5EWgSPZ > formulario_quiniela.html (este vendría siendo el formulario de la tabla2)

He cambiado los datos de conexión de los archivos php.

Desconectado Carlos Belisario

  • Moderador Global
  • Fanático
  • *****
  • Mensajes: 263
  • Puntuación: 17
  • Sexo: Masculino
  • software lover
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #1 : 12 de enero de 2011, 04:36:53 pm »
no entendi bien tu duda pero creo que te complicaste un poco la vida, si deseas de que quede registro de quien esta haciendo la inserción como bien lo dijiste existen las variables de session donde luego del login puedes obtener los datos de ese usuario incluso para manejar lo que llaman niveles, sencillamente tendrias es que hacer una insercion donde indiques la variable de $_SESSION['user']; claro habiendo definido en tu login esta variable con el nombre de tu usuario, saludos

Desconectado manuelitox

  • Novato
  • *
  • Mensajes: 19
  • Puntuación: 1
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #2 : 12 de enero de 2011, 07:12:09 pm »
Gracias por el dato. Te comento que agregue en el index (donde se encuentra el formulario de login) el siguiente código.

<?
session_start();
$_SESSION["nick"] = $nick;
?>


Luego, en las páginas que quiero restringir, el siguiente.

<?
session_start();

if ($_SESSION["nick"] != "SI") {
   
    header("Location: index.php");
   
    exit();
}
?>

Al querer ingresar sin estar logeado funciona perfectamente, el problema viene cuando el usuario hace login... el redireccionamiento al index.php sigue. Es decir, usuarios logeados o no, no tienen acceso a dichas páginas.

Cual podrá ser mi error.

Gracias por la ayuda.

Desconectado el_santo

  • Usuario Dedicado
  • ***
  • Mensajes: 225
  • Puntuación: 9
  • Sexo: Masculino
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #3 : 12 de enero de 2011, 07:28:33 pm »
Gracias por el dato. Te comento que agregue en el index (donde se encuentra el formulario de login) el siguiente código.

<?
session_start();
$_SESSION["nick"] = $nick;
?>


Luego, en las páginas que quiero restringir, el siguiente.

<?
session_start();

if ($_SESSION["nick"] != "SI") {
   
    header("Location: index.php");
   
    exit();
}
?>

Al querer ingresar sin estar logeado funciona perfectamente, el problema viene cuando el usuario hace login... el redireccionamiento al index.php sigue. Es decir, usuarios logeados o no, no tienen acceso a dichas páginas.

Cual podrá ser mi error.

Gracias por la ayuda.


Ke kieres decir con esto

Código: [Seleccionar]
if ($_SESSION["nick"] != "SI")
Yo hablo php........!!!

Desconectado manuelitox

  • Novato
  • *
  • Mensajes: 19
  • Puntuación: 1
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #4 : 12 de enero de 2011, 07:34:09 pm »
if ($_SESSION["nick"] != "SI")

Si el nick no se encuentra entonces me redireccione a index.php.

Esta mal esa parte cierto?

Desconectado el_santo

  • Usuario Dedicado
  • ***
  • Mensajes: 225
  • Puntuación: 9
  • Sexo: Masculino
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #5 : 12 de enero de 2011, 07:49:50 pm »
if ($_SESSION["nick"] != "SI")

Si el nick no se encuentra entonces me redireccione a index.php.

Esta mal esa parte cierto?

proba esto
Código: [Seleccionar]

if ($_SESSION["nick"] == "")

o

if ( empty( $_SESSION["nick"] ) ) 

o

if (isset($_SESSION["nick"] ) )


Ahi lo ke evaluas es si la variable nick es diferente a SI o sea ke si el nick es vacio o esa variable de session no esta seteada  el if evaluara true ya ke cualkier cosa es diferente a SI
Yo hablo php........!!!

Desconectado manuelitox

  • Novato
  • *
  • Mensajes: 19
  • Puntuación: 1
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #6 : 12 de enero de 2011, 07:58:24 pm »
Ah ok! muchas gracias, probaré y te cuento.

Desconectado manuelitox

  • Novato
  • *
  • Mensajes: 19
  • Puntuación: 1
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #7 : 12 de enero de 2011, 08:05:41 pm »
Fijate las dos primeras opciones que me diste bloquean la página, pero al igual que la mía no pueden acceder ni usuarios logeados. Entonces, debo pensar que error es en el código de entrar.php (el script de logeo) lo coloco a continuación, agradecería mucho si le hecharas un ojo:

<?php

         //variables para base de datos
         
         $dbhost = 'localhost';
         $dbusername = 'asdasd'; //datos de prueba
         $dbuserpass = 'uasdasdc5iCWCWV!YC]Oz<C}1Q'; //datos de prueba
         $dbname = 'asdasdasd'; //datos de prueba

         session_start();

         //conectar con base de datos
         mysql_connect($dbhost, $dbusername, $dbuserpass) or die(mysql_error());
         mysql_select_db($dbname) or die (mysql_error());
         
         if (isset($_POST['nick']))
         {
            //comprobacion del envio del nombre de usuario y contrasena
            $nick = $_POST['nick'];
            $password = $_POST['password'];
            if ($password == NULL)
            {
               echo '<script>alert("La contraseña no fue enviada");</script>';
                        echo '<SCRIPT LANGUAGE="javascript">
                  location.href = "index.php";
                  </script>';
            }
            else
            {
               $query = mysql_query("SELECT password FROM registro WHERE nick = '$nick'") or die(mysql_error());
               $data = mysql_fetch_array($query);
               if($data['password'] != $password)
               {
                  echo '<script>alert("Login incorrecto");</script>';
                        echo '<SCRIPT LANGUAGE="javascript">
                  location.href = "index.php";
                  </script>';
               }
               else
               {
                  $_SESSION["s_nick"] = $nick;
                  echo '<script>alert("Bienvenido");</script>';
                  echo '<SCRIPT LANGUAGE="javascript">
                  location.href = "index.php";
                  </script>';
               }
               $_SESSION["nick"] = $nick;
            }
         }
?>

Desconectado Carlos Belisario

  • Moderador Global
  • Fanático
  • *****
  • Mensajes: 263
  • Puntuación: 17
  • Sexo: Masculino
  • software lover
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #8 : 12 de enero de 2011, 09:57:15 pm »
te comento el session_start() debe de estar al comienzo de la pagina sino te puede dar errores, lo que no cuadra es que si estas llenando la variable de session nick porque no te deja entrar en las otras paginas donde tienes la restricciones?? nos podrias mostrar algo mas a ver el porque siempre te redirige a index, por cierto, se que con javascript igual funciona pero seria bueno que en tu archivo de login la redireccion fuera mediante header, saludos

Desconectado el_santo

  • Usuario Dedicado
  • ***
  • Mensajes: 225
  • Puntuación: 9
  • Sexo: Masculino
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #9 : 13 de enero de 2011, 08:31:08 am »
Me pareció algo desorganizado tu login ahi lo rearme debería funcionar tal cual el tuyo...

Es parte del tuyo mas unas modificaciones mias

Código: [Seleccionar]
<?php

         session_start
();//acostumbrate a usarlo al inicio, aunke no esta mal como lo tenias lo ke se busca es ke no alla salida de texto ke genere un header antes ke session_start() ¿ok?
 
 //variables para base de datos        
         
$dbhost = &#39;localhost&#39;;
         
 $dbusername = &#39;asdasd&#39;; //datos de prueba
         
 $dbuserpass = &#39;uasdasdc5iCWCWV!YC]Oz<C}1Q&#39;; //datos de prueba
         
 $dbname = &#39;asdasdasd&#39;; //datos de prueba
         
 mysql_connect($dbhost$dbusername$dbuserpass) or die(mysql_error());
         
 mysql_select_db($dbname) or die (mysql_error());
 
 
 $nick trim($_POST[&#39;nick&#39;]);
 
         
$password trim($_POST[&#39;password&#39;]);
 
 
 /*Validamos si el nick y el pass fueron escritos*/
 if( $nick == "" || $password == "" /*Aki lo puedes mejorar*/
 {
 
 echo &#39;<script>alert("Tanto Nick como Password son necesarios"); history.go(-1);</script>&#39;;
 
 exit;
 
 }
 
         
/*Debes proteger la variable nick aki ya ke puedes ser victima de inyeccion sql*/
         
$query mysql_query("SELECT password FROM registro WHERE nick = &#39;".$nick."&#39;") or die(mysql_error());
         
 $data mysql_fetch_array($query);

        
 /*Validamos si ese nick es correcto*/
 if( mysql_num_rows($query) == )
 {
 
 echo &#39;<script>alert("El nick proporcionado no existe en la base de datos"); history.go(-1);</script>&#39;;
 
 exit;
 
 }

         
/*validamos si el pass que se dio es igual al de la BD*/
         
if( $data[&#39;password&#39;] != $password )
 {
 
 echo &#39;<script>alert("El password proporcionado es incorrecto"); history.go(-1);</script>&#39;;
 
 exit;
 
 }
 
 /*Si todo va bien generamos la sesion*/
 $_SESSION["nick"] = $nick;
 
         echo &
#39;<script>alert("Bienvenido"); location.href = "index.php";</script>&#39;;
 
?>


Lo puedes descargar aqui http://www.megaupload.com/?d=EUVQVOVS

Para proteger una pagina de gente no logueada seria asi

Código: [Seleccionar]

session_start();

if( $_SESSION["nick"] == "" ) /*puedes mejorar esto, solo para modo ejemplo*/
{
echo '<script>alert("Zona solo para usuarios logueados."); location.href="index.php";</script>';
exit;
}


Eso lo colocarías al principio de todo documento ke kieras proteger .

Las redirecciones te las deje como las estabas manejando pero es bueno veas la recomendación de CarlosBelisario

Puedes documentarte aki http://ve2.php.net/manual/en/function.header.php


PD: lo ke te pase debera funcionar 100% con lo tuyo lo acabo de probar en mi servidor y funciona al 100%, si estas probando en local y no te funciona considera reinstalar tu webserver


En el query de la linea 34 de "insert.php" deberias agregar el campo nick ke es el ke tomarias de la sesion

ejemplo
Código: [Seleccionar]

INSERT INTO asdas (nick, otros campos) VALUES ( $_SESSION['nick'] , otros campos)


para ke el registro kede relacionado al nick de la tabla registros.

Esto puede mejorarse pero asi funcionaria
« Última Modificación: 13 de enero de 2011, 08:40:25 am por el_santo »
Yo hablo php........!!!

Desconectado manuelitox

  • Novato
  • *
  • Mensajes: 19
  • Puntuación: 1
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #10 : 13 de enero de 2011, 09:37:24 am »
Buenos días!

Muchisimas gracias a el_santo y Carlos Belisario, se les agredece la ayuda prestada. Ahora probaré el código que me pasaste y tomaré la recomendación del amigo Carlos belisario de cambiar js por headers. Me documentaré sobre ello.

Cualquier cosa les comento por aquí.


Desconectado manuelitox

  • Novato
  • *
  • Mensajes: 19
  • Puntuación: 1
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #11 : 13 de enero de 2011, 10:30:16 am »
El código de el_santo funciono a las mil maravillas. Muchas gracias!

Ahora comenzaré a documentarme sobre headers para hacer los redireccionamientos. Gracias belisario!

Espero no cierren el post, para poder plantear cualquier otra duda que se me presente.

Por otro lado me gustaría hacerles una consulta... no sé si este sea el lugar correcto: donde puedo hacer un buen curso de php y bases de datos? gracias.

Desconectado el_santo

  • Usuario Dedicado
  • ***
  • Mensajes: 225
  • Puntuación: 9
  • Sexo: Masculino
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #12 : 13 de enero de 2011, 11:16:49 am »
El código de el_santo funciono a las mil maravillas. Muchas gracias!

Ahora comenzaré a documentarme sobre headers para hacer los redireccionamientos. Gracias belisario!

Espero no cierren el post, para poder plantear cualquier otra duda que se me presente.

Por otro lado me gustaría hacerles una consulta... no sé si este sea el lugar correcto: donde puedo hacer un buen curso de php y bases de datos? gracias.

Ojo lo ke te pase debes mejorarlo, es solo a modo de enseñanza debes estilizarlo y asegurarlo. por lo demas me alegra te alla funcionado, cualkier cosa pega un grito
Yo hablo php........!!!

Desconectado manuelitox

  • Novato
  • *
  • Mensajes: 19
  • Puntuación: 1
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #13 : 13 de enero de 2011, 12:47:38 pm »
Buenas tardes!

Haciendo pruebas, he logrado restringir el acceso a varias secciones del website, nuevamente gracias.

Ahora, cuando x usuario rellene el formulario que va a parar a la segunda tabla esta se genera perfectamente, pero no inserta la variable nick.

$insertar = mysql_query("INSERT INTO quiniela_futbol (nick, dgoles, mfinalLocal, mfinalVisitante, mmediotLocal, mmediotVisitante, fganador, empate, penalti, ntarjetas, ngoles, cgolesprimertiempo, cgolessegundotiempo)
      VALUES ( '{$_SESSION['nick']}' , '{$dgoles}', '{$mfinalLocal}', '{$mfinalVisitante}', '{$mmediotLocal}', '{$mmediotVisitante}', '{$fganador}', '{$empate}', '{$penalti}', '{$ntarjetas}', '{$ngoles}', '{$cgolesprimertiempo}', '{$cgolessegundotiempo}')", $conexion);
      if (!$insertar) {
      die("Fallo en la insercion de registro en la Base de Datos: " . mysql_error());
      }

Si lo tengo así no da ningún error, pero no inserta el nick. Y si le quito las comillas a {$_SESSION['nick']} me arroja el siguiente error: 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.

Imagino es un problema con la variable $_SESSION, algo pude leer sobre las comillas dobles y simples... por ahí irá el problema?

Gracias de antemano!

Desconectado el_santo

  • Usuario Dedicado
  • ***
  • Mensajes: 225
  • Puntuación: 9
  • Sexo: Masculino
    • Ver Perfil
Re:Asociar un dato de dos tablas en la misma bd
« Respuesta #14 : 13 de enero de 2011, 01:23:58 pm »
Buenas tardes!

Haciendo pruebas, he logrado restringir el acceso a varias secciones del website, nuevamente gracias.

Ahora, cuando x usuario rellene el formulario que va a parar a la segunda tabla esta se genera perfectamente, pero no inserta la variable nick.

$insertar = mysql_query("INSERT INTO quiniela_futbol (nick, dgoles, mfinalLocal, mfinalVisitante, mmediotLocal, mmediotVisitante, fganador, empate, penalti, ntarjetas, ngoles, cgolesprimertiempo, cgolessegundotiempo)
      VALUES ( '{$_SESSION['nick']}' , '{$dgoles}', '{$mfinalLocal}', '{$mfinalVisitante}', '{$mmediotLocal}', '{$mmediotVisitante}', '{$fganador}', '{$empate}', '{$penalti}', '{$ntarjetas}', '{$ngoles}', '{$cgolesprimertiempo}', '{$cgolessegundotiempo}')", $conexion);
      if (!$insertar) {
      die("Fallo en la insercion de registro en la Base de Datos: " . mysql_error());
      }

Si lo tengo así no da ningún error, pero no inserta el nick. Y si le quito las comillas a {$_SESSION['nick']} me arroja el siguiente error: 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.

Imagino es un problema con la variable $_SESSION, algo pude leer sobre las comillas dobles y simples... por ahí irá el problema?

Gracias de antemano!


A vuelo de pajaro te digo ke no puedes hacer esto:

Código: [Seleccionar]
VALUES '{$_SESSION['nick']}'

Fijate en las comillas ke estan en $_SESSION ke tambien estas encerrando en comillas.

estas encerrando comillas simples dentro de comillas simples

puedes hacer esto:

Código: [Seleccionar]
VALUES '{".$_SESSION['nick']."}', bla bla bla

Espero kede claro.

Dale y me cuentas
Yo hablo php........!!!