Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Despublicar paquete para un usuario en particular.

Estas en el tema de Despublicar paquete para un usuario en particular. en el foro de PHP en Foros del Web. Hola gente del forosdelweb!! como están? Estoy armando un sistema de publicación de paquetes en php y mysql con 3 niveles de usuarios, Admin, proveedor ...
  #1 (permalink)  
Antiguo 16/06/2014, 08:39
 
Fecha de Ingreso: junio-2014
Ubicación: Buenos Aires
Mensajes: 5
Antigüedad: 9 años, 10 meses
Puntos: 0
Despublicar paquete para un usuario en particular.

Hola gente del forosdelweb!! como están?
Estoy armando un sistema de publicación de paquetes en php y mysql con 3 niveles de usuarios, Admin, proveedor y gestor. Lo que carga el admin y el proveedor, se carga en todos los usuarios, pero quiero darle al usuario "gestor" la posibilidad de despublicar esos paquetes si no los quiere. Lo que no logro hacer es que ese paquete se despublique para un usuario en particular.
Les agradezco mucho su tiempo!!

Saludos!

Emanuel
  #2 (permalink)  
Antiguo 16/06/2014, 11:37
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Despublicar paquete para un usuario en particular.

Sin ver tu BD ni el código que tienes para dicha tarea, supongo que lo que necesitas es una tabla en la BD llamada (por ejemplo) banned_packs que contenga un id, id del paquete y id del usuario, entonces cuando quieras mostrar un paquete o lista de paquetes a un usuario debes consultar en esa tabla qué paquetes están baneados o baneado para el usuario.
__________________
Ayúdame a hacerlo por mi mismo.
  #3 (permalink)  
Antiguo 16/06/2014, 14:05
 
Fecha de Ingreso: junio-2014
Ubicación: Buenos Aires
Mensajes: 5
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Despublicar paquete para un usuario en particular.

Muchisimas gracias!, me salvaste!
Saludos!
  #4 (permalink)  
Antiguo 19/06/2014, 13:27
 
Fecha de Ingreso: junio-2014
Ubicación: Buenos Aires
Mensajes: 5
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Despublicar paquete para un usuario en particular.

Estuve probando lo que me comentastes, pero no logro mostrar cuando están activos o inactivos.
Por ejemplo, tengo éste codigo:
Código PHP:
Ver original
  1. include_once "connect.php";
  2.              
  3.             if ($_SESSION['permissions']=='admin'){
  4.                 $sql = "SELECT * FROM packages";//admin
  5.                 }
  6.             if ($_SESSION['permissions']=='gestor'){
  7.                 $sql = "SELECT * FROM packages WHERE user_id = '".$_SESSION ['idusuario']."' OR geapackage = '1'";//gestor
  8.                 }
  9.             if ($_SESSION['permissions']=='proveedor')
  10.                 $sql = "SELECT * FROM packages WHERE user_id = '".$_SESSION ['idusuario']."'";{//proveedor
  11.                 }
  12.      
  13.                 $res = mysqli_query($conn, $sql);
  14.                 echo mysqli_error($conn);
  15.            
  16.              while ($fila = mysqli_fetch_assoc($res)) {  
  17.  
  18.                     include_once "connect.php";
  19.                     $sql2 = "SELECT * FROM banned_packages";
  20.                     $res2 = mysqli_query($conn, $sql2);
  21.                     echo mysqli_error($conn);
  22.                         while ($fila2 = mysqli_fetch_assoc($res2)) {  
  23.                              $fila2['package_id_pb'];
  24.                              $fila2['user_id_pb'];
  25.                         }
  26.                
  27.                echo "<tr>      
  28.                            
  29.                                 <td>".$fila['id']."</td>
  30.                                 <td>".$fila['user']."</td>
  31.                                <td>".$fila['name']."</td>
  32.                                <td>".$fila['duration']." noches</td>      
  33.                                 <td>$".$fila['price']."</td>
  34.                                 <td>".$fila['base']."</td>
  35.                                 <td>".$fila['date']."</td>
  36.                                 <td>".$fila['validity']."</td>
  37.                                 <td>".$fila['feature']."</td>
  38.                                 <td>".$fila['created']."</td>
  39.                                 <td>".$fila['lastmodified']."</td>";
  40.                                
  41.                                 if ($fila['id']=$fila2['package_id_pb']&&$fila['user_id']=$fila2['user_id_pb']){
  42.                                      echo '<td>INACTIVO</td>';
  43.                                      } else {
  44.                                          echo '<td>ACTIVO</td>';
  45.                                          }
  46.                                
  47.                                 echo "<td><a href='packageedit.php?package_id=".$fila['id']."&user_id=".$fila['user_id']."'><i class='fa fa-pencil'></i></a></td>";
  48.                                
  49.                                 if ($_SESSION['permissions']=='gestor'){
  50.                                     if($fila['user_id']==$_SESSION['idusuario']){
  51.                                         echo "<td><a onclick='return confirm(\"Seguro que deseas borrar este paquete?\")' href='packagedelete.php?borrar=".$fila['id']."&img=".$fila['image']."'><i class='fa fa-ban'></i></a></td>";
  52.                                         } else{
  53.                                             echo "<td></td>";
  54.                                             };
  55.                                 } else {
  56.                                         echo "<td><a onclick='return confirm(\"Seguro que deseas borrar este paquete?\")' href='packagedelete.php?borrar=".$fila['id']."&img=".$fila['image']."'><i class='fa fa-ban'></i></a></td>";
  57.                                         }
  58.                                
  59.                                 echo"</tr>";
  60.             };
  #5 (permalink)  
