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

LLamada a script php desde Jquery

Buenos dias estoy haciendo un carrito de compras, en el cual tengo que realizar el pedido via email, tengo el siguiente codigo en jQuery

<script type="text/javascript">

  $(function () {
    var goToCartIcon = function($addTocartBtn){
    var $cartIcon = $(".my-cart-icon");
    var $image = $('<img width="30px" height="30px" src="' + $addTocartBtn.data("image") + '">').css({"position": "fixed", "z-index": "999"});
    $addTocartBtn.prepend($image);
    var position = $cartIcon.position();
    $image.animate({
      top: position.top,
      right: position.right
    }, 500 , "linear", function() {
      $image.remove();
    });
  }

  $('.my-cart-btn').myCart({
    classCartIcon: 'my-cart-icon',
    classCartBadge: 'my-cart-badge',
    affixCartIcon: true,
    checkoutCart: function(products, totalPrice, totalQuantity) {
        var checkoutString = "Total Price: " + totalPrice + "\nTotal Quantity: " + totalQuantity;
        checkoutString += "\n\n Codigo \t Producto \t Precio \t Cantidad";
        $.each(products, function(){
          checkoutString += ("\n " + this.id + " \t " + this.name +  + " \t " + this.price + " \t " + this.quantity);
        });
        alert(checkoutString)
        var data={ producto: products, 
                   total: totalPrice,
                   cantidad: totalQuantity};

        $.ajax({
    data : data,
    url: "mail.php",
    type: 'POST',
    success: function() {
        $('#result').html(data);
         //window.location="mail.php";
    },
    error: function() {
        alert( "Ha ocurrido un error" );
    }
    });
      },
    clickOnAddToCart: function($addTocart){
      goToCartIcon($addTocart);
    },
    getDiscountPrice: function(products) {
      var total = 0;
      $.each(products, function(){
        total = this.quantity * this.price;
      });
      return total;
    }
  });

});
  </script>

MAIL.PHP

