-1

Estoy tratando de hacer una tienda online, en mi caso lo que quiero hacer es mostrar los productos que se venden (ya lo tengo) pero quiero que el cliente pueda ver más información del producto en otra ventana con las imágenes (como hacen todas las tiendas) en mi caso yo muestro los productos desde PHP los mando a imprimir directamente de la BD.

Mi idea es intentar que el producto que selecciono me lo muestre en la otra pestaña (solo ese) creo que para eso tengo que guardar el valor del producto seleccionado y mandarlo al otro lado para desde ahí ya sea con el ID mandar a pedir la información o mandar toda la información desde el otro PHP.

<div class="container">
<?php include('pospos/user/cart_search_field.php'); ?>
<div style="height: 80px;"></div>
<div>
<?php
    $inc=4;
    $query=mysqli_query($conn,"select * from product where categoryid = 1");
    while($row=mysqli_fetch_array($query)){

        $inc = ($inc == 4) ? 1 : $inc+1; 
        if($inc == 1) echo "<div class='row'>";  

        ?>
            <div class="col-lg-3">
            <div>
                <img src="pospos/<?php if (empty($row['photo'])){echo "upload/noimage.jpg";}else{echo $row['photo'];} ?>" style="width: 230px; height:230px; padding:auto; margin:auto;" class="thumbnail">
                <div style="height: 10px;"></div>
                <div style="height:40px; width:230px; margin-left:17px;"><?php echo $row['product_name']; ?></div>
                <div style="height: 10px;"></div>
                <div style="display:none; position:absolute; top:210px; left:10px;" class="well" id="cart<?php echo $row['productid']; ?>">Qty: <input type="text" style="width:40px;" id="qty<?php echo $row['productid']; ?>"> <button type="button" class="btn btn-primary btn-sm concart" value="<?php echo $row['productid']; ?>"><i class="fa fa-shopping-cart fa-fw"></i></button></div>
                <?php
                    $variable1 = ['productid'];
                    $variable2 = "";
                ?>

                <div style="margin-left:17px; margin-right:17px;">
                    <button type="button" class="btn btn-primary btn-sm addcart" value="<?php echo $row['productid']; ?>"><i class="fa fa-shopping-cart fa-fw"></i> Add to Cart</button> <span class="pull-right"><strong>$<?php echo number_format($row['product_price'],2); ?></strong></span> 
                </div>
            </div>
            </div>
        <?php
    if($inc == 4) echo "</div><div style='height: 30px;'></div>";
    }
    if($inc == 1) echo "<div class='col-lg-3></div><div class='col-lg-3'></div><div class='col-lg-3'></div></div>"; 
    if($inc == 2) echo "<div class='col-lg-3'></div><div class='col-lg-3'></div></div>"; 
    if($inc == 3) echo "<div class='col-lg-3'></div></div>"; 
?>
</div>

Dev. Joel
  • 23,229
  • 3
  • 25
  • 44
Thanatos9516
  • 192
  • 1
  • 1
  • 13

3 Answers3

2

Lo que tratas de realizar es crear el detalle del producto, para esto tienes que enviar el id del producto a la página donde se mostrará más detalle del mismo.

Vamos por parte, en la consulta que realizas para mostrar el listado de los productos, debes llamar un dato adicional de la tabla en este caso el id del producto, observó en su código que ya lo estas utilizando $row['productid'];.

Entonces, ahora lo que se necesita es agregar a la consulta donde muestras el listado de los productos lo siguiente:

<a href="details.php?id=<?php echo $row['productid']; ?>">Más detalle</a>

Ahora si al dar clic en [Más detalle] de algún producto por ejemplo: detail.php?id=1 y luego desde PHP obtener el valor de la URLs con $_GET

Ejemplo:

details.php

if (isset($_GET['id'])){
  $id = $_GET['id'];
  $sql = "SELECT * FROM product WHERE productid='".$id."'";
  $result = mysqli_query($conn, $sql);
}

