PHP - Me presento y pido ayuda...

 
Vista:
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 04/12/2015 21:11:23
Hola, este es mi primer post en este foro. Estoy aprendiendo PHP y MySQL, pero estoy muy al principio, así que pido paciencia con mi torpeza y con mis preguntas absurdas.

Quiero crear un sistema multiusuario con diferentes niveles para cada uno. Los usuarios tendrán que poder descargar documentos pdf según su nivel de usuario, es decir el tipo 1 puede ver, modificar y subir archivos, el tipo 2 puede descargar documentos x, el ti 3 documentos x+y y el tipo 4 sólo documentos tipo y.

En primer lugar voy a crear la base de datos con estas tablas:

- usuarios (contiene los datos dlos usuarios registrados)
- tipos de usuarios (admin, tipo1,tipo2, etc)
- documentos (los documentos subidos al servidor)
- tipos de documentos (documentos x, y, z, etc)

Mi primera duda es: cómo puedo hacerlo para asignar tipos de documento a cada usuario?, es decir, hay usuarios que podrán acceder a todos y otros a sólo un tipo. Qué tipo de campo me permite esto?

Si estoy equivocado en la estructura de mi BD o alguien tieneuna idea mejor, por favor acepto todo tipo de sugerencias. Lo qe quiero es aprender.

Esto es todo por ahora. GRACIAS.
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
sin imagen de perfil

Me presento y pido ayuda...

Publicado por david (21 intervenciones) el 05/12/2015 00:04:39
Hola buenas , veras imaginate que en la tabla usuarios es así :

ID | NOMBRE | EDAD
1 | DAVID | 28
2 | PEPITO | 25

y la tabla documentos así:

ID | ADMIN | TIPO1 | TIPO2 | TIPO3
2 | TRUE | FALSE|FALSE|FALSE
1 |FALSE | TRUE | FALSE | FALSE

Puedes usar el campo ID para hacer referencia a un usuario o a un documento en concreto. en este caso PEPITO es admin y DAVID del tipo 1.

http://www.colordeu.es/BLOG/tutorial-mysql-relaciones-entre-tablas-y-su-integridad-referencial

No se si es exactamente a esto a lo que te referias espero haberte ayudado.


Siempre que enseñes , enseña también, a la vez, dudar de lo que enseñas. (José Ortega y Gasset)

Ofertas Online
http://ofertasonline.ovh/

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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 05/12/2015 16:24:09
hola David, muchas gracias por tu idea, me parece muy interesante y la verdad que no lo había visto así.
Solamente me surge una duda: ¿cómo podría añadir eladmin un nuevo tipo de usuario a tu tabla de documentos?, ¿no sería mejor tener los tipos de documentos en una tabla separada?
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
sin imagen de perfil

Me presento y pido ayuda...

Publicado por david (21 intervenciones) el 05/12/2015 16:58:01
Desde luego creo que seria mucho mejor si los separaras , la relación entre tablas y campos no tiene solo por que ser con el campo ID pudes hacer referencia con cualquier otro campo , puedes hacer esto :

Tabla USUARIOS
ID | NOMBRE | EDAD
1 | DAVID | 28
2 | PEPITO | 25
3 | JUAN | 26

Tabla DOCUMENTOS

ID | TIPOID
2 | 1 //PEPITO ID 2 -> TIPOID 1
3 | 3

Tabla tipoDocumentos

ID | TIPO | VER | MODIFICAR | SUBIR ARCHIVOS
1 | ADMIN |TRUE |TRUE | TRUE| //PEPITO ES ADMIN
2 | MODERADOR |TRUE |FALSE |TRUE|
3 | USUARIO |TRUE|FALSE |FALSE

Algo así y lo vas dejando a tu gusto .


Siempre que enseñes , enseña también, a la vez, dudar de lo que enseñas. (José Ortega y Gasset)

Ofertas Online
http://ofertasonline.ovh/
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 05/12/2015 17:33:20
muchas gracias david, me pongo a ello y a ver como va la cosa.
Seguiré informando...
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 06/12/2015 19:32:21
bueno, he creado una base de datos a mi gusto de la siguente manera:

USUARIOS
id_usuario
usuario_nombre
usuario_apellido
usuario_empresa
usuario_login
usuario_password
usuario_tipo


TIPO USUARIO
id_tipousuario
tipo_usuario


DOCUMENTOS
id_documento
id_tipousuario
documento_titulo
documento_tipo
documento_path


TIPO DOCUMENTO
id_documneto
documento_tipo_desc

y se me presenta un problema: el campo id_tipousuario de la tabla DOCUMENTOS es el que almacena el tipo de usuario que tiene acceso a ese documento pero hay documentos que tendré que asignar a uno o varios tipos de usuario. ¿Cómo puedo hacer esto?. Gracias.
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
Imágen de perfil de VRM
Val: 152
Ha disminuido su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Me presento y pido ayuda...

Publicado por VRM (192 intervenciones) el 07/12/2015 10:18:20
Hola:

Te explico como lo hago yo. Te advierto de entrada que es conceptualmente más complicado, pero es muy flexible.
Lo mando adjunto porque me resulta más cómodo de escribir.

Saludos de Víctor.-
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 07/12/2015 20:17:48
Hola VRM, muchas gracias por tu detallada explicación. El sistema que propones es un poco demaiado avanzado en este momento para mi. Creo que necesito algo más sencillo, aunque le echaré otro vistazo al tuyo e intentaré entenderlo mejor. saludos
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
Imágen de perfil de VRM
Val: 152
Ha disminuido su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

Me presento y pido ayuda...

Publicado por VRM (192 intervenciones) el 08/12/2015 20:34:45
Hola:

Parece complicado, pero en realidad no lo es tanto. Sólo tienes que tener claro los grupos de usuarios que quieres crear y las clase de acceso de cada documento.

Bueno en todo caso si necesitas ayuda más detallada estoy a tu disposición.

Saludos de Víctor.-
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 10/12/2015 14:01:06
Hola VRM,
he estado unos días sin posibiidad de conectarme.
Hemirado un poco más la solución que propones y me surge la duda de qué pasará cuando el damin quiera añadir un nuevo documento y un nuevo tipo de usuario, ¿lo podrá hacer sin mi ayuda?
Muchas gracias
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
Imágen de perfil de Jordi

Me presento y pido ayuda...

Publicado por Jordi (5 intervenciones) el 07/12/2015 20:29:08
Hola Lucas,

La aproximación que has implementado hasta ahora es una solución que viene bien en un caso de relación 1 a 1, en que cada usuario solo puede acceder a un tipo de documento. El caso que se te presenta, donde un usuario puede acceder a más de un tipo de documento es una situación 1 a N (un usuario, N tipos de documento a los que pueden acceder).

Para resolver esto, lo más sencillo es crear una tabla intermedia que contenga los tipos de documento a los que puede acceder cada usuario. Por ejemplo, yo lo haría de la siguiente forma:

ID relación | Usuario | Tipo de documento
1 1 1
2 1 3
... ... ...

- ID relación es simplemente la clave primaria de la tabla.
- Usuario es una clave foránea relacionada con la primaria de la tabla de usuarios.
- Tipo de documento es otra clave foránea, relacionada con la primaria de la tabla de tipos de documento.

Para comprobar si un usuario puede acceder al documento que sea, deberías recuperar el tipo de documento y a partir de allí, comprobar en esta tabla intermedia si el usuario tiene el acceso permitido.
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 10/12/2015 14:05:36
Hola Jordi,
id relacion es el campo que indica qué usuarios pueden acceder a cada documento?
en caso de ser así, ¿qué tipo de campo me permite agregar varios valores?
No sé si lo he entendido 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
Imágen de perfil de Jordi

