Foros del Web » Programando para Internet » PHP »

Carrito de la compra que envie un e-mail

Estas en el tema de Carrito de la compra que envie un e-mail en el foro de PHP en Foros del Web. Buenas, hoy puse un mensaje que misteriosamente ha desaparecido, en dicho mensaje incluia unos recursos de interes que ahora omitire por si las moscas el ...
  #1 (permalink)  
Antiguo 27/02/2007, 14:59
 
Fecha de Ingreso: mayo-2004
Mensajes: 201
Antigüedad: 19 años, 11 meses
Puntos: 2
Carrito de la compra que envie un e-mail

Buenas, hoy puse un mensaje que misteriosamente ha desaparecido, en dicho mensaje incluia unos recursos de interes que ahora omitire por si las moscas el chaval que maneja este chiringuito es susceptible...

Mi pregunta es sencilla, tengo un php (que no pondre aquí por si tambien lo consideran propaganda) que me crea un carrito de la compra, pero no me envia por e-mail el pedido, ¿que debo añadir en php para que se me envie el pedido? Por si os sirve os dejo mi sistema de envio de formularios:

<Form method="POST" action="mail.php">
<input type = "hidden" name="recipient" value="[email protected]">
  #2 (permalink)  
Antiguo 27/02/2007, 16:22
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: Carrito de la compra que envie un e-mail

exactamente no se que sistema usas.. el sistema entre sus caracteristicas tiene el que te hace el envio de un mail del pedido automaticamente???, configurando unicamente en algun cms (o sistema de administracion) el correo a donde quieres que te llegue??

ahora si es un sistema creado por ti solo es de que crees un formato en el cual pondras todos los valores de los campos del formulario (o variables de $_SESSION, dependiendo como lo estes manejando) y uses una clase tipo PHPMailer para hacer el envio de la compra a tu correo..

Esclarece mis dudas y con gusto te ayudo.

un saludo.
__________________
http://dev.wsnetcorp.com
  #3 (permalink)  
Antiguo 27/02/2007, 17:39
 
Fecha de Ingreso: mayo-2004
Mensajes: 201
Antigüedad: 19 años, 11 meses
Puntos: 2
Re: Carrito de la compra que envie un e-mail

Gracias por tu respuesta, me explico:

Tengo un carrito de la compra (no es un cms) en php que usa las sesiones para recordar los productos (a continuacion tienes parte del codigo):
--------------------------------------------------
//Muestra el contenido del carrito de la compra
//ademas pone los enlaces para eliminar un producto del carrito
function imprime_carrito(){
$suma = 0;
echo '<table border=1 cellpadding="3">
<tr>
<td><b>Nombre producto</b></td>
<td><b>Precio</b></td>
<td>&nbsp;</td>
</tr>';
for ($i=0;$i<$this->num_productos;$i++){
if($this->array_id_prod[$i]!=0){
echo '<tr>';
echo "<td>" . $this->array_nombre_prod[$i] . "</td>";
echo "<td>" . $this->array_precio_prod[$i] . "</td>";
echo "<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
echo '</tr>';
$suma += $this->array_precio_prod[$i];
}
}
-------------------------------------------------

Y tengo otro archivo que me visualiza los datos:
------------------------------------------
<?
include("lib_carrito.php");
?>

<html>
<head>
<title>Introduce Producto</title>
</head>

<body>

<?
$_SESSION["ocarrito"]->imprime_carrito();
?>
<br>
<br>
<a href="index.php">Volver</a>

</body>
</html>
------------------------------------

Pero quiero que el pedido sea también enviado por e-mail... Aquí está el lio porque por ejemplo, un formulario normal en html lo envio llamando a un mail.php que manda los datos de un formulario, pero en este caso supongo hay que programar en php algo así:
-----------------------
echo '<Form method="POST" action="mail.php">
<input type = "hidden" name="recipient" value="[email protected]"> ';

$cart_items = $cart->show_cart();
$i=0;
foreach($cart_items as $key => $value)
{

echo '<input type = "hidden" name="prod_$i" value="$key"><p>';
echo '<input type = "hidden" name="canti_$i" value="$value"><p>';
$i++;
}
-----------------------

Pero claro, este último codigo no está adaptado al carrito que uso, algo tengo que cambiar, además no se como integrar esto dentro de un formulario donde el usuario me deje su e-mail y puede pulsar en ENVIAR para enviarme el pedido. ¿Me explico? En realidad es algo muy sencillo pero parace imposible encontrar en Internet algo listo para usar, solo hay muchos códigos que luego hay que modificar y ampliar, y en mi caso con el php me pierdo. Espero puedas echarme un cable

Saludos
  #4 (permalink)  
Antiguo 28/02/2007, 09:46
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: Carrito de la compra que envie un e-mail

Primeramente dejame hacerte saber que veo llamadas a funciones y a propiedades de algun objecto que no menciones de donde vienen (ej. $this->array_nombre_prod[$i] y sus deribados de la funcion imprime_carrito() ), pero si al momento que despliegas la informacion del carrito es cuando deseas que se envie un correo electronico de la "Compra" efectuada, yo modificaria la funcion de imprime el carrito de la siguiente manera b(asandome en el codigo que me has mostrado)


<?php
session_start();

//Muestra el contenido del carrito de la compra
//ademas pone los enlaces para eliminar un producto del carrito
function imprime_carrito(){
$suma = 0;
$elcarrito .= '<table border=1 cellpadding="3">
<tr>
<td><b>Nombre producto</b></td>
<td><b>Precio</b></td>
<td>&nbsp;</td>
</tr>';

for ( $i=0;$i<$this->num_productos;$i++ ){
if( $this->array_id_prod[$i]!=0 ){
$elcarrito .= '<tr>';
$elcarrito .= "<td>" . $this->array_nombre_prod[$i] . "</td>";
$elcarrito .= "<td>" . $this->array_precio_prod[$i] . "</td>";<em></em>
$elcarrito .= "<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
$elcarrito .= '</tr>';
$suma += $this->array_precio_prod[$i];
}
}

return $elcarrito;

}
?>

al momento e mostrar tu carrito prueba hacer algo asi, suponiendo que es en este momento que deseas enviar el correo a usuario:

<?php
session_start();
include_once('archivodefuncioncarrito.php');

$header = "From: elcorreodelquienenvia \r\n";
$header .= "Return-Path: tucorreoderetorno \r\n";
$header .= "X-Priority: 3\r\n"; // Urgent message set to 1; normal set to 3
$header .= "X-Mailer: PHP/".phpversion()."\r\n";
$header .= "Content-Type: text/html; charset=iso-8859-1\r\n\n";

$carrito = imprime_carrito();

mail('aquienvaelcorreo' 'carrito', $message, $header);

// y si no es en este momento que deseas enviar el email.. puedes guardar el valor de $carrito en una variable de session y llamarla en el momento que desees enviar o bien incluir el archivo con la funcion imprime_carrito, asignar el valor a una variable y hacer el proceso que te explico arriba.

?>


<html>
<head>
<title> Introduce Producto </title>
</head>
<body>
<?php
echo $carrito;
?>
<br>
<br>
<?
// echo $carrito;
?>
<a href="index.php">Volver</a>
</body>
</html>



Hasta lo que veo esto podria ser una solucion para tu problema, lo que veo mal es que no tengas restringido (o hasta cierto modo) sabido en tu sistema quien es el que esta interactuando con tu carrito de compras (con lo cual ya tendrias el email del que interactua con tu sistema), y asi evitarias tener que poner en alguna pagina extra o e medio de tu proceso de compra un campo apra solicitar el email del navegante y hasta entonces efectuar el envio del email al usuario. mira si te ayuda en algo lo que te planteo y me cuentas.
__________________
http://dev.wsnetcorp.com

Última edición por ebe; 28/02/2007 a las 09:57
  #5 (permalink)  
Antiguo 28/02/2007, 14:45
 
Fecha de Ingreso: mayo-2004
Mensajes: 201
Antigüedad: 19 años, 11 meses
Puntos: 2
Re: Carrito de la compra que envie un e-mail

Hola de nuevo y gracias por tu ayuda. Me surgen ciertas dudas, por ejemplo teniendo en cuenta que el carrito ahora mismo funciona bien (y del cual te he pegado antes una parte de su codigo), ¿por que crees que es bueno cambiarle ciertas lineas de codigo?

Luego la idea básica sería que al mostrar los productos "comprados" se añada un pequeño formulario para que se pueda enviar el pedido (y de paso algún dato del que compra). ¿Me sirven los campos en html de un formulario para que se envien junto con los datos de la compra o esto solo puede ir en php?

Y por último, cuando se tratan de formularios en html siempre "llamo" a un php que me envia los datos de forma apropiada (mail.php) desde el servidor, ¿es posible darle todos los datos del carrito a eso "otro" php para que me los mande? Porque en un pequeño ejemplo que te pegué antes intentaba usar esto:
------------------------
echo '<Form method="POST" action="mail.php">
<input type = "hidden" name="recipient" value="[email protected]"> ';
------------------------

Y en tu ejemplo me das otra solución. ¿Que opinas? Por último, comentarte que de casualidad he encontrado en Internet un código (va en un archivo al que se invoca cuando haga falta) que por lo visto también pretende conseguir lo que estamos comentando, te lo dejo más abajo para que me des tu opinion .

De nuevo un saludo y gracias por tu apoyo!

------------------------------------
// Datos de formateo del e-mail en formato html, añadiendo el parámetro
// "Para" del correo
$SolicitadoPor = EL NOMBRE DEL DESTINATARIO, EMPRESA, ETC;
$Cabecera = "MIME-Version: 1.0\r\n";
$Cabecera .= "Content-type: text/html; charset=iso-8859-1\r\n";
$Cabecera .= "Content-Transfer-Encoding: 7bit\r\n";

//Campo From del email
$Cabecera .= "From: ".$SolicitadoPor."\r\n"; //Un nombre y apellido, por ejemplo
//Destinatario
$Destinatario = "[email protected]";

//Dar formato al número de pedido
$NumeroPedido = /*TU VARIABLE CONTENIENDO EL NUMERO DE PEDIDO*/;
$Asunto = "Pedido Nº ".$NumeroPedido." del cliente ".$CodigoCliente; //Asunto del e-mail
$Mensaje = "<br>Número de pedido: ".$NumeroPedido."<br><br>";
$Mensaje .= "-----------------------------------<br>";
$Mensaje .= "Fecha del pedido: ".$FechaPedido."<br>";
$Mensaje .= "Hora del pedido: ".$HoraPedido."<br>";
$Mensaje .= "Cliente Nº: ".$CodigoCliente."<br>"; //O lo que proceda
$Mensaje .= "Solicitante: ".$PersonaSolicitante."<br>"; //Nombre y apellido
$Mensaje .= "-----------------------------------<br><br>";
$Mensaje .= "Detalle del pedido:<br><br><pre>";
//En este caso, yo he utilizado un campo de texto desde un formulario,
//que he almacenado en la variable '$Pedido', pero podia haber sido una
//consulta a la base de datos.
$Mensaje .= $Pedido."<br></pre>";


//Enviando el pedido usando la función mail() de php.
$EmailSend = mail($Destinatario, $Asunto, $Mensaje, $Cabecera)
or die("Error al enviar el pedido."); //Si se produce un error, se informa al usuario
  #6 (permalink)  
Antiguo 28/02/2007, 15:40
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: Carrito de la compra que envie un e-mail

Cita:
), ¿por que crees que es bueno cambiarle ciertas lineas de codigo?

Mira.. primeramente te comentaba que cambiaria algunas cosas de la function imprime_carrito() ya que hasta el momento como la llamas hace un echo a todo lo que dentro de la funcion se encuentra (omitiendo la variable $suma), el cambio que hice en este funcion (como te das cuenta) fue el unicamente ir almacenando el output o salida del formato de la tabla en una variable PHP que en este caso es $elcarrito y darle un “return $elcarrito” para que al llamar esta funcion no imprima en pantalla el contenido de una vez, si no, tu puedas almacenar este contenido en una variable y darle un echo cuando lo necesites.


Cita:
Luego la idea básica sería que al mostrar los productos "comprados" se añada un pequeño formulario para que se pueda enviar el pedido (y de paso algún dato del que compra). ¿Me sirven los campos en html de un formulario para que se envien junto con los datos de la compra o esto solo puede ir en php?
Si claro.. por eso es el cambio en la funcion imprime_carrito(), para que puedas reusar ese contenido que te devuelve, (bien puedes asignar este contenido a una variable de session) y si.. al momento de presentarle al usuario lo que ha comprado puedes agregar un formulario en el cual pidas datos extras al usuario, cuidando unicamente de poner el action de tu formulario al archivo donde tienes el codigo que te envia el correo. (el codigo que me presentas para el envio del mail me parece bien, solo es de que lo pruebes y le concatenes, tanto, los datos ingresados por el formulario y los datos del carrito, que deberias guardar en una variable de session, para cuando proceses todo esto, concatenes el contenido de la variable de session a la variable $Mensaje del contenido del mail al igual que los valores isertados en el formulario.) . Esa seria la logica, después de ahí todo es que formatees tu mail a tu gusto y no olvides poner los header del mail HTML llegue como esperas.

Espero me comprendas.
__________________
http://dev.wsnetcorp.com
  #7 (permalink)  
Antiguo 01/03/2007, 10:34
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: Carrito de la compra que envie un e-mail

al final, has podido implementar alguna solucion para tus envios via e-mail del carrito??


un saludo.
__________________
http://dev.wsnetcorp.com
  #8 (permalink)  
Antiguo 01/03/2007, 14:43
 