if(mysqli_num_rows($result) > 0){
while($row = mysqli_fetch_array($result)){
    $id = $row['productid'];
    $title = $row['title'];
    $product = $row['product'];
    $precio = $row['price'];
    $imagen = $row['image'];        
  }
} else {
  echo "Lo sentimos no existe detalle de este producto por el momento";
}
?>

Luego ya puedes ir mostrando lo que deseas en la página detail.php o como desees llamarle, de la siguiente manera: <h1><?php echo $product; ?></h1>

Eso seria todo...

Ahora solo me queda dar algunas recomendaciones, utilizar sentencias preparadas para evitar posibles inyecciones SQL, posibles vulnerabilidades del sistema entre otros.

Más información sobre el tema, leer las siguientes fuentes:

Publisere.com
  • 2,384
  • 5
  • 14
  • ya te iba a preguntar sobre las inyecciones jajaja muchas gracias por dejar los datos, voy a informarme acerca del tema para evitar posibles fallos al sistema.!!! – Thanatos9516 Dec 09 '17 at 05:31
  • Muchas gracias de verdad, mi cliente va a agradecer tu información, es un proyecto serio y no quiero que mi cliente pierda información. – Thanatos9516 Dec 09 '17 at 05:36
  • amigo como lo hago?? yo intento darles la flecha pero dice que mi voto solo se sumará pero no se mostrará por mi nivel – Thanatos9516 Dec 11 '17 at 15:59
  • Esta fue la respuesta que me sirvió por si alguien llega a ocupar lo mismo!! no sé marcar así que dejo el comentario para que sepan!! las otras respuestas son muy interesantes pero esta fue la que mejor se me adaptó! – Thanatos9516 Dec 11 '17 at 16:01
  • @JoséLuisMolinaCascante Al parecer ya has dado donde marcar las pregunta que te han ayudado a solucionar el problema, me alegra saber que haya aportado en tu problema, te invito a indagar más en el sitio para que te adaptes a él de la mejor forma... Saludos :) – Publisere.com Dec 11 '17 at 17:55
  • Muchas gracias amigo, voy a indagar más para sentirme más familiarizado, disculpa que tarde tantos días en responder, pero con esto del año nuevo he estado de locos... – Thanatos9516 Jan 09 '18 at 06:15
0

Sí , una opción sería pasar el id único de su entidad a la otra página por medio del método GET por URL para luego desde PHP obtener el valor con $_GET y realizar la consulta respectiva. (asumo que product_id es su clave única)

Página Actual

 <div style="height: 10px;"></div>
 <div><a href="detalle.php?id=<?php echo $row['product_id']; ?>">Ver Más</a></div>

En tu archivo detalle , obtienes el id del elemento y haces la consulta respectiva con su id y le das el formato adecuado.

detalle.php

<?php 

if(isset($_GET['id']) && !empty($_GET['id'])){
  $id = $_GET['id'];
  //Query y el resultado le da el formato y estilo que desee.
}
else{
    header('Location:index.php');
}

Con respecto al archivo detalle.php , debe tener en cuenta al momento de realizar la consulta no concatenar el valor. Para más detalle revisar ¿Cómo evitar la inyección SQL en PHP?

Dev. Joel
  • 23,229
  • 3
  • 25
  • 44
0

Se puede, otra forma es utilizar sesiones Sesiones en PHP crea un documento que guarde el producto

<?php
   session_start(); //inicia la sesión
   $_SESSION["productoid"] = $_POST["id"];//guardar el id
   //puede crear tantas variables de sesiones requieras aqui solo uso una
?>

utilizando Jquery manda el valor al documento anterior

$("button").click(function(){
     $.ajax({                        
           type: "POST",                 
           url: "documento_sesion.php", //el ducumento anterior                    
           data: {"id":"valor","otro":"valor"},  //el VALOR lo recuperas con Jquery por ejemplo $("#valor").val(); puedes enviar varios datos
           success: function(data)             
           {
            //guardado exitoso               
           }
       });
});

En el otro PHP solo recuperas el valor (o valores) de la sesión:

<?php
   session_start(); //recupera la sesión
   $id=$_SESSION["productoid"];
?>
Rafael Bautista
  • 2,603
  • 6
  • 20
  • 35