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

No me trae los catalogos de acuerdo al nombre de usuario

Que tal!, pues aqui estoy de nuevo, consegui insertar catalogos de acuerdo al usuario pero ahora quiero traerme los catalogos de acuerdo al usuario logueado pero no lo consigo,ojala puedan echarme una mano

Este es mi codigo:

<?php
requireonce "app/model/Database.php";
requireonce "app/model/Usuario.php";
if (isset($SESSION["sessionuser"])) {

$user = $_SESSION["session_user"];
?>

<head>

<title>SIC</title>
</head>
<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>

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

El metodo getcatalogosuser 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;
}

Nota: Cuando hago la validacion de que las cosas funcionan al principio del codigo en:

$user = $_SESSION["session_user"];

Despues si se dan cuenta hago esto:

<h2>Bienvenido <?php //Saludamos al Usuario.
echo $user;     
?>

Y hasta ahi se me trae el nombre del usuario logueado lo que indica que hasta ahi va bien, esto como dato para @Leonardo-Tadei y por si acaso alguien mas se preguntara lo mismo.

2 Respuestas

2votos

Leonardo-Tadei Puntos227320

Hola iPHP,

en la tabla de Catálogos, lo que creo que estás guardando es el ID del usuario.

Sin embargo el valor de la variable $user cuándo se emite el saludo dice el nombre del usuario, y al hacer la query

$sql = "SELECT * FROM catalogos WHERE user=$user";

te devuelve vacío, porque no hay ningún ID de usuario que conincida con el nombre de usuario (lo cuál está bien).

Lo que tendrías que hacer al iniciar la sesión es guardar además de lo que ya se guarda el ID del usuario, y luego usar ESE valor para pasarle como mensaje a get_catalogos_user($user).

Si en la tabla Catalogos estás guardando el nombre del usuario en vez del ID, tendremos que buscar otro motivo...

-1voto

iphp comentado

Que tal Leonardo, en primer lugar gracias por seguir atendiendo a mis dudas, creo que si tendremos que buscar otro motivo debido a que en mi tabla Catalogos lo que guardo si es el nombre de usuario y no el id, intentare hacerlo por el id para ver que sucede ....

1voto

Leonardo-Tadei comentado

No es posible depurar esto sin tener la estructura y los datos de las tablas...

Si en la tabla Catálogos guardás el nombre del usuario, te recomiendo hacer lo siguiente:

Debbuguear la query:

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

$sql = "SELECT * FROM catalogos WHERE user=$user";
print("Debug get_catalogos_user: $sql");
...

para obtener la consulta generada. Copiala y pegala por acá para que la veamos.

Luego, copiá y pegá esa consulta tal cual se genera en alguna herramienta de administración de MySQL (como PHPMyAdmin) ejecutá esa consulta para ver si te devuelve algo o no o si da un error de sintaxis.

1voto

Nebur Puntos1140

Prueba a poner esta sentencia:
$sql = "SELECT * FROM catalogos WHERE user=$user";

de esta forma:
$sql = "SELECT * FROM catalogos WHERE user='" . $user . "'";

1voto

carlossevi comentado

En principio venía a comentar lo mismo que tu (y te voté positivo) pero después me dí cuenta de que en la construcción de cadenas con comillas dobles las variables se analizan y sustituyen por su valor.

Ya no estoy tan seguro de si el problema puede venir de no poner entre comillas el valor de la cadena de comparación:

$sql = "SELECT * FROM catalogos WHERE user='$user'";

Independientemente del problema actual, en este tipo de consultas te aconsejaría evitar construir estas consultas sin utilizar algún método para prevenir el SQL Injection.

1voto

iphp comentado

Gracias a todos por contestar!!, tengo que decirles que el problema desistió por algo diferente, realice el mismo procedimiento pero en linux y así es como me funciono :/, en windows seguía pasando lo mismo

Saludos!

0voto

Peter comentado

Podrías publicar la solución en una respuesta y marcarla como correcta :)

Saludos.

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