Select dentro del echo de un Select [Ayuda]

  • Autor Autor JoseCuevas
  • Fecha de inicio Fecha de inicio
JoseCuevas

JoseCuevas

Iota
Verificación en dos pasos activada
Verificado por Whatsapp
Buen día betas, tengo el siguiente problema... necesito sacar todos los productos de una tabla y a la vez sacar todas las imágenes de cada producto. Tengo el siguiente código pero solo me muestra 1 producto con su respectiva imagen pero de ahí a mas ya no muestra nada.

PHP:
$sql = "SELECT * FROM products";
                        $result = $conn->query($sql);
                        
                        if ($result->num_rows > 0) {
                            // output data of each row
                            while($row = $result->fetch_assoc()) {
                                $imgns = $imgns.'imgContain'.$row["IdProduct"].',';
                                $id = $row["IdProduct"];
                                echo '
                                <div class="col-md-3 text-center">
                                    ';
                                    
                                    $sql = "SELECT * FROM images where IdProduct = $id";
                                    $result = $conn->query($sql);
                                    
                                    if ($result->num_rows > 0) {
                                        // output data of each row
                                        while($row2 = $result->fetch_assoc()) {
                                        //    echo '<img id="imgContain'.$row2["IdProduct"].'" src="'.$row2["image"].'" class="img-fluid" style="width:100px; height:100px;cursor: pointer;">';
                                        }
                                    } else {
                                        echo "0 results";
                                    }
                                    
                                    echo '
                                    <p class="mb-0">'.$row["ProductName"].'</p>
                                    <p class="my-1">$'.$row["ProductCost"].'</p>
                                    <form action="payment.php" method="get">
                                        <input type="hidden" class="form-control" name="IdProduct" value="'.$row["IdProduct"].'">
                                        <button type="submit" class="btn rounded-0 w-75" style="background:#1f8cc2;font-size:13px;" data-toggle="modal" data-target="#cart"><i class="fas fa-shopping-cart"></i> Add To Cart</button>
                                    </form>
                                </div>
                                ';
                            }
                        } else {
                            echo "0 results";
                        }

Nota: Los registros de la tabla imagenes si corresponden con los ids de la tabla products, lo raro aquí es que me muestra bien solo el primer artículo y actúa como si ya saliera del while principal de productos... ¿Alguna idea?

Gracias!
 
Hola

Yo te diria que comenzaras con ver cuantos id recoges en el primer while y revisa cuantos registros lees en $result->num_rows.

Trata de cambiar el nomre de variables. sobre todo cuando una es interna de la otra por ejemplo en $result->num_rows lo utilizas uno dentro del otro.

Saludos
 
Estoy desde el celular y no pude ver el código en detenimiento pero no intentaste recolectando los datos todos juntos en un mismo select con inner join? Saludos
 
Hola, estoy del celular a ver si te sirve, comentas si te da un error
PHP:
$sql = "SELECT pro.*, img.* FROM products pro INNER JOIN images img ON img.IdProduct = pro.IdProduct"; 
$result = $conn->query($sql); 
 
if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) {
        $id = $row["pro.IdProduct"];
        $ProductName = $row["pro.ProductName"];
        $ProductCost = $row["pro.ProductCost"];
        $imgns = $imgns.'imgContain'.$id.',';         
        $image = $row["img.image"];
        echo '
        <div class="col-md-3 text-center">'; 
             
        echo '<img id="imgContain'.$id.'" src="'.$image.'" class="img-fluid" style="width:100px; height:100px;cursor: pointer;">'; 
             
        echo ' 
            <p class="mb-0">'.$ProductName.'</p> 
            <p class="my-1">$'.$ProductCost.'</p> 
            <form action="payment.php" method="get"> 
                <input type="hidden" class="form-control" name="IdProduct" value="'.$id.'"> 
                <button type="submit" class="btn rounded-0 w-75" style="background:#1f8cc2;font-size:13px;" data-toggle="modal" data-target="#cart"><i class="fas fa-shopping-cart"></i> Add To Cart</button> 
            </form> 
        </div> 
        '; 
    } 
} else { 
    echo "0 results"; 
}
 
El problema ha de ser que estás usando la misma variable para obtener los resultados de las 2 consultas distintas que es $result. En el momento que haces esto:

$sql = "SELECT * FROM images where IdProduct = $id";
$result = $conn->query($sql);

Pierdes de $result los demás registros de los productos y obviamente abajo tienes un while que recorre con esa misma variable los resultados de las imágenes, cámbiala por $result2 y con eso debe funcionar.
 
Atrás
Arriba