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
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