entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

-1voto

Como mostrarle al usuario solo lo que este registre en el sistema

Estoy trabajando en un sistema para registrar catalogos pero necesito mostrar solo lo catalogos que cada usuario registre que por ende le pertenecen, el admnistrador si podra ver todos los catalogos. gracias :)

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola iPHP,

es una pregunta un poco amplia, pero intentaré responder en general y asumiendo varias cosas que no decís, como que estás usando tablas de bases de datos relacionaes en 3ra forma normal y que los usuarios ya se autentifican.:

a) en la tabla en la que se guarda el catálogo, guardas el ID del usuario o su nombre (algún dato que sea único del usuario) en todos los registros que cree.

b) cuando un usuario se loguea, agregas a la query que trae los datos del catálogo una restricción para que traiga solo los del usuario logueado.

Por ejemplo si tu consulta actual es:

SELECT * FROM Catalogo

y suponiendo que guardas el ID del usuario logueado en el campo id_usr, la consulta cambiaría a:

SELECT * FROM Catalogo WHERE id_usr=Variable_con_el_ID_del_Usuario

y de esta forma solo traerías los registros que haya creado ese usuario.

Para que el administrador vea todo, no pones esta parte del WHERE.

Espero haberte orientado un poco. Para más detalles, tendrías que aclarar más cosas como lenguaje de programación, manejador de bases de datos, estructura de la(s) tabla(s) del catálago y forma y mecanismo de autentificación.

Saludos cordiales

0voto

iphp comentado

Muchas gracias! definitivamente si me ayuda mucho aunque me saca mas dudas xD pero de esto se trata este show, bueno para aclarar un poco mas las cosas esto lo estoy desarrollando en php y mysql sobre GNU/Linux, no lo mencione debido a que supuse que para eso eran las etiquetas xD, se me ocurre algo que tal vez nos facilitaria la vida a los dos mira cada usuario pertenece a un municipio, es decir que por cada municipio debera haber un unico usuario y tengo una tabla donde administro los municipios, esto porque en la tabla catalogos le puse el id del municipio para que el administrador pueda ver los catalogos de acuerdo al municipio, asi hago un select de acuerdo al municipio que eligio el administrador y solo le muestra los catalogos que pertenecen a ese municipio y nadamas.

De hecho creo que con eso que hize es aplica tambien para los usuarios pero aun no logro concetarlo para este caso.

La forma de autentificar va de esta manera, una vez que registre al usuario en este caso el administrador, tengo la siguiente funcion que se encarga de hacer este trabajo:

public function logueo() {
    //$nombre=$_POST[""];
    $this->conectar();
    $user = $_POST["user"];
    $pass_php = md5($_POST["pass_php"]);
    //echo "user = $user<br>pass_js = $pass_js<br>pass_php = $pass_php";
    $query = $this->consulta("SELECT * FROM usuarios where user = '$user' and pass_php = '$pass_php'");
    //echo "$sql";
    if ($this->numero_de_filas($query) == 0) {
        echo "<script type = 'text/javascript'>

alert('Los datos ingresados no existen en la base de datos');
window.location = 'index.php?action=iniciar';
</script>";
} else {
//echo "si existen";
if ($result = $this->fetch_assoc($query)) {
$_SESSION["session_user"] = $result["id_usuario"];
header("Location: home.php");
}
}
$this->disconnect();
}

como veis por lo pronto tengo una tabla de usuarios, una de municipios y la de los catalogos por suspuesto, espero esto pueda orientarte tambien a ti para que me puedas seguir contestando.

Saludos y muchas gracias por la atencion :)

1voto

Leonardo-Tadei comentado

Por el código que envías para la autentificación, bastaría que a la variable de sesión le agregues por ejemplo:

if ($result = $this->fetchassoc($query)) {
   $SESSION["sessionuser"] = $result["idusuario"];
   $SESSION["sessionmunicipio"] = $result["idmunicipio"];
   header("Location: home.php");
}

con lo que luego, salvo para el administrador, ejecutas la query que trae los catálogos dependiendo del municipio del usuario logueado como e digo en la primer respuesta.

Para hacer esto tendrías que modificar la query que hace el login para agregarle un join con la tabla de Municipios, y de ahí obtener el valor de idmunicipio, o, siendo más desprolijo, hacer adentro del IF una query que te devuelva este otro valor.

0voto

iphp comentado

Si!! estube pensando en unir las tablas con un join pero no estoy lo suficiente familiarizado con eso podrias darme un ejemplo de como hacerlo??

Por ejemplo se me ocurre hacer una tabla que se llame por ejemplo colaboradores, esta seria aparte de la de los usuarios, y otra donde tenga los puros id de cada tabla como foreign key y al hacer el join asi me traigo los datos de acuerdo al id, o tu como vez?

1voto

Leonardo-Tadei comentado

Hola iPHP,

las tablas y campos que contengan no es una labor creativa hallarlos, sino que se obtienen aplicando las Formas Normales, o directamente llamada Normalización. No es cuestión de ir por ahí inventando campos ni tablas!

La Normalización te garantiza la integridad de los datos, la no duplicació, el poder acceder unívocamente a un registro, y por sobre todo, que siempre existirá una query para obtener los datos que te hagan falta. Hay varios grados de Normalización, pero con que llegues a la 3ra Forma Normal será suficiente para casi todo lo que hagas.

Si no manejás el concepto, te repito la sugerencia del mensaje anterior: hacé una query adentro del IF para obtener el idmunicipio del usuario logueado, y ese idmunicipio mantenelo como una variable de sesión.

Te dejo un enlace con una visión general del tema de la Normalización, pero te insisto que es mejor no agregar un problema más a los que ya tenés: http://es.wikipedia.org/wiki/Normalizaci%C3%B3n_de_bases_de_datos

0voto

iphp comentado

Ouu ya me regañaste, pero se que tienes razon u.u, la verdad si necesito dominar mejor el concepto de la normalizacion al menos creo que mi base de datos llega a la segunda forma normal, pero bueno pondre manos a la obra con lo que me haz ayudado y te contare como lo solucione, por lo pronto nuevamente se te agradece! y pues aqui andamos

0voto

Leonardo-Tadei comentado

Pero si no te regañaba! Solo quería orientarte para que mejores tus habilidades y generes código de mayor calidad.

Si la respuesta te sirvió, recuerda marcarla como "la mejor" así queda disponible cómo válida en el sistema.

Saludos cordiales!

0voto

iphp comentado

Si claro solo es una expresion :D, se que lo haces con la mejor intencion.

Ya quedo como la mejor respuesta.

Que estes muy bien!!

0voto

iphp comentado

Que hay Leonardo, aquí de nuevo para ver si podrías ayudarme, ya pude insertar catálogos de acuerdo al usuario :),pero hago mi consulta y no me trae los catálogos del usuario logueado :(

Este es mi codigo:

<?php

session_start();

require_once "app/model/Database.php";
require_once "app/model/Usuario.php";

if (isset($_SESSION["session_user"])) {
//print_r($_SESSION);

$user = $_SESSION["session_user"];

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>
    <title>SIC</title>

</head>

<body>
    <h2>Bienvenido <?php 
    //Saludamos al Usuario.
    echo $user;     
    ?>         <a href="salir.php"><img src="images/sali_3.jpg" width=35> </a></h2>

                    <?php
                    require_once 'class/Catalogo.php';
                    require_once 'class/Generales.php';

                    $obj = new Catalogo();

                    ?>
                    <h2><?php echo $user; ?></h2>

                    <?php
                    $catalogo_array = $obj->get_catalogos_user($user);

                    if (is_array($catalogo_array) && count($catalogo_array) > 0) {
                        ?>

                        <table width ="100%">
                            <?php
                            foreach ($catalogo_array as $row) {
                                $url = "detalles_catalogo.php?no_catalogo=" . $row['no_catalogo'];
                                ?>
                                <tr>

                                    <td width="100">
                                        <a href="<?php echo $url; ?>">
                                            <img src="<?php echo $row['img']; ?>" border="0">       
                                        </a>
                                    </td>

                                    <td>    
                                        <?php
                                        $title = $row['titulo'];
                                        Generales::do_html_URL($url, $title);
                                        ?>  
                                    </td>

                                </tr>

                                <?php
                            }
                        } else {
                            echo "<strong>No tienes catalogos.</strong><br><br><br>";
                            echo "<a href='insertar_catalogo.php'>
        <img src='images/agregar.png' border=0></a>";
                        }
                        ?>

                    </table>
</body>

</html>

<?php

} else {
echo "
<script type='text/javascript'>
alert('Debe loguearse primero para acceder a este contenido');
window.location='index.php';
</script>
";
}
?>

El metodo get_catalogos_user que me traigo de la librería Catalogo es el siguiente:

public function get_catalogos_user($user) {
    $conn = Conexion::db_connect();

    $sql = "SELECT * FROM catalogos WHERE user=$user";
    $result = $conn->query($sql);

    if (!$result)
        return false;

    $prod_array = array();

    while ($reg = $result->fetch_assoc()) {
        $prod_array[] = $reg;
    }
    return $prod_array;
}

Que estará pasando????, me arroja el mensaje de que no tengo catalogos

0voto

Leonardo-Tadei comentado

Hola iPHP,

una pregunta de validación de que las cosas funcionan: alprincipio de tu código,i despueś de hacer

$user = $_SESSION["session_user"];

hacés

print("El usuario es: $user");

Qué salida da tu script?

vacío? un nombre de usuario? un número que es el ID del usuario?

PD: sería bueno pasar esto (más bien la pregunta siguiente) a una pregunta nueva, así no se mezcla con la solución anterior, porque el tema continua pero la pregunta es otra.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta