Foros del Web » Programando para Internet » PHP »

Enviar Email y ordenar variables

Estas en el tema de Enviar Email y ordenar variables en el foro de PHP en Foros del Web. Tengo un carrito de la compra hecho con javascript que se envia a una pagina en PHP que la procesa. He probado este script para ...
  #1 (permalink)  
Antiguo 04/10/2003, 12:40
 
Fecha de Ingreso: octubre-2003
Mensajes: 9
Antigüedad: 20 años, 6 meses
Puntos: 0
Enviar Email y ordenar variables

Tengo un carrito de la compra hecho con javascript que se envia a una pagina en PHP que la procesa.
He probado este script para enviar el email y procesar las variables que llegan desde el carrito:

<?php
//Procesa las variables recogidas desde formulario.htm del carrito y las envia por email
// Primero definamos con qué método se llamó al Form2Mail
$variables = $_SERVER["REQUEST_METHOD"]=="GET"?$_GET:$_POST;
// email - Dirección a la que se enviará el email
$MailTo = !empty($variables["MailTo"])?$variables["MailTo"]:"[email protected]";
// topico - Título que llevará el Email
$topico = !empty($variables["topico"])?$variables["topico"]:"Pedido de Compra";
// redirigir - URL a la que se envia al usuario después de enviado el email
$redirigir = !empty($variables["redirigir"])?$variables["redirigir"]:"http://www.host.com/confirmacion.html";
// error - URL a la que se envia al usuario si hubo un error al enviar el email
$error = !empty($variables["error"])?$variables["error"]:"http://www.host.com/error.html";
// Dirección que aparecera en From si no se ha rellenado en el formulario el correo del usuario
if (!$EMAIL) {$EMAIL = $EMPRESA;}
// Formamos el cuerpo del email.
// Code stolen from Cluster(tm)
foreach($variables as $key => $val) {
if (is_array($val))
{
$dato = "$clave :\n";
foreach($valor as $key => $valor_multiple)
$dato .= "[$key] = $valor_multiple\n";
} else
$dato .= "$key : $val\n";
}
// agregamos la Ip del visitante
$dato .= "Enviado desde : ".$_SERVER["REMOTE_ADDR"];
// y enviamos el email
if (@mail($MailTo, $topico, $dato, "From: $EMAIL"))
header ("Location: $redirigir");
else
header ("Location: $error");
exit();
?>

Me envia por email toda esta informacion y desordenada:

redirigir : ../confirmacion.html
CIUDAD : ciudad
EMAIL : [email protected]
I_IP : 66.119.33.171
PRODUCTO1 : Acelgas
PRODUCTO2 : Achicoria
PRODUCTO3 : Ajos
PRODUCTO4 : Alcachofa
_PART_SYNERGIE : france
error : ../error.html
URL_GET_METHODE : POST
TELEFONO : 96665555
CANTIDAD1 : 1
CANTIDAD2 : 1
NOMBRE : nombre
CANTIDAD3 : 1
CANTIDAD4 : 100K
OTROS : comentario 3
topico : Pedido de compra
_PART_REPERTOIRE : es-idoo
EMPRESA : empresa
Enviado desde : 15.1.1.27

Lo que quiero es que aparezcan primero los datos del cliente que rellena en el formulario ($EMPRESA,$NOMBRE,$CIUDAD,$TELEFONO,$EMAIL,$OTROS) , después los productos comprados ($key) junto con sus cantidades ($val) y por último desde donde se envía con su dirección IP. Además de que no aparezcan el resto de variables.
  #2 (permalink)  
Antiguo 04/10/2003, 14:07
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Pues si sabes el nombre de las variables, en vez de recorrer el array con foreach, solo añade las varaibles una a una:
Código PHP:
$dato.= "Empresa: ".$varaibles['EMPRESA']."\n";
$dato.= "Nombre: ".$varaibles['NOMBRE']."\n";
... 
Y asi con todos los que quieres que salgan.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 05/10/2003, 01:06
 
Fecha de Ingreso: octubre-2003
Mensajes: 9
Antigüedad: 20 años, 6 meses
Puntos: 0
Gracias por tu ayuda
  #4 (permalink)  
Antiguo 05/10/2003, 02:21
 
Fecha de Ingreso: octubre-2003
Mensajes: 9
Antigüedad: 20 años, 6 meses
Puntos: 0
Despues de toda tu ayuda he conseguido hacer lo que dices de enviar las variables que conozco directamente al body del mensaje, pero el contenido de la compra no se como añadirlo al mensaje ya que no se como pasan. Te mando el codigo javascript del formulario y el PHP que tengo para ver si me puedes dar un poco de luz.
ESTE ES EL CODIGO DEL FORMULARIO QUE PROCESA LA COMPRA
<SCRIPT LANGUAGE="JavaScript">

function alterError(value) {
if (value<=0.99) {
newPounds = '0';
} else {
newPounds = parseInt(value);
}
newPence = parseInt((value+.0008 - newPounds)* 100);
if (eval(newPence) <= 9) newPence='0'+newPence;
newString = newPounds + '.' + newPence;
return (newString);
}

function showItems() {
index = document.cookie.indexOf("TheBasket");
countbegin = (document.cookie.indexOf("=", index) + 1);
countend = document.cookie.indexOf(";", index);
if (countend == -1) {
countend = document.cookie.length;
}
fulllist = document.cookie.substring(countbegin, countend);
totprice = 0;

itemlist = 0;
for (var i = 0; i <= fulllist.length; i++) {
if (fulllist.substring(i,i+1) == '[') {
itemstart = i+1;
} else if (fulllist.substring(i,i+1) == ']') {
itemend = i;
thequantity = fulllist.substring(itemstart, itemend);
itemtotal = 0;
itemlist=itemlist+1;
document.writeln('<INPUT TYPE="hidden" NAME="PRODUCTO'+itemlist+'" VALUE="'+theitem+'" SIZE="20">');
document.writeln('<INPUT TYPE="hidden" NAME="CANTIDAD'+itemlist+'" VALUE="'+thequantity+'" SIZE="20">');
} else if (fulllist.substring(i,i+1) == ',') {
theitem = fulllist.substring(itemstart, i);
itemstart = i+1;
} else if (fulllist.substring(i,i+1) == '#') {
theprice = fulllist.substring(itemstart, i);
itemstart = i+1;
}
}
}

</SCRIPT>

Y ESTE EL DEL PHP QUE LAS ENVIA POR EMAIL

<?php
//Procesa las variables recogidas desde formulario.htm del carrito y las envia por email
// Primero definamos con qué método se llamó al Form2Mail
$variables = $_SERVER["REQUEST_METHOD"]=="GET"?$_GET:$_POST;
// redirigir - URL a la que se envia al usuario después de enviado el email
$redirigir = "http://www.host.com/confirmacion.html";
// error - URL a la que se envia al usuario si hubo un error al enviar el email
$error = "http://www.host.com/error.html";
// Formamos el cuerpo del email.
// Code stolen from Cluster(tm)
$msg .= "DATOS DEL CLIENTE:\nEMPRESA: $EMPRESA\nNOMBRE: $NOMBRE\n";
if (!empty($CIUDAD)) {
$msg .= "CIUDAD: $CIUDAD\n";
} else {}
if (!empty($EMAIL)) {
$msg .= "EMAIL: $EMAIL\n";
$MailFrom = $EMAIL;
} else {
$MailFrom = $EMPRESA;
}
$msg .= "TELÉFONO: $TELEFONO\n";
if (!empty($OTROS)) {
$msg .= "OTROS: $OTROS\n\n";
} else {
$msg .= "\n";
}
$msg .= "PRODUCTOS COMPRADOS\n\n";
// Recorremos el array de lo comprado
foreach($variables as $key => $val) {
if (is_array($val)) {
$dato = "$key :\n";
foreach($val as $key => $valor_multiple)
$dato .= "[$key] = $valor_multiple\n";
} else
$dato .= "$key : $val\n";
}
$msg .= $dato;
// agregamos la Ip del visitante
$msg .= "Enviado desde : ".$_SERVER["REMOTE_ADDR"];
// y enviamos el email
if (@mail($MailTo, $topico, $msg, "From: $MailFrom"))
header ("Location: $redirigir");
else
header ("Location: $error");
exit();
?>
  #5 (permalink)  
Antiguo 05/10/2003, 14:04
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bueno, yo personalmente llamria los a los campos PRODUCTO[i] y CANTIDAD[i] en lugar de PRODUCTOi y CANTIDADi. Seria simplemente sustituir en el javascript esto:

document.writeln('<INPUT TYPE="hidden" NAME="PRODUCTO['+itemlist+']" VALUE="'+theitem+'" SIZE="20">');
document.writeln('<INPUT TYPE="hidden" NAME="CANTIDAD['+itemlist+']" VALUE="'+thequantity+'" SIZE="20">');

No se si en el resto de tu aplicacion deberias cambiar algo mas. Pero de esta forma en tu PHP simplemente haciendo:
Código PHP:
$productos=$variables['PRODUCTO'];
$cantidades=$variables['CANTIDAD']; 
Tendrias el array con los productos y sus cantidades. Y para meterlo en el mensaje seria simplemente:
Código PHP:
foreach($productos as $clave => $valor) {
  
$msg.="PRODUCTO$clave: $valor \n";
  
$msg.="CANTIDAD$clave: ".$cantidades[$clave]." \n";

En caso de no poder cambiar el nombre de los campos, la forma de crear los arrays cambia un poco:
Código PHP:
$productos=array(); // inicializamos los arrays
$cantidades=array();
// recorremos todas las variables
foreach ($variables as $clave => $valor) {
if (
'PRODUCTO'==substr($clave,0,8)) { // miramos si la variable empieza por 'PRODUCTO'
  
$indice=substr($clave,7); //usamos como indice el numero de despues de 'PRODUCTO'
  
$productos[$indice]=$valor;
} elseif (
'CANTIDAD'==substr($clave,0,8)) { // miramos si empieza por 'CANTIDAD'
  
$indice=substr($clave,7); //usamos como indice el numero de despues de 'CANTIDAD'
  
$cantidades[$indice]=$valor;
}

Y luego para añadirlo al mensaje es lo mismo que antes.

Saludos.

PD: Revisa el codigo. Lo he hecho de cabeza.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 06/10/2003, 13:34
 
Fecha de Ingreso: octubre-2003
Mensajes: 9
Antigüedad: 20 años, 6 meses
Puntos: 0
MUCHAS GRACIAS AHORA MISMO LO PROBARÉ.
UN SALUDO
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:01.