Fecha de Ingreso: mayo-2004
Mensajes: 201
Antigüedad: 19 años, 11 meses
Puntos: 2
Re: Carrito de la compra que envie un e-mail

Me he perdido, me explico, he intentado hacer lo que me comentabas. He modificado el php del carrito (pero tube que volver a dejarlo como estaba) y he creado un nuevo archivo php con este codigo:
----------------------------
<?php
session_start();
include_once('archivodelcarrito.php');

$header = "From: elcorreodelquienenvia \r\n";
$header .= "Return-Path: tucorreoderetorno \r\n";
$header .= "X-Priority: 3\r\n"; // Urgent message set to 1; normal set to 3
$header .= "X-Mailer: PHP/".phpversion()."\r\n";
$header .= "Content-Type: text/html; charset=iso-8859-1\r\n\n";

$carrito = imprime_carrito();

mail('[email protected]' 'carrito', $message, $header);
?>
-----------------------------------------

Se supone que debería enviarme los datos almecenados en la variable de sesión, pero me tira este error:

Parse error: parse error in /var/www/vhosts/midominio.com/httpdocs/carrito/carritomail.php on line 13

No se si es que no se comunica bien este archivo con el carrito (por algun sitio he visto la variable ocarrito, supongo no tiene nada que ver con $carrito) o tal vez el problema sea el que te comentaba al principio. Que mi servidor necesita llamar por el metodo POST a un php que tengo con el que envio por correo los formularios. De ese tema no me has comentado nada. Y si no se debe hacer de esa forma pues tal vez no estoy usando tu código de la forma correcta.

En fin, tampoco quiero quitarte mas tiempo. Un saludo...
  #9 (permalink)  
Antiguo 05/03/2007, 09:35
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: Carrito de la compra que envie un e-mail

COmo te comentaba al principio, la modificacion a la funcion imprime carrito fue por cuestiones de poder reutilizar el contenido pero habria que ver cuantos archivos dependen de que la informacion se muestre en la forma antigua (utilizando echos dentro de la funcion y no almacenando el contenido dentro de una variable y luego regresar su valor) ejecutando directamente ECHO dentro de la funcion. POr lo que veo el sistema sobre el que estas trabajando no ha sido desarrollado por ti, esto debido a las complicaciones que estas teniendo.


cAhora, si no sabes con los archivos y las secciones con las que interactua tu funcion imprime_carrito() como para modifcar esas secciones prueba la opcion de guardar en buffer el contenido que te devuelve imprime carrito asi:

tu codigo para el envio deberia quedar asi:

Código PHP:
<?php
session_start
();
include_once(
'archivodelcarrito.php');

$header "From: elcorreodelquienenvia \r\n";
$header .= "Return-Path: tucorreoderetorno \r\n";
$header .= "X-Priority: 3\r\n"// Urgent message set to 1; normal set to 3
$header .= "X-Mailer: PHP/".phpversion()."\r\n";
$header .= "Content-Type: text/html; charset=iso-8859-1\r\n\n";

ob_start(); // guardamos en buffer todo el contenido, esto es util. ya que tu funcion imprime carrito de una vez hace ECHO del contenido al llamar la funcion.

imprime_carrito();
$message ob_get_contents(); // almacenamos todo el conteido del buffer en la variable $message

ob_end_clean(); 

// en este momento todo el contenido del carrito (lo que devuelve la funcion imprime_carrito() la tenemos almacenada en $message.


// aqui envias normalmente tu correo 
mail('[email protected]' 'carrito'$message$header);
?>
-----------------------------------------
chequeatelo... esta claro.. guardando en buffer todo tu contenido del carrito es la forma mas sencilla si no deseas modificar las funciones de su sistema.

Cita:
No se si es que no se comunica bien este archivo con el carrito (por algun sitio he visto la variable ocarrito, supongo no tiene nada que ver con $carrito) o tal vez el problema sea el que te comentaba al principio. Que mi servidor necesita llamar por el metodo POST a un php que tengo con el que envio por correo los formularios. De ese tema no me has comentado nada. Y si no se debe hacer de esa forma pues tal vez no estoy usando tu código de la forma orrecta.
Pues si tienes activa la funcion mail() en tu servidor no deberias tener problema de enviar correos de la manera que esta arriba. Se especifico cuando tengas errores en tu codigo, y marca la linea donde te dice que el error esta (me imagino que usas algun editor tipo Dreamweaver), asi sera mas facil ir resolviendo punto a punto el problema hasta lograr el cometido.

NOTa: perdon la respuesta tan tarde.. pero estabe fuera de circulacion por un par de dias. , y mientras podamos no te preocupes por preguntar.
__________________
http://dev.wsnetcorp.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 03:39.