Foros del Web » Programando para Internet » PHP »

salvadme la vida porfavor

Estas en el tema de salvadme la vida porfavor en el foro de PHP en Foros del Web. tengo una gran duda podría crear una base de datos con php al ingresar un usuario en mi web y este después conectarse a ella ...
  #1 (permalink)  
Antiguo 01/09/2011, 04:42
 
Fecha de Ingreso: agosto-2011
Ubicación: barcelona
Mensajes: 237
Antigüedad: 12 años, 8 meses
Puntos: 1
salvadme la vida porfavor

tengo una gran duda podría crear una base de datos con php al ingresar un usuario en mi web y este después conectarse a ella automáticamente es decir que el archivo conections se modificara automáticamente para conectarse a la base de datos, no se si me explique bien, espero que alguien me entienda.
  #2 (permalink)  
Antiguo 01/09/2011, 04:45
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: salvadme la vida porfavor

Quieres crear una base de datos para cada usuario? Se me antoja que no es una solución buena, para qué necesitas hacer eso concretamente?

En caso de que sea obligatorio, se puede hacer, siempre y cuando el usuario de la base de datos tenga permisos para crear una nueva.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #3 (permalink)  
Antiguo 01/09/2011, 05:19
 
Fecha de Ingreso: agosto-2011
Ubicación: barcelona
Mensajes: 237
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: salvadme la vida porfavor

buenas vgonga tiene los permisos y se crea la base de datos con sus tablas pero me quedo que cuando el a de acceder pues claro te piden el nombre la base de datos y su contraseña y usuario he hay el problema los servidores te dan el nombre de usuario y esa parte es la que me quedo clavada .
estoy creando una web donde el usuario se registra y se crea su propia base de datos para administrar a sus usuarios y vender productos pero claro la opción también seria crear una sola base y tablas pero estoy muy mal de bases relacionales y si pudiera conectar cada usuario con su base pues esa faena ya la tendría echa.
  #4 (permalink)  
Antiguo 01/09/2011, 06:16
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 12 años, 7 meses
Puntos: 297
Respuesta: salvadme la vida porfavor

Mi opinión es que lo mejor que puedes hacer es crear un única base de datos, ahora, si tienes una cantidad de usuarios aproxima a los de Facebook, entonces eso de separarlo en otra BD sería más factible, pero en general, no. Te va a tocar usar relaciones.
  #5 (permalink)  
Antiguo 01/09/2011, 06:19
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: salvadme la vida porfavor

Buenas,

Si lo quieres montar tal y como lo planteas, necesitas una base de datos para los datos de tu aplicación, que tiene que tener al menos una tabla:
- Usuario: con campos user, pass y bd.

En esta tabla almacenas el nombre de la base de datos que se asigna a cada usuario cuando accede a la aplicación.

Además, necesitas crear una nueva base de datos para cada usuario. Cuando la crees, tienes que actualizar el campo bd de la tabla Usuario de tu base de datos de aplicaicón. Una vez montado este sistema, cada vez que un usuario quiera acceder a tu aplicación tienes que hacer lo siguiente:
1) Conectar a tu base de datos de aplicación. Con mysql_select_db seleccionas dentro de tu host la que sea, suponiendo que la bd es Aplicacion, sería así:
Código PHP:
Ver original
  1. mysql_connect("host", "user", "pass");
  2. mysql_select_db("Aplicacion");
2) Comprobar dentro de esta base de datos si el usuario existe y, en caso de que exista, sacar a una variable el valor de su campo "bd". Algo así.
Código PHP:
Ver original
  1. $rs = mysql_query("SELECT * FROM Usuario WHERE (user = '$user' AND pass = '$pass');") or die (mysql_error());
  2. if ($row = mysql_fetch_array($rs)) {
  3.    $db = $row['db'];
  4. } else {
  5.    echo "No existe el usuario";
  6. }
3) Una vez extraído el nombre de la base de datos que le corresponde al usuario, vuelves a usar la función para seleccionarla y dejarla en adelante como base de datos a la que referirse:
Código PHP:
Ver original 

Adicionalmente, tendrás que guardar $db a la variable de $_SESSION para poder hacer el select_db cada vez que vayas a acceder a la base de datos, ya que si tienes usuarios simultáneos puedes tener problemas.

Un saludo.

PD: Sigo insistiendo en que montar este pitote me parece una burrada, ya que puedes meter todo en la misma base de datos y restringir los datos por usuario. Por no querer aprender de bases de datos vas a liar en demasía el código PHP y vas a cargar el servidor con tanto cambio de base de datos.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #6 (permalink)  
Antiguo 01/09/2011, 06:41
 
Fecha de Ingreso: agosto-2011
Ubicación: barcelona
Mensajes: 237
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: salvadme la vida porfavor

bueno muchas gracias chicos tendré que crear una sola base de datos, estoy intentando y me salio algo como esto pero no me cuadran mucho las cosas,

Código PHP:
CREATE TABLE usuarios
(
tienda_id INT NOT NULL AUTO_INCREMENT,
password VARCHAR(50),
email VARCHAR(100),
nombre VARCHAR(50),
apellidos VARCHAR(50),
control ENUM('admin','user','premium'),
PRIMARY KEY (tienda_id)
ENGINE INNODB;

CREATE TABLE tienda
(

tienda_id INT NOT NULL AUTO_INCREMENT,
tipo_de_tienda  VARCHAR(50),
PRIMARY KEY (tienda_id),
INDEX (tienda_id),
FOREIGN KEY (tienda_idREFERENCES usuarios (tienda_id)
ENGINE INNODB;

CREATE TABLE productos
(
tienda_id INT NOT NULL AUTO_INCREMENT,
producto_id INT NOT NULL,
detalle INT NOT NULL,
precio INT NOT NULL,
referencia INT NOT NULL,
existencias INT NOT NULL,
INDEX (tienda_id),
FOREIGN  KEY (tienda_idREFERENCES usuarios (tienda_id)
ENGINE INNODB;

CREATE TABLE usuario_user
(
nombre_user_id INT NOT NULL  AUTO_INCREMENT,
tienda_id INT NOT NULL,
apellidos INT NOT NULL,
pasword INT NOT NULL,
email INT NOT NULL,
PRIMARY KEY (nombre_user_id),
INDEX (tienda_id),
FOREIGN KEY (tienda_idREFERENCES usuarios (tienda_id)
ENGINE INNODB;

CREATE TABLE noticias_tienda
(
noticia_id INT NOT NULL AUTO_INCREMENT,
tienda_id INT NOT NULL,
contenido INT NOT NULL,
PRIMARY KEY (noticia_id),
INDEX (tienda_id),
FOREIGN KEY (tienda_idREFERENCES usuarios (tienda_id)
ENGINE INNODB;

CREATE TABLE pedidos
(
num_pedido_id INT NOT NULL AUTO_INCREMENT,
nombre_user_id INT NOT NULL,
tienda_id INT NOT NULL,
producto_id INT NOT NULL,
PRIMARY KEY (num_pedido_id),
INDEX (tienda_id),
FOREIGN KEY (tienda_idREFERENCES usuarios (tienda_id)
ENGINE INNODB
  #7 (permalink)  
Antiguo 01/09/2011, 06:46
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 12 años, 7 meses
Puntos: 297
Respuesta: salvadme la vida porfavor

¿Y si primero hace el modelo entidad-relación (http://es.wikipedia.org/wiki/Modelo_entidad_relación)? es más cómo para trabajar y más visual, te lo recomiendo.

Etiquetas: vida, 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 05:10.