Me presento y pido ayuda...

Publicado por Jordi (5 intervenciones) el 10/12/2015 17:44:24
ID relación en la aproximación que comento no sirve de nada a nivel práctico, solo actúa como pk de la tabla intermedia, porque todas las tablas deberían tener uno para mejor indexado.

Simplemente es añadir tantas entradas a esa tabla intermedia como tipos de archivo pueda leer un usuario. Cuando un usuario necesite leer un fichero, buscarás un registro en la tabla Intermedia where usuario sea el propio and tipo de archivo sea X. Si existe, el usuario tiene permisos.
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
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Me presento y pido ayuda...

Publicado por gonzalo (615 intervenciones) el 08/12/2015 18:13:42
buenos dias Lucas

recuerda que en programacion puede haber 1gb de soluciones para 1 mismo problema, todo esta en el punto de vista en que lo veas.

yo haria una base de datos de acceso a documentos y ahi relaciones usuarios y documentos

usuarios
id,nombre
1,Lucas
2,Hugo
3,paco
4,luis

documetnos
id,nombre,activo
1, leyes,true
2, matematicas,true
3, ingles,true
4, biologia,false

AccesoADocumentos
Id,usuario,Libro,acceso
1,1,1,false (lucas no tiene acceso a leyes
2,1,2,true (lucas tiene acceso a matematicas)
3,2,1,true (Hugo tiene acceso a leyes)

libros que no stan activos nadie los va a poder ver anque tengan acceso (nadie va a poder ver biologia).

libros a los que no tenga acceso (acceso=false) o no esten en su lista no los va a poder ver.

asi si agregas o quitas documentos solo debes ligarlos a los usuarios y listo.

y la otra es hacer acceso por grupos, es mas o menos la misma idea, aqui el problema es cuando no quieres darle acceso a 1 libro al usuario X, si el grupo tiene acceso al libro el usuario X va a tener acceso asi que que no te queda mas que o darles acceso al libro a todos o quitarles el acceso al libro a todos o crear un grupo para el usuario X, asi que al final cada quien va a quedar en su grupo, asi que regresamos a este ejemplo.

todo depende del punto de vista con que lo veas (dijo el ciego)

para todo problema puede haber 1gb de soluciones:
un maestro dibujo 2 puntos a los lados de un pizarron y le pidio a 1 alumno que los uniera usando solo una linea.
el alumno dibujo un triangulo dentro de un circulo dentro de un cuadrado usando una sola linea sin cruzar la linea en ningun punto y sin despegar el gis del pizarron, y unio los 2 puntos

como debe calificar el maestro al alumno? (bien o mal)



los que digan mal tomen en cuenta que el maestro jamas dijo "linea recta".
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 10/12/2015 14:09:00
gracias Gonzalo, creo que tu segundo ejempo es el que necesito, pues los usuarios pertenecen a grupos y no hay que asignar documentos a usurios indiiduales. En este caso tendría que crear una tabla de tipos de usuarios y asignar un tipo de usrio a cada usuario. Aquí me pierdo un poco u agradecería un eemplo de este tipo de estructura. Gracias.
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
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Me presento y pido ayuda...

Publicado por gonzalo (615 intervenciones) el 10/12/2015 18:36:48
ok, basandonos en el ejemplo que te pase

usuarios, agrego el campo grupo
id,nombre,grupo
1,Lucas,1
2,Hugo,1
3,paco,2
4,luis,2

documetnos, este se queda igual
id,nombre,activo
1, leyes,true
2, matematicas,true
3, ingles,true
4, biologia,false

AccesoADocumentos, cambio usuario por grupo
Id,grupo,Libro,acceso
1,1,1,false (lucas no tiene acceso a leyes
2,1,2,true (lucas tiene acceso a matematicas)
3,2,1,true (Hugo tiene acceso a leyes)

entonces aqui cambia, grupo 1 tiene acceso a libros 1 y 2,
grupo 2 tiene acceso a libro 1

y creas una tabla nueva que se llame grupos
Grupos
Id,Nombre
1, grupo leyes
2, grupo impuestos

entonces si un usuario entra al programa primero debes:

1 recuperar el grupo en el que esta.
2 recuperar la lista de libros a los puede accesar (tabla AccesoADocumentos)
y listo.

de esta manera 1 libro puede ser visto por varios grupos si asi lo necesitas, solo necesitas agregar el libro y el grupo que va a tener acceso y eso hace el truco, OJO siempre y cuando el libro y el acceso al libro estan activos.

si das de baja el libro del catalogo de documentos nadie lo va a poder er.
si das de baja el libro en AccesoADocumentos solo ese grupo no lo va a poder ver.

suerte, salu2.
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 15/12/2015 14:04:14
Hola Gonzalo,
muchas gracias, pero se me plantea otra duda a medida que voy creando este sistema.
¿Cómo lo hago para introducir los datos de un nuevo documento en la tabla AccesoADocumentos?.
Cuando agrego un nuevo documento a la tabla documentos, tengo que seleccionar para qué grupos estaá disponible, puediendo ser para uno o para varios.
¿Como hago para que ese documento se añada a la tabla de acceso con multiples valores en el campo grupo?.
No me aclaro con esto.
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
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Me presento y pido ayuda...

Publicado por gonzalo (615 intervenciones) el 15/12/2015 19:57:19
bueno, aqui necesitas una pagina para registrar el documento nuevo y tal vez otra para editar el acceso al documento, al final te vas a dar cuenta de que las 2 paginas hacen lo mismo asi que con un poco de codigo puedes agregar y editar documentos con la misma pagina.

asi que debes tener un text box para el Id del documento
un text box para el nombre del documentos
una tabla donde muestre los grupos activos y un check box para cada grupo.
y un boton aplicar o guardar (o como lo quieras poner)

aqui entonces debes validar los 2 checkbox y agregar el registro a la tabla de documetnos

despues debes rastrear la pagina para ver cuales checkbox fueron activados y agregas los registros a AccesoADocumentos.

y eso hace el truco.

salu2.
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 16/12/2015 11:11:42
hola Gonzalo, gracias por tu repuesta.
El procesoque mencionas lo entiendo, pero mi duda es como puedo insertar varios valores correspondientes ael el campo grupo de la tabla AccsoADocumentos, pues habrá ocasiones en que un mismo documento se tendrá que asignar a varios grupos. Te pongo un ejemplo:

AccesoADocumentos
Id | grupo | Libro | acceso

1 1 1 false (lucas no tiene acceso a leyes
2 1,2 2 true (lucas tiene acceso a matematicas y también a impuestos)
3 2 1 true (Hugo tiene acceso a leyes)
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
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Me presento y pido ayuda...

Publicado por gonzalo (615 intervenciones) el 17/12/2015 16:38:12
si te fijas en la idea que te puse en la nota anterior

Id Documento [ 0001 ]
Nombre [Leyes ]

dar acceso a los siguientes grupos
[X] grupo 1
[X] grupo 2
[] grupo 3
[] grupo X

[Boton Ok]

esta seria la pantalla que te propongo.

entonces al registrar el grupo de matematicas solo debes activar los checbox del grupo al que deben pertenecer, los checkbox que no se activen no van a ser tomados en cuenta, en este ejemplo al registrar Leyes estas asignandolo tambien al grupo 1 y 2.

ahora, hay varios metodos para rastrear los checkbox, aqui depende si los identificaste como array o individuales, en lo personal no me gustan los array de objetos pero al final tu tomas la mejor descicion.

puedes usar un ForEach($_POST) para tener los nombres de los objetos que hay en la pagina, aqui la ventaja es que los checkbox que no estan activados no estan presetnes en el POST asi que no tienes que preocuparte por evaluar si estan encendidos o apagados, si estan el el POST estan activos, solo debes identificar el checkbox por el nombre y agrgarlo en AccesoADocumentos, aqui entonces los agregas 1x1.

suerte, salu2
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 29/12/2015 16:21:54
Hola de nuevo,
después de una pausa navideña aquí estoy continuando este proyecto.
He creado la página que sube un pdf al directorio uploads/documentos y guarda la ruta del mismo en la BD.
Este es el código:
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
60
61
<?php require_once('../Connections/MySQLconnect.php'); ?>
<?php
// función para subir pdf y guardar path en BD
$errorPDF = "<p>Por favor, selecciona un archivo PDF.</p>";
$successPDF = "<p>Documento cargado correctamente</p>";
$uploadDir = '../uploads/documents/';
if(isset($_POST['upload']))
{
 
//Validate the file type, should be pdf only.
$fileType = array ('application/pdf');
if (in_array($_FILES['documento_path']['type'], $fileType)) {
 
$fileName = $_FILES['documento_path']['name'];
$tmpName = $_FILES['documento_path']['tmp_name'];
$fileSize = $_FILES['documento_path']['size'];
//$fileType = $_FILES['documento_path']['type'];
 
if($fileName==""){
 
$filePath = '';
}
else{
 
$filePath = $uploadDir . $fileName;
}
 
////este código asigna nombre aleatorio a cada imagen
//// get the file extension first
$ext = substr(strrchr($fileName, "."), 1);
//
//// make the random file name
$randName = md5(rand() * time());
//
//// and now we have the unique file name for the upload file
$filePath = $uploadDir . $randName . '.' . $ext;
// Replace spaces with a '_'
$filePath = str_replace(" ", "_", $filePath);
$result = move_uploaded_file($tmpName, $filePath);
 
if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
$filePath = addslashes($filePath);
}
 
$documento_titulo = $_POST["documento_titulo"];
$documento_activo = $_POST["documento_activo"];
 
 
$query = "INSERT INTO descargadocumentos.t_documentos (titulo,activo,path) VALUES('$documento_titulo','$documento_activo','$filePath')";
 
mysql_query($query) or die('Error, query failed : ' . mysql_error());
 
echo $successPDF ;
}
else {
	echo $errorPDF ;}
}
 
?>

Ahora tengo una duda y es como o hago para insertar la información en la tabla t_accesodocumentos a la misma vez que inserto e documento... o quizás lo tenga que hacer separado?. Ando un poco perdido con esto. Gracias.
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
Imágen de perfil de Miguel Hernandez Liebano

Me presento y pido ayuda...

Publicado por Miguel Hernandez Liebano (15 intervenciones) el 29/12/2015 16:46:55
Saludos lo mejor es hacerlo por separado, pero te aconsejo usar el manejo de transacciones para que si algo sale mal no queden datos colgando, sobre todo si hay relaciones entre tablas, seria algo asi:

1
2
3
4
5
6
7
8
9
10
mysql_query("BEGIN");
 
$a1 = mysql_query("INSERT INTO  tabla1 (ttt) VALUES('1')");
$a2 = mysql_query("INSERT INTO tabal2(xxx) VALUES('2')");
 
if ($a1 and $a2) {
    mysql_query("COMMIT");
} else {
    mysql_query("ROLLBACK");
}

lo que hace esto es que si se ejecuta bien $a1 y $a2, cierra la transaccion sino deshace todo lo hecho
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 29/12/2015 17:13:33
muchas gracias, curioso query.
La tabla t_accesodocumentos es así:

id | grupo | documento | acceso

cómo hago para que se inserte la id del documento en la columna documento si ésta se genera automáticamente al insertar el documento nuevo?... no sé si me explico. Es decir, en este mismo query inserto un document cuya id se genera automáticamente y a la vez dica id debe insertarse en la tabla accesodocumentos; cómo la obtengo para insertarla en t_acceso documentos?
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 04/01/2016 16:21:15
Hola, por favor podría alguien ayudarme con esta cuestión?, estoy atascado en esto y no veo una solución.
Muchas gracias
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 06/01/2016 21:34:02
Alguien que me pueda orientar por favor?. Gracias.
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
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Me presento y pido ayuda...

Publicado por xve (6935 intervenciones) el 07/01/2016 08:38:44
Hola Lucas, con este titulo que has puesto (Me presento y pido ayuda...), nunca había entrado en este mensaje... no creía que fuera una pregunta seria...;)

Bien, sobre tu problema, mysql, cada vez que inserta un registro en una tabla que dispone de un id autoincremental, con la instrucción mysql_insert_id obtiene el ultimo id del ultimo insert:
http://php.net/manual/es/function.mysql-insert-id.php

Es esto lo que estas buscando?
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 09/01/2016 12:15:22
Hola xve, pues puede ser que sí, este finde lo miro y lo pruebo.
Gracias
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 16/01/2016 20:17:42
xve, muchas gracias me ha funcionado aunque ahora tengo otras dudas.
La duda que se me plantea ahora queya puedo introducir un documento y asignarle un grupo, ¿cómo hago para que el mismo documento esté dispnible para varios grupos?. Por ejemplo:

Añado un documento a la base de datos:

id_documento | documento_titulo | documento_activo | documento_path

1 Manual 1 1 uploads/01.pdf

Añado el documento a la tabla accesodocumentos:

id | grupo | documento | acceso

1 2 1 true

En este ejemplo el documeno con id 2 es accesible al grupo 2, pero yo necesito que sea accesible a varios grupos.
¿Cómo hago para que se inserte más de un valor en la columna grupo?
No sé si puedo hacer eso o lo mejor sería añadir el mismo documento una vez para cada grupo. En cualquier caso necesito ayuda con esto.
Muchas gracias

PD, pongo aquí el código que tengo de momento.

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php require_once('../Connections/MySQLconnect.php'); ?>
 
mysql_select_db($database_MySQLconnect, $MySQLconnect);
$query_grupos_RS = "SELECT * FROM t_grupos";
$grupos_RS = mysql_query($query_grupos_RS, $MySQLconnect) or die(mysql_error());
$row_grupos_RS = mysql_fetch_assoc($grupos_RS);
$totalRows_grupos_RS = mysql_num_rows($grupos_RS);
?>
 
 
 
<?php
// función para subir pdf y guardar path en BD
$errorPDF = "<p>Por favor, selecciona un archivo PDF.</p>";
$successPDF = "<p>Documento cargado correctamente</p>";
$uploadDir = '../uploads/documents/';
if(isset($_POST['upload']))
{
 
//Validate the file type, should be pdf only.
$fileType = array ('application/pdf');
if (in_array($_FILES['documento_path']['type'], $fileType)) {
 
$fileName = $_FILES['documento_path']['name'];
$tmpName = $_FILES['documento_path']['tmp_name'];
$fileSize = $_FILES['documento_path']['size'];
//$fileType = $_FILES['documento_path']['type'];
 
if($fileName==""){
 
$filePath = '';
}
else{
 
$filePath = $uploadDir . $fileName;
}
 
////este código asigna nombre aleatorio a cada imagen
//// get the file extension first
$ext = substr(strrchr($fileName, "."), 1);
//
//// make the random file name
$randName = md5(rand() * time());
//
//// and now we have the unique file name for the upload file
$filePath = $uploadDir . $randName . '.' . $ext;
// Replace spaces with a '_'
$filePath = str_replace(" ", "_", $filePath);
$result = move_uploaded_file($tmpName, $filePath);
 
if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
$filePath = addslashes($filePath);
}
 
$documento_titulo = $_POST["documento_titulo"];
$documento_activo = $_POST["documento_activo"];
$grupo= $_POST["id_grupo"];
 
 
 
mysql_query("BEGIN");
 
 $a1 = mysql_query("INSERT INTO descargadocumentos.t_documentos (documento_titulo,documento_activo,documento_path) VALUES('$documento_titulo','$documento_activo','$filePath')");
 $documento=  mysql_insert_id();
 
 $a2 = mysql_query("INSERT INTO descargadocumentos.t_accesodocumentos(documento,grupo) VALUES('$documento','$grupo')");
//printf("El último documento insertado tiene el id %d\n", mysql_insert_id());
 if ($a1 and $a2) {
 mysql_query("COMMIT");
 } else {
 mysql_query("ROLLBACK");
 }
 
echo $successPDF ;
}
else {
	echo $errorPDF ;}
}
 
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
 
<body>
<form action="<?php htmlentities($_SERVER['PHP_SELF']); ?>" method="post" enctype="multipart/form-data" name="uploadDocsForm" id="uploadDocsForm">
  <table align="center" cellpadding="8">
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">T&iacute;tulo:</td>
      <td><input name="documento_titulo" type="text" id="documento_titulo" value="" size="32" /></td>
    </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">Disponible para:</td>
      <td><?php do { ?>
          <table width="100%" border="0" cellpadding="3">
            <tr>
              <td width="18%"><?php echo $row_grupos_RS['id_grupo']; ?></td>
              <td width="18%"><input name="id_grupo" type="checkbox" id="id_grupo" value="<?php echo $row_grupos_RS['id_grupo']; ?>" /></td>
              <td width="82%"><?php echo $row_grupos_RS['grupo_nombre']; ?></td>
            </tr>
          </table>
      <?php } while ($row_grupos_RS = mysql_fetch_assoc($grupos_RS)); ?></td>
    </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">Activado:</td>
      <td>si
        <input name="documento_activo" type="radio" id="documento_activo" value="1" checked="checked" />
      <label for="documento_activo"></label>
      no
      <input type="radio" name="activo" id="documento_activo2" value="0" />
      <label for="documento_activo2"></label></td>
    </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">Cargar documento:</td>
      <td><label for="documento_path"></label>
      <input type="file" name="documento_path" id="documento_path" /></td>
    </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">&nbsp;</td>
      <td><input name="upload" type="submit" id="upload" value="subir documento" /> </td>
 
    </tr>
  </table>
 