Antiguo 20/06/2014, 07:06
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Despublicar paquete para un usuario en particular.

Pienso que estás entendiendo mal el concepto.

Me parece que estás intentando hacer con PHP lo que deberías hacer con MYSQL.

Si tienes dos tablas y debes recoger datos de ambas ¿cómo lo harías? ¿Primero de una y luego de otra o de las dos a la vez ahorrando una consulta=ahorro de código y ahorro de costos de proceso?

Lee sobre JOIN, INNER JOIN, LEFT JOIN y RIGHT JOIN de MYSQL para saber que podrías reducir todo ese código a 1/3, haciéndolo más eficiente, eficaz, rápido e inteligible.
__________________
Ayúdame a hacerlo por mi mismo.
  #6 (permalink)  
Antiguo 20/06/2014, 09:36
 
Fecha de Ingreso: junio-2014
Ubicación: Buenos Aires
Mensajes: 5
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Despublicar paquete para un usuario en particular.

Entiendo, perfecto.
Hice lo que me decís, pero solo logro que me devuelva los paquetes que están despublicados. y yo lo que necesito es que me muestre todos los paquetes y si esta publicado o no.
Estoy haciendo la consulta con éste sql:
Código SQL:
Ver original
  1. SELECT u.id, u.nombre, p.package_name,st.STATUS
  2.                             FROM (users u, packages p) LEFT JOIN banned_packages st
  3.                             ON st.user_id = u.id
  4.                             WHERE
  5.                             p.id = st.package_id

Agradezco mucho tu ayuda!
  #7 (permalink)  
Antiguo 21/06/2014, 07:16
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Despublicar paquete para un usuario en particular.

Cita:
Iniciado por emanuelarcos Ver Mensaje
Entiendo, perfecto.
Hice lo que me decís, pero solo logro que me devuelva los paquetes que están despublicados. y yo lo que necesito es que me muestre todos los paquetes y si esta publicado o no.
Estoy haciendo la consulta con éste sql:
Código SQL:
Ver original
  1. SELECT u.id, u.nombre, p.package_name,st.STATUS
  2.                             FROM (users u, packages p) LEFT JOIN banned_packages st
  3.                             ON st.user_id = u.id
  4.                             WHERE
  5.                             p.id = st.package_id

Agradezco mucho tu ayuda!
Me ha costado varias horas encontrar la solución a este problema porque estoy muy verde en cuanto a BD. No soy profesional como lo pueda ser otro usuario del foro que se dedica profesionalmente a ello y uno en especial al que admiro por sus conocimientos sobre este asunto.

De paso decirte que este es el foro de PHP y no de MYSQL, así que lo acertado hubiera sido hacer una pregunta específica en ese foro después de haber analizado detenidamente cual es tu problema con el sistema que estás creando.

Si bien entendí, lo que deseas es obtener una lista de todos los paquetes y además solo mostrarle al gestor los paquetes que están baneados y para quien está baneado.

Bueno, pues eso se puede hacer de dos maneras:

Manera 1)

Código MySQL:
Ver original
  1. use pruebas;
  2.  
  3.         P.idpackages,
  4.         P.package,
  5.         BP.idbanned_packages,
  6.         BP.idpackages,
  7.         BP.idusers
  8. FROM packages P
  9.  
  10.     banned_packages BP
  11.     BP.idpackages = P.idpackages
  12. ORDER BY P.idpackages

Manera 2)

Código MySQL:
Ver original
  1. use pruebas;
  2.  
  3.         P.idpackages,
  4.         P.package,
  5.         BP.idbanned_packages,
  6.         BP.idpackages,
  7.         BP.idusers
  8. FROM packages P
  9.  
  10.     banned_packages BP
  11.     BP.idpackages = P.idpackages and BP.idusers !=2
  12. ORDER BY P.idpackages

¿Cual es la diferencia entre la 1 y la 2?

Pues en la cantidad de resultados duplicados que devuelve.

La manera 1 devuelve todos los paquetes, pero además todos los usuarios baneados de cada paquete, lo que hace que un paquete se repita dos, tres, cuatro, X nº de veces necesarias para mostrar cada usuario baneado de cada paquete.

La manera 2 devuelve todos los paquetes, pero solamente muestra el usuario en la tabla banned_packages especificado en el ON del LEFT JOIN, evitando duplicar paquetes, dando la posibilidad de poder hacer limit (para por ejemplo paginación de resultados con PHP) y acorta la longitud del resultado. Es ideal para filtrar una búsqueda de paquetes baneados por usuario. Aunque más ideal sería solamente mostrar los paquetes en los que el usuario está baneado, sin mostrar el resto de los paquetes.

Ahora solamente te queda elegir qué manera te sirve más para tu finalidad, cambiar los alias y nombres de tablas por las tuyas y además en la manera 2 hacer dinámica la igualdad de BP.idusers != $id_del_usuario

Luego solamente tienes que detectar en PHP que donde no sea NULL no lo muestre o muestre, según quieras.

Y recuerda, siempre utiliza alias para los nombres de las tablas, creeme que ayuda a entender un código SQL.
__________________
Ayúdame a hacerlo por mi mismo.

Última edición por guardarmicorreo; 21/06/2014 a las 07:24
  #8 (permalink)  
Antiguo 14/07/2014, 11:40
 
Fecha de Ingreso: junio-2014
Ubicación: Buenos Aires
Mensajes: 5
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Despublicar paquete para un usuario en particular.

Muchisimas Gracias!, me sirvió!!
Saludos!

Etiquetas: mysql, paquete, 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 19:22.