Foros del Web » Programando para Internet » PHP »

Enviar mail pasando variables

Estas en el tema de Enviar mail pasando variables en el foro de PHP en Foros del Web. Tengo un formulario en cual además de los datos nombre, dirección y teléfono , se recepcionarán una serie de artículos desde una base de datos, ...
  #1 (permalink)  
Antiguo 14/06/2005, 15:50
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 14 años, 4 meses
Puntos: 5
Enviar mail pasando variables

Tengo un formulario en cual además de los datos nombre, dirección y teléfono, se recepcionarán una serie de artículos desde una base de datos, sería algo más o menos así:

Código HTML:
<form name="form1" method="post" action="enviar.php">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>Nombre:</td>
    <td>
        <input type="text" name="nombre" size="30">
      </td>
  </tr>
  <tr>
    <td>Direcci&oacute;n:</td>
    <td><input type="text" name="direccion" size="30"></td>
  </tr>
  <tr>
    <td>Tel&eacute;fono:</td>
    <td><input type="text" name="telefono" size="30"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
    <td><input type="submit" name="submit" value="enviar"></td>
</table>
</form>

<?PHP

$Link=mysql_connect ("localhost", "", "") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("base")or die("Error select db ".mysql_error());

foreach($HTTP_POST_VARS as $varname => $value)
        $formVars[$varname]=$value;

include("db.php");

$result = mysql_query("SELECT * FROM emp INNER JOIN prod ON emp.prodid = prod.productid WHERE emp.empreid = '" . Getemp() . "' ORDER BY prod.productnom ASC");

while($row = mysql_fetch_array($result))
	{
	 echo "<td>".$row["productnom"]."</td> \n"; 
	 echo "<td>".$row["cant"]."</td> \n";
	 echo "<td>".$row["precio"]."</td> \n";
	 echo "</tr> \n";
	}
?>
hasta acá todo perfecto... pero lo que quiero lograr es que esas variables: productnom, cant y precio se recepcionen en el mail junto con los otros datos del formulario.

Para el formulario tengo este código:

Código PHP:
<?
    $cuerpo 
.= "<b>Nombre:</b> " $_POST["nombre"] . "\n"
    
$cuerpo .= "<b>Dirección:</b> " $_POST["direccion"] . "\n"
    
$cuerpo .= "<b>Teléfono:</b> " $_POST["telefono"] . "\n";  
    
$cuerpo  nl2br($cuerpo); 
    
$to "[email protected]"
    
$subject "$nombre - Consulta"
    
$mailheader "MIME-Version: 1.0 \r\n"
    
$mailheader .= "Content-type: text/html; charset=iso-8859-1 \r\n"
    
$mailheader .= "From: Formulario de Consulta \r\n"
    
$mailheader .= "Return-path: \r\n"
    
$mailheader .= "X-Priority: 1 \r\n"
    
$mailheader .= "X-MSMail-Priority: High \r\n"
    
$mailheader .= "X-Mailer: PHP/".phpversion()." \n"
  
    if (
mail ($to,$subject,$cuerpo,$mailheader)) 
?>
El tema es que no se como pasar los otros valores productnom, cant y precio, es muy complejo???

La verdad es que busqué ejemplos, pero no encontré nada que me soluciones el inconveniente, ojalá alguno de ustedes me puedan ayudar...

Gracias!!!
__________________
Saludos!!!
Maru.-
  #2 (permalink)  
Antiguo 14/06/2005, 16:03
Avatar de GUNIRAN  
Fecha de Ingreso: octubre-2003
Ubicación: Rosario, Santa Fe, Argent
Mensajes: 65
Antigüedad: 14 años, 1 mes
Puntos: 0
Hola Maru,

Podrías hacerlo así:

Cuando sacas los resultados.... los guardas una variable.

<?PHP

$Link=mysql_connect ("localhost", "", "") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("base")or die("Error select db ".mysql_error());

foreach($HTTP_POST_VARS as $varname => $value)
$formVars[$varname]=$value;

include("db.php");

$result = mysql_query("SELECT * FROM emp INNER JOIN prod ON emp.prodid = prod.productid WHERE emp.empreid = '" . Getemp() . "' ORDER BY prod.productnom ASC");

while($row = mysql_fetch_array($result))
{
$productos .= "<td>".$row["productnom"]."</td> \n";
$productos .= "<td>".$row["cant"]."</td> \n";
$productos .= "<td>".$row["precio"]."</td> \n";
$productos .= "</tr> \n";
}
?>


Y luego al crear el cuerpo del mail....

<?
$cuerpo .= "<b>Nombre:</b> " . $_POST["nombre"] . "\n";
$cuerpo .= "<b>Dirección:</b> " . $_POST["direccion"] . "\n";
$cuerpo .= "<b>Teléfono:</b> " . $_POST["telefono"] . "\n";

$cuerpo .= $productos."\n";

$cuerpo = nl2br($cuerpo);
$to = "[email protected]";
$subject = "$nombre - Consulta";
$mailheader = "MIME-Version: 1.0 \r\n";
$mailheader .= "Content-type: text/html; charset=iso-8859-1 \r\n";
$mailheader .= "From: Formulario de Consulta \r\n";
$mailheader .= "Return-path: \r\n";
$mailheader .= "X-Priority: 1 \r\n";
$mailheader .= "X-MSMail-Priority: High \r\n";
$mailheader .= "X-Mailer: PHP/".phpversion()." \n";

if (mail ($to,$subject,$cuerpo,$mailheader))
?>


Recuerda que si quieres enviar los productos formateados en tablas el formato del mail debe ser html.
__________________
Saludos,
Matías Hernán Piuma - Desarrollador Web
Programador PHP Freelance, especialidad: PHP / MySQL / XHTML / CSS
Rosario, Argentina
  #3 (permalink)  
Antiguo 15/06/2005, 15:59
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 14 años, 4 meses
Puntos: 5
Hola GUNIRAN!!! gracias por tu respuesta!!!

Te cuento que probé con lo que me pasaste: $cuerpo .= $productos."\n"; pero me pone "variable indefinida" al momento de enviar el mail, así que lo intenté con:
$cuerpo .= "<b>Productos:</b> " . $_POST["productos"] ."\n"; pero sigue dando el mismo error. :o(

Gracias de todas maneras!!!

Pd: muy interesantes tus trabajos!!! podrias ponerles un link, así se pueden apreciar mejor.
__________________
Saludos!!!
Maru.-
  #4 (permalink)  
Antiguo 15/06/2005, 17:17
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 13 años, 11 meses
Puntos: 2
El problema q tienes es q esas variables nunca las mandas por el formulario a enviar.php
Debes incluirlas dentro de él. Ya sea en un "hidden" o en "input text", de última, por GET o realizar la consulta en el mismo enviar.php y considerando q usas "Content-type: text/html; charset=iso-8859-1 \r\n";, lo mejor para el envío del cuerpo sería q usaras algo así
[PHP]
<?php
$cuerpo = '
<html>
<title>mi correo</title>
<head></head>
<body>
<table width=600>
aqui el msj
</table>
</body>
</html>
';
?>
[PHP]
Yo creo q la mejor forma sería pasar en un hidden a Getemp(), q es la condición de tu SQL, luego haría la consulta en enviar.php la incorporaría a $cuerpo (con el operador ".") si, con el punto.
__________________
Dios dira que esto no es justo, pero lo sera...
  #5 (permalink)  
Antiguo 17/06/2005, 17:42
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 14 años, 4 meses
Puntos: 5
Gracias sebtev!! voy a intentar hacer algo con los datos que me diste.

Gracias a todos por sus aportes!
__________________
Saludos!!!
Maru.-
  #6 (permalink)  
Antiguo 17/06/2005, 18:26
Avatar de GUNIRAN  
Fecha de Ingreso: octubre-2003
Ubicación: Rosario, Santa Fe, Argent
Mensajes: 65
Antigüedad: 14 años, 1 mes
Puntos: 0
Hola Maru,

Claro, no puedes poner $cuerpo .= "<b>Productos:</b> " . $_POST["productos"] ."\n"; por que si indicas que la variable 'productos' es $_POST quiere decir que la estas pasando por desde un formulario. Al igual que si es $_GET indica que la pasas por URL.

En qué linea te indica el error?

PD: Gracias por la sugerecia, pensé que se los había puesto :P
__________________
Saludos,
Matías Hernán Piuma - Desarrollador Web
Programador PHP Freelance, especialidad: PHP / MySQL / XHTML / CSS
Rosario, Argentina
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 10:54.