</form>
<p>&nbsp;</p>
</body>
</html>
<?php
mysql_free_result($grupos_RS);
?>
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
Imágen de perfil de Lucas

Me presento y pido ayuda...

Publicado por Lucas (17 intervenciones) el 16/01/2016 22:22:23
Perdón, ya he encontrado la solución a lo anterior utilizando un foreach así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mysql_query("BEGIN");
 
 $a1 = mysql_query("INSERT INTO descargadocumentos.t_documentos (documento_titulo,documento_activo,documento_path) VALUES('$documento_titulo','$documento_activo','$filePath')");
 
 // esta linea recoje la id del documento insertado
 $documento=  mysql_insert_id();
 
 //esto hace que el documento insertado se asigne a tantos grupos como se hayan seleccionado mediante los checkboes 
 foreach ($_POST['id_grupo'] as $grupo) {
 
 $a2 = mysql_query("INSERT INTO descargadocumentos.t_accesodocumentos(documento,grupo) VALUES('$documento','$grupo')");}
//printf("El último documento insertado tiene el id %d\n", mysql_insert_id());
 if ($a1 and $a2) {
 mysql_query("COMMIT");
 } else {
 mysql_query("ROLLBACK");
 }
 
echo $successPDF ;
}
else {
	echo $errorPDF ;}
}

tengo más dudas, pero esas las dejo para el lunes. MUCHAS GRACIAS A TODOS !!
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