Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Arm144 en 30 Mayo 2017, 23:17 pm



Título: Obtener id dinámico en jQuery
Publicado por: Arm144 en 30 Mayo 2017, 23:17 pm
Buenas miren cargo una serie de productos desde una BD de la siguiente forma:
Código
  1. <?php
  2. /* .... */
  3.  
  4. while ($row = $stm->fetchAll(PDO::FETCH_ASSOC)) {
  5.   foreach($row as $producto){
  6. ?>
  7. <div class="item  col-xs-4 col-lg-4">
  8. <div class="thumbnail">
  9. <img class="group list-group-image" src="<?=$producto['img_producto']?>" alt="<?=$producto['nombre']?>" />
  10. <div class="caption">
  11. <h4 class="group inner list-group-item-heading">
  12. <?=$producto['nombre']?></h4>
  13. <p class="group inner list-group-item-text">
  14. <?=$producto['descripcion']?></p>
  15. <div class="row">
  16. <div class="col-xs-12 col-md-6">
  17. <p class="lead"><?=$producto['precio']?> €</p>
  18. </div>
  19. <?php
  20. error_reporting(E_ALL ^ E_NOTICE);
  21. if($_SESSION['conectado']!=="si"){
  22. ?>
  23. <div class="col-xs-12 col-md-6">
  24. <p  style="background:#FFD700;box-shadow: 1px 1px 5px #00288A;"class="group inner list-group-item-text">Para comprar <a style='color: black;' data-toggle="modal" href="#miModalIniSesion">Inicie Sesión</a> o <a style='color: black;' data-toggle="modal" href="#miModalReg">Registrese</a></p>
  25. </div>
  26. <?php }else if($_SESSION['conectado']=="si"){ ?>
  27. <div id='content' class="col-xs-12 col-md-6">
  28. <form id='formCarrito' method="post">
  29. Cantidad: <input type="number" id='cantidad' name="cantidad" placeholder="0" style="width: 50px;margin-bottom: 2px;">
  30. <input type="hidden" name="cod_producto" id='cod_producto' value="<?=$producto['id_producto']?>"><?=$producto['id_producto']?>
  31. <input type='submit' id='addCarritoBtn' name='addCarrito' class="btn btn-success" value='Añadir al Carrito'>
  32. <div id='response'></div>
  33. </form>
  34. </div>
  35. <?php }?>
  36. </div>
  37. </div>
  38. </div>
  39. </div>
  40. <?php
  41. }

Alguien sabe como puedo hacer que dependiendo a que ítem pulses se envie esa cantidad por jQuery? por ahora tengo esto pero obviamente no funciona:
Código
  1. $('form').submit(function(){
  2. var cantidad=$("#cantidad").val();
  3. var cod=$("#cod_producto").val();
  4. alert(cantidad+cod);
  5. $.ajax({
  6. type:'POST',
  7. url:'php/Carrito.php',
  8. data:{
  9. id_producto:cod,
  10. cantidad:cantidad
  11. },
  12. success: function(data){
  13. alert(data);
  14. document.getElementById('response').innerHTML=data;
  15. }
  16. });
  17. });
  18.  


Título: Re: Obtener id dinámico en jQuery
Publicado por: LaThortilla (Effort) en 31 Mayo 2017, 05:17 am
Usa las etiquetas de codigo GeSHi para codigo PHP.
Código
  1. <?php
  2. /*EL CODIGO PHP VA EN ETIQUETSA PHP*/
  3.  
  4.  



Título: Re: Obtener id dinámico en jQuery
Publicado por: #!drvy en 31 Mayo 2017, 19:10 pm
Nunca repitas el mismo ID en HTML.

Lo repites constantemente por cada producto y eso es lo que no lleva a que funcione. Usa los atributos de data-* para conseguir información adicional sobre algo. Usa clases o genera ids dinámicos y usa $(this) para acceder a ellos. El session_start siempre debe ir al principio de tu PHP antes incluso de hacer un echo (ya que envía cabeceras y las cabeceras van primero).

En general deberías repasar las funciones que usas. El bucle while es completamente innecesario, el if/elseif también. Puedes hacer un if/else...

Código
  1. <?php
  2.  
  3. $rows = $stm->fetchAll(PDO::FETCH_ASSOC);
  4.  
  5. if(!$rows){
  6.    die('No hay resultados');
  7. }
  8.  
  9. foreach($rows as $producto){  ?>
  10.    <div class="item col-xs-4 col-lg-4">
  11.  
  12.        <div class="thumbnail">
  13.            <img class="group list-group-image" src="<?=$producto['img_producto']?>" alt="<?=$producto['nombre']?>" />
  14.            <div class="caption">
  15.                <h4 class="group inner list-group-item-heading"><?=$producto['nombre']?></h4>
  16.                <p class="group inner list-group-item-text"><?=$producto['descripcion']?></p>
  17.  
  18.                <div class="row">
  19.                    <div class="col-xs-12 col-md-6">
  20.                        <p class="lead"><?=$producto['precio']?> €</p>
  21.                    </div>
  22.  
  23.                    <?php if($_SESSION['conectado']!=="si"){ ?>
  24.  
  25.                    <div class="col-xs-12 col-md-6">
  26.                        <p style="background:#FFD700;box-shadow: 1px 1px 5px #00288A;" class="group inner list-group-item-text">
  27.                            Para comprar
  28.                            <a style='color: black;' data-toggle="modal" href="#miModalIniSesion">Inicie Sesión</a>
  29.                            o <a style='color: black;' data-toggle="modal" href="#miModalReg">Registrese</a>
  30.                        </p>
  31.                    </div>
  32.  
  33.                    <?php } else { ?>
  34.  
  35.                    <div class='content' class="col-xs-12 col-md-6">
  36.                        <form class='formCarrito' method="post">
  37.                            Cantidad: <input type="number" name="cantidad" placeholder="0" style="width: 50px;margin-bottom: 2px;">
  38.                            <input type="hidden" name="cod_producto" value="<?=$producto['id_producto']?>"><?=$producto['id_producto']?>
  39.                            <input type='submit' name='addCarrito' class="btn btn-success" value='Añadir al Carrito'>
  40.                            <div id='response'></div>
  41.                        </form>
  42.                    </div>
  43.  
  44.                    <?php }?>
  45.  
  46.                </div>
  47.  
  48.            </div>
  49.  
  50.        </div>
  51.  
  52.    </div>
  53. <?php } ?>


Código
  1. $('form.formCarrito').submit(function(e){
  2.    e.preventDefault();
  3.    var cantidad = $(this).children('input[name=cantidad]').val() || 1; // Cantidad del producto elegida o 1 por defecto
  4.    var cod = $(this).children('input[name=cod_producto]').val();
  5.  
  6.    $.ajax({
  7.        type:'POST',
  8.        url:'php/Carrito.php',
  9.        data:{
  10.            id_producto:cod,
  11.            cantidad:cantidad
  12.        },
  13.  
  14.        success: function(data){
  15.            alert(data);
  16.            document.getElementById('response').innerHTML=data;
  17.        }
  18.    });
  19. });

Saludos