Enviar pedido de carrito PHP vía mail

Necesito mucho tu ayuda en esta ocasión... Tengo un carrito de compras en mi web con lo cual tengo varios problemas, y necesito tu ayuda con el mayor de todos...
Enviar los pedidos a mi casilla mail
Según estuve leyendo, cada articulo que se selecciona, se agrega en una matriz. "OJO... No conozco mucho de como se almacenan los datos dentro de una matriz y asumo que es la matriz la que debo enviar a mi mail..."
este es mi archivo (agregar.php)
<?php
session_start();
extract($_REQUEST);
$tot_productos=0;
$conexion= mysql_connect("", "", "") or die (mysql_error());
mysql_select_db("productos", $conexion) or die ("fracaso la seleccion de la db productos_pyd");
if(!isset($cantidad)){$cantidad=1;}
$tot_productos=$tot_productos+1;
$qry=mysql_query("select * from forest where id='".$id."'");
$row=mysql_fetch_array($qry);
if(isset($_SESSION['carro']))
$carro=$_SESSION['carro'];
$carro[md5($id)]=array('identificador'=>md5($id),'cantidad'=>$cantidad,'nombre'=>$row['nombre'],'costo'=>$row['costo'],'id'=>$id);
$_SESSION['carro']=$carro;
header("Location:catalogo.php?".SID);
?>
Este es un resumen de todo el archivo, copie lo que creí necesario, solo las lineas PHP, así que no te alarmes si ves que algo no esta mal escrito, ya que el archivo completo está ok, y funciona bien...
<?php
session_start();
error_reporting(E_ALL);
@ini_set('display_errors', '1');
if(isset($_SESSION['carro']))
$carro=$_SESSION['carro'];else $carro=false;
$contador=0;
$suma=0;
$subtol=0;
$productos=0;
if($carro){
$color=array("#ffffff","#F0F0F0");
foreach($carro as $k => $v){
//PARA QUE ES FOREACH? Y que significan "$k => $v"............y porque luego de esto todos los campos llevan  $v al inicio?, por ejemplo:$v['costo']
$subto1=$v['cantidad']*$v['costo'];;
$suma=$suma+$subto1;
$contador++;
?>
<form name="a<?php echo $v['identificador'] ?>" method="post" action="agregacar.php?<?php echo SID ?>" id="a<?php echo $v['identificador']; ?>">
<?php
echo $color[$contador%2];
echo $v['nombre'];
$productos=$v['nombre'];
echo $v['costo'];
echo $v['id']
$subtotal=$v['cantidad']*$v['costo'];;
echo number_format($subtotal,2);
}
echo count($carro);
echo number_format($suma,2);
?>
<form action="enviar.php" method="post" name="Formulario" id="Formulario">
         <input name="    name" type="text" class="texto_ng" size="40" />
         <input name="email" type="text" class="texto_ng" size="40" />
         <input name="phone" type="text" class="texto_ng" size="40" id="phone" />
         <textarea name="comments" cols="40" rows="6" class="texto_ng"></textarea></td>
<input type="submit" value="Enviar" />
         <input type="hidden" name="productos" id="productos"  value="<? Echo $productos; ?>" />
// en este caso almacene el valor de  $v['nombre'] en ==== $productos y estoy enviando a mi archivo ENVIAR.PHP (que realiza el envio mail) el valor almacenado en productos... OJO, el valor si llega, pero solo el último articulo seleccionado...
         <input type="reset" value="Limpiar" />
</form>
<?php }else{ ?>
<a href="prod_plan_01.php?<?php echo SID;?>"><img src="../images/next.png" width="48" height="48" border="0" alt="Volver al catálogo" title="Volver al Catálogo" />
<?php  
  }
?>
ESTE ES MI ARCHIVO (ENVIAR.PHP)
<?php
    $to = "[email protected]";
    $sub = "Pedido enviado";
    $subject = "\r\nName: ".$_REQUEST["name"]
                ." \r\nEmail: ". $_REQUEST["email"]
                ."\r\nPhone: ".$_REQUEST["phone"]
                ."\r\nProductos: ".$_REQUEST["productos"]
//OJO, el valor de productos si llega, pero solo el último articulo seleccionado...
            ." \r\n\r\n"
            ."Comments: ".$_REQUEST["comments"]
            ."\r\n";
    $headers = "From: ".$_REQUEST["email"]."\r\n";
    if (@mail($to,$sub,$subject,$headers)){
        //print "Su pedido se realizó con éxito";
        echo("
<script language='JavaScript' type='text/JavaScript'>");
        echo("alert('Su pedido se realizó con éxito');");
        echo("</script>
");
        echo "
<script>window.location='vercarrito.php'</script>
";
    }else
    {
        //print "Se produjo un error al enviar su pedido";
        echo("
<script language='JavaScript' type='text/JavaScript'>");
        echo("alert('Se produjo un error al enviar su pedido');");
        echo("</script>
");
        echo "
<script>window.location='vercarrito.php'</script>
";
    }
    echo $returning;
?>
//COMO LE HAGO PARA QUE LLEGUE TODO EL PEDIDO????????
En esta ocasión necesito resolver esto con mucha URGENCIA.
Respuesta
1
Antes de nada, creo que te deberías leer el siguiente capítulo del manual, para entender como funcionan las matrices en PHP:
http://es2.php.net/manual/es/language.types.array.php
Cuando ya lo sepas, deberás añadir el pedido a $subject, realizando un bucle sobre el pedido que se encuentra en la matriz $carro
Muchas gracias por tu tiempo, hace tres días leí ese mismo manual, por lo que entendí un poco como se debe operar con las matrices, y en efecto conseguí que el resultado pase al archivo ENVIAR.PHP y luego a mi mail, pero sol me llega la descripción del último producto seleccionado.
Pero bueno no importa, podrías ayudarme aclarándome unas dudas puntuales...
//Porque se coloca en el código la siguiente linea en el CATALOGO...
foreach($carro as $k => $v){
¿De dónde sale $k si esa variable no estaba creada y por que contiene el valor de $v que tampoco estaba creada, y luego $v aparece delante de todas la variables?
por que en AGREGAR.php se crea la matriz
$carro=array('identificador'=>md5($id),'cantidad'=>$cantidad,'nombre'=>$row['nombre'],'costo'=>$row['costo'],'id'=>$id);
y luego en VERCARRITO.PHP jamás hago alución a $carro sinó que ahora
hago alución a $v['identificador....'];
por que $v
Y luego no puedo enviar $carro al archivo ENVIAR.php por que no funciona
Y por último cuando trato de enviar $v pasa como valor a ENVIAR.php "Array"
Como tu dices es necesario hacer un bucle, pero justamete EL BUCLE no se como hacerlo, de verdad disculpa tantas preguntas.
La primera pregunta es porque desconoces totalmente cómo actúa el comando foreach. Te aconsejo que mires el manual al respecto:
http://es2.php.net/manual/es/control-structures.foreach.php
Aunque te resumiré que se trata de un bucle que se ejecuta por cada valor de la matriz $carro y que asigna dos matrices $k y $v. En $k están los índices de la matriz y en $v los valores.
Parece que en el código está incorrectamente usado. Debería en cada vuelta del bucle, hacer referencia únicamente a $k o $v que son las variables del bucle.
¿Por qué se crea la matriz $carro? Pues deberías preguntarle al programador que lo escribió así. Pero parecer que es una manera de tener reunido todo el contenido del carro de la compra: tienes su identificador, la cantidad, el producto y su precio...
Creo que es incorrecto que hagas alusión a $v como matriz en lugar de a $carro. En todo caso $v debe constar como variable y no como matriz.
Por supuesto, no puedes 'enviar $carro' porque es una matriz. Deberías hacer un bucle para colocar su contenido en la variable del mensaje.
Los bucles se pueden hacer de distintas maneras: con for, con while, con foreach...
Si no sabes hacer un bucle, mal vamos, porque es lo más básico de un lenguaje. Te recomiendo la lectura del manual sobre las estructuras de control:
http://es2.php.net/manual/es/language.control-structures.php
Muchísimas gracias por tu tiempo, y gracias por tu respuesta...
La verdad ya me harté de buscarlo en la red es que estoy trabajando con este carrito de compras descargado de algún sitio de la red y la verdad que no entiendo muchas cosas así que... mejor voy a seguir por la mejor de las OPCIONES... Estudiar mucho CÓDIGO y Empezar desde cero para poder generarlo por mi mismo aunque me equivoque...
Te agradezco mucho, y gracias por tu interés en responder mi pregunta.
Pd: a todos los que lean este artículo, les recomiendo que no busquen copiar lo que ya está hecho, (MUCHAS VECES ESTA MAL HECHO) sino que generenlo ustedes mismos y adquieran el conocimiento, eso les va a servir mil veces más, si yo lo hubiera hecho eso desde un inicio no habría perdido 7 días en buscar por la red y hubiera ganado 7 días de conocimiento.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas