Comunidad de diseño web y desarrollo en internet online

Enviar datos de checkbox múltiples a correo

Citar            
MensajeEscrito el 11 Jul 2012 09:44 pm
Hola!

tengo una duda es con PHP... tengo un formato de solicitud de cotización que consta de unos datos básicos (nombre, e-mail, etc) y unos "checkbox" que contienen los productos disponibles y un input por cada uno para poner cantidades, estos "checkbox" los alimento con los productos disponibles en la BD, ahora lo que estoy haciendo es como con un formulario de contacto, mandar un e-mail con todo y generar el registro en la BD de la persona que llena el formato, pero no he logrado encontrar como hacer para que me llegue también al correo que "checkbox" o producto ha sido seleccionado y la cantidad. si conocen algún tut, o tienen una solución para lograrlo sería estupendo. Les dejo lo que tengo... De antemano muchas gracias, y disculpas si lo que pido es una cosa muy común, mi conocimiento de php y BD es un poco desordenado y básico.

Código HTML :

<?php while($row = mysql_fetch_object($productos)){?> 
            <div class="boxreq">              
                <input class="label" name="producto[]" type="checkbox" value="<?php echo $row->nombre?>"><label class="label"><?php echo $row->nombre?></label>
                <input name="cantidad" class="input" type="text" size="3" value="cant" onclick = "if(this.value=='cant') this.value=''"/>
                </div>
                
<?php }?>

... antes están los campos de nombre, etc y después el submit... en el php estoy así:

Código PHP :

<?php
   
    $conexion = mysql_connect("localhost", "root", ""); //conectar BBDD   
   mysql_select_db("bd", $conexion); 
   
    mysql_query("SET NAMES UTF8",$conexion);
   
   $nombre = $_POST['nombre'];
   $correo = $_POST['correo'];
   $telefono = $_POST['telefono'];
   $ciudad = $_POST['ciudad'];
   $direccion = $_POST['direccion'];
   $empresa = $_POST['empresa'];
   
    $sql = "INSERT INTO clientes (nombre,email,telefono,ciudad,direccion,empresa) VALUES ('{$nombre}','{$correo}','{$telefono}','{$ciudad}','{$direccion}','{$empresa}')";
   
    $result = mysql_query($sql,$conexion);
   
    if (mysql_errno() != 0) {
      //echo mysql_errno().": ".mysql_error();
    } else {
      //echo "<p>Dato se inserto correctamente.</p>";
    }
   
    mysql_close($conexion);
   
if($_POST["nombre"]){

require("class.phpmailer.php");
   
$body='<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<style>
body {
   font-family:Arial, Helvetica, sans-serif;
   font-size: 14px;
   color: #999;
   }
</style>
</head>
<body>
<h1>Contacto</h1>
<p><strong>Nombre:</strong> '.$_POST['nombre'].'</p>
<p><strong>E-Mail:</strong> '.$_POST['correo'].'</p>
<p><strong>Telefono:</strong> '.$_POST['telefono'].'</p>
<p><strong>Ciudad:</strong> '.$_POST['ciudad'].'</p>
<p><strong>Direccion:</strong> '.$_POST['direccion'].'</p>
<p><strong>Empresa:</strong> '.$_POST['empresa'].'</p>
</body>
</html>';
   

   $mail = new PHPMailer();
   $mail->From = $_POST['correo'];
   $mail->FromName = $_POST['nombre'];
   $mail->Subject = "Conctato";
   $mail->Timeout=30;
   $mail->Body = $body;
   $mail->IsHTML(true);

   $correo = "[email protected]";
   $mail->AddAddress($correo, "Conctato");
   $mail->Send();   
   
   echo '<script> alert("Enviado satisfactoriamente, pronto estaremos respondiendo su solicitud") </script>';
   echo '<script> document.location ="index.php"; </script>';

}
   
?>

Por jeanramirez

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Jul 2012 12:11 pm
<input class="label" name="producto[]" type="checkbox"

producto[]... tiene algún valor???

Por SinSemilla

Claber

336 de clabLevel



Genero:Masculino  

i am that i am...

firefox
Citar            
MensajeEscrito el 12 Jul 2012 12:49 pm

SinSemilla escribió:

<input class="label" name="producto[]" type="checkbox"

producto[]... tiene algún valor???


El campo Value es el nombre del producto que lo entrega la BD... Gracias por tu respuesta!

Por jeanramirez

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Jul 2012 12:51 pm
jeanramirez:
Tal como lo has hecho, deberías tener un array llamado $_POST['producto']. Además los <input> con name "cantidad" deberías hacerlo igual, es decir, sus "name" deberían ser "cantidad[]" y también tendrías un array $_POST['cantidad'] en PHP.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 12 Jul 2012 02:33 pm

DriverOp escribió:

jeanramirez:
Tal como lo has hecho, deberías tener un array llamado $_POST['producto']. Además los <input> con name "cantidad" deberías hacerlo igual, es decir, sus "name" deberían ser "cantidad[]" y también tendrías un array $_POST['cantidad'] en PHP.


Muchas gracias por tu respuesta, disculpa la novatada, agregué el array de la sgte manera:

Código PHP :

$producto = $_POST['producto'];
$cantidad = $_POST['cantidad'];
    foreach ($producto as $checkbox){ 
      echo $checkbox."<br>"; 
    } 
    foreach ($cantidad as $input){ 
      echo $input."<br>"; 
    } 


Ahí obtengo la respuesta de los campos seleccionados y las cantidades llenadas, pero no se relacionan...
ahora lo que necesitaría es un operador "&&" o algo parecido en php, q no sé como usar en este caso, lo voy poner como yo creería que es, por supuesto no es así, es solo para ilustrar lo necesito...

Código PHP :

foreach ($_POST['producto'] as $checkbox)&&($cantidad as $input){ 
      echo $checkbox.$input."<br>"; 
    } 


Muchisimas gracias por su atención, es de gran ayuda!

Por jeanramirez

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Jul 2012 01:48 pm
También he pensado en que el checkbox solo sirva para habilitar/deshabilitar el input, y que el echo sea solo del input con la cantidad y que se publique el <label> del input (que sería el nombre del producto) y el input con la cantidad requerida, pero aún no encuentro como publicar el <label> del input, ¿tienen alguna idea? les dejo lo que tengo por si alguno puede ayudarme... muchas gracias!

Código HTML :

<?php while($row = mysql_fetch_object($productos)){?> 
            <div class="boxreq">              
                <input id="producto" name="producto[]" class="label" type="checkbox" value="<?php echo $row->nombre?>"  onclick="swap()" >
                <label class="label"><?php echo $row->nombre?></label><input id="cantidad" name="cantidad[]" class="input" type="text" size="3" value="" disabled/>
                </div>
                
<?php }?>


en el php

Código PHP :

$cantidad = $_POST['cantidad'];

foreach ($cantidad as $input){ //aquí debería poner algo que sirviera para ver el label creo puede ser...
      echo $input."<br>"; 
    } 


La idea es que logre publicar el resultado así:
Producto1: 20, Producto2:15, Producto3:55...
ó
Producto1: 20
Producto2: 15
Producto3: 55
...

Muchas gracias!

Por jeanramirez

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Jul 2012 06:42 pm

DriverOp escribió:

jeanramirez:
Tal como lo has hecho, deberías tener un array llamado $_POST['producto']. Además los <input> con name "cantidad" deberías hacerlo igual, es decir, sus "name" deberían ser "cantidad[]" y también tendrías un array $_POST['cantidad'] en PHP.


Yo sé que todos son personas ocupadas pero si pueden ayudarme de verdad lo necesito... He llegado a un punto en el que obtengo echo deseado, pero no logro pasar una variable válida para enviar por a un correo el resultado, les dejo lo que tengo por si alguno puede ayudarme:


Código PHP :

$quiere = new ArrayIterator($_POST['producto']);
   $legusta = new ArrayIterator($_POST['cantidad']);
   
   $it = new MultipleIterator;
   $it->attachIterator($quiere);
   $it->attachIterator($legusta);
     
   foreach($it as $e) {
     echo $e[0], ' : ', $e[1], ", ";
   }


El resultado es:
Producto1:Cantidad1, Producto2:Cantidad2, .... etc

Justo lo que buscaba, pero no he logrado que esta lista sea una variable que pueda pasar pasar para ser enviado el resultado a un correo. Compañeros si pueden darme una luz al final de este túnel me ayudarían mucho.

Por jeanramirez

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 16 Jul 2012 03:36 am
Bueno gracias a quienes intentaron ayudar, ya logré la respuesta era un poco básica, ya la había tratado, pero en vez de puntos tenía comas por eso no se me daba, aquí está en todo caso, por si alguien tiene el mismo lío, esta es una manera bastante buena de iterar 2 o incluso más array y relacionarlos para luego enviar el resultado por mail, muy útil para formatos de solicitud de cotización simples.

Código PHP :

$want = new ArrayIterator($_POST['product']);
$amount = new ArrayIterator($_POST['howmany']);

$it = new MultipleIterator;
$it->attachIterator($want);
$it->attachIterator($amount);
$contents = ''; //esta variable se usa para enviar al correo.
foreach($it as $e) {
     $contents .=  $e[0] . ' : ' . $e[1] . ", ";
}


Cabe anotar que el servidor debe usar PHP5 > 5.3.0 para gestión de archivos php si no arrojará un error por el uso del MultipleIterator que no está disponible en versiones anteriores de PHP.

Saludos y gracias.

Por jeanramirez

11 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.