<?php
    <?php
    session_start();
    ini_set("memory_limit", "2048M");
    if(isset($_POST['producto']))
    {$headers = "From: Macrofer Paseo Ferretero S.A. < [email protected] >\r\n";
    //Enviamos el mensaje a tu_dirección_email 
    $producto=$_POST['producto'];
    $destinatario=$_SESSION['email'];
    $copia1="[email protected]";
    $total=$_POST['total'];
    $cantotal=$_POST['cantidad'];
    $fecha=date("d/m/y");
    $hora=date("H:i:s");
    $nombre=$_SESSION['nombre'];
    //Estoy recibiendo el formulario, compongo el cuerpo
    $cuerpo = "Nuevo pedido Mayorista";
    $count = count($producto);
    $i=0;
    var_dump($_POST['producto']);
    while($i<$count){
    $cuerpo .= "<table border='1'>
<tr><td colspan='2'> Pedido de $nombre</td></tr>
<tr><td> FECHA </td><td> $fecha </td></tr>
<tr><td> HORA </td><td> $hora </td></tr>
<tr><td> ID </td><td> $producto[$i]['id']; </td></tr>
<tr><td> Producto </td><td> $producto[$i]['name']; </td></tr>
<tr><td> Cantidad </td><td> $producto[$i]['quantity'] </td></tr>
<tr><td> Total </td><td> $total </td></tr>
    </table>,";}
    //mando el correo...
    $book=mail($destinatario,$cuerpo,$headers);
    if($book){
    echo "Mensaje enviado";
}else{
    echo "Mensaje no enviado";
}
    }
    else {'sin data';}
    ?>

en el cual realiza las funciones del carro correctamente, luego en la parte del ajax envio la informacion a un archivo llamado mail.php en el cual la idea es que se envie por email los datos del pedido, cuando doy click en el botón de finalizar compra para enviar el pedido, este retorna el cartel funciona y estos datos son los datos que me muestra via consola luego de mostrar el cartel de funciona.

productos[0][id]:01061
productos[0][name]:CLAVOS PUNTA PARIS A GRANEL xKG   -   1.1/2
productos[0][summary]:
productos[0][price]:35
productos[0][quantity]:1
productos[0][image]:img/nodis.jpg
total:35
cantidad:1

El envio de datos por ajax parece funcionar correctamente el problema es que no se envia el mail, no muestra ningun mensaje creado en php ni muestra el var_dump de productos que hago. Si alguien tiene alguna idea!

Leonardo-Tadei comentado Mar 25, 2017

@matti, creeme, de veras, el problema NO es que no se envía el e-mail...lo que no te anda es la llamada al script PHP.

Confunde mucho que sigas apuntando en la dirección equivocada :-(

matti comentado Mar 25, 2017

Si no funciona el script porque es entonces? Yo no veo el error

Leonardo-Tadei comentado Mar 26, 2017

pasanos la salida de un console.log(data) antes de hacer la llamada AJAX, para ver qué es lo que estás enviando...

matti comentado Mar 27, 2017

Objectcantidad: 5producto: Array[1]0: Objectlength: 1proto: Array[0]total: 185proto: Object

y luego me aparece en consola despues de aparece el cartel de "Funciona" lo siguiente.

Imagen de lo que envia

Si queres @Leonardo-Tadei dame un mail y te envio un acceso a la web asi vez de primera el error

2 Respuestas

0voto

matti Puntos520

Solucionado !

Archivo ajax a enviar:

$.ajax({
            type: 'POST',
            url: "mail.php",
            data : { producto: products, 
                   total: totalPrice,
                   cantidad: totalQuantity},
            success: function(data) {
                alert( "Funciona" );
                $('#result').html(data);
                alert(data);
            },
            error: function() {
                alert( "Ha ocurrido un error" );
            }
            });

Archivo php con email que recibe:

<?php
    session_start();

    $headers  ='Empresa.' . "\r\n";
    $headers .='MIME-Version: 1.0' . "\r\n";
    $headers .='Content-type: text/html; charset=iso-8859-1' . "\r\n";
    //Enviamos el mensaje a tu_dirección_email 
    $producto=$_POST['producto'];
    $destinatario=$_SESSION['email'];
    $copia1="[email protected]";
    $total=$_POST['total'];
    $cantotal=$_POST['cantidad'];
    $fecha=date("d/m/y");
    $hora=date("H:i:s");
    $nombre=$_SESSION['nombre'];
    //Estoy recibiendo el formulario, compongo el cuerpo
    $counter = count($producto);
    $cont=0;
$cuerpo = "Pedido de <strong>$nombre</strong> el dia <strong>$fecha</strong> a las <strong>$hora</strong>
  <html><body><table border='1'><thead><tr>
        <th>ID</th>
        <th>Producto</th>
        <th>Marca</th>
        <th>Cantidad</th>
        <th>Picking</th>

</tr>
</thead>";

     for ($cont = 0; $cont < $counter; $cont++){
    $cuerpo .="<tbody>
<tr>
<td> {$producto[$cont]['id']} </td>
<td> {$producto[$cont]['name']} </td>
<td> {$producto[$cont]['summary']} </td>
<td> {$producto[$cont]['quantity']} </td>
<td                  </td>
     </tr>
     ";}
     $cuerpo .="
     <tr ><td colspan='5' align='center'>Total de renglones - $cont </td></tr>
         <tr ><td colspan='5' align='center'>Total de renglones armados -  </td></tr>
     </tbody>
     </table> </body></html>";

     $cuerpoo = "Hola <strong>$nombre</strong> tu pedido fue realizado el día <strong>$fecha</strong> a las <strong>$hora</strong>Hs.
  <html><body><table border='1'><thead><tr>
        <th>ID</th>
        <th>Producto</th>
        <th>Marca</th>
        <th>Cantidad</th>
</tr>
</thead>";

     for ($cont = 0; $cont < $counter; $cont++){
    $cuerpoo .="<tbody>

<tr>
<td> {$producto[$cont]['id']} </td>
<td> {$producto[$cont]['name']} </td>
<td> {$producto[$cont]['summary']} </td>
<td> {$producto[$cont]['quantity']} </td>
     </tr>
     ";}
     $cuerpoo .="
     </tbody>
     </table> </body></html>";
     echo $cont;
     echo $destinatario;    

    $book=mail($destinatario,"Este es tu pedido a Empresa.",utf8_decode($cuerpoo),$headers);
    $book1=mail('--',"Nuevo Pedido Mayorista de $nombre",utf8_decode($cuerpo),$headers);
    $book2=mail('--',"Nuevo Pedido Mayorista de $nombre",$cuerpo,$headers);
    $book3=mail('--',"Nuevo Pedido Mayorista de $nombre",utf8_decode($cuerpo),$headers);

    if($book)
            {
    echo "Tu mensaje fue enviado correctamente, para consultas y/o modificaciones comunicarse al -- o a --";
            }
    else
            {
    echo "Mensaje no enviado";
            }   
    ?>

Gracias por las indicaciones!

Peter comentado Mar 29, 2017

Gracias por compartir la solución!

matti comentado Mar 29, 2017

De Nada! Así nos ayudamos entre todos!

Leonardo-Tadei comentado Mar 29, 2017

y cómo te quedó data y products antes de hacer el envío? Podrías poner una salida de un console.log() para ver cómo te quedó armado?

matti comentado Mar 29, 2017

Si mañana te lo pongo porque no estoy en el trabajo ahora mismo! Voy recién mañana

1voto

Leonardo-Tadei Puntos225420

Hola @matti,

el problema que veo en la transmisión de datos es que en JS estás armando mal la cadena a enviar, con lo que el script PHP no está recibiendo en realidad un valor $_POST['producto'] para entrar al IF.

Si te hace falta enviar un vector en la petición, tenés que tener todo codificado JSON con formato de petición web form-data, y no como tenés ahora, un Object que tiene adentro un array.

En este artículo hay un ejemplo decente de cómo se codifica esto, y cómo se decodifica luego al recibirlo en el escript PHP. En esta pregunta de SO también se trata el tema.

En resumen, la invocación al PHP no parece estarle enviando ningún valor POST, o es directamente descartada por el formato erróneo.

Saludos cordiales!

PD: fijate como seguimos un poco en la obscuridad, porque todo parte de la llamada a checkoutCart(), pero no está el código de la llamada, que es don dónde viene codificado "products"... es decir, no tenemos como ver el contenido de ese parámetro y nos podemos dar solo una idea a partir del console.log(data) que te pedí, y que si lo leés en tu respuesta, quedó incompleto y mal separado. :-(

matti comentado Mar 29, 2017

Gracias leonardo ya lo pude solucionar un saludo !

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

  • Leonardo-Tadei ganó una medalla hace 22 horas

    Buena Respuesta - Recibió +5 votos en respuesta
  • Ibra ganó una medalla hace 22 horas

    Club de los 100 - Recibió un total de 100 puntos
  • Ibra ganó una medalla hace 22 horas

    Humano Verificado - Verificó su email
  • Adriana ganó una medalla hace 23 horas

    Club de los 100 - Recibió un total de 100 puntos
  • Adriana ganó una medalla hace 23 horas

    Humano Verificado - Verificó su email
  • Umarumm ganó una medalla hace 2 días

    Buena Pregunta - Recibió +1 votos en pregunta
  • joebak ganó una medalla hace 2 días

    Editor - Performed total of 1 edit
  • joebak ganó una medalla hace 2 días

    Club de los 100 - Recibió un total de 100 puntos
...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta