Comunidad de diseño web y desarrollo en internet online

Problema al enviar un POST por email con un array de campos dinámico

Citar            
MensajeEscrito el 26 May 2014 06:08 pm
Hola gent

Ante todo muchas gracias por pasar a leer este post un minutillo

Resulta que tengo un formulario que crea campos dinámicos, uno modelo[] y otro matricula []. Aqui os paso el codigo.

Código :

<!DOCTYPE html>
<head>
<title>Formulario Registro Clientes de Empresa</title>
<link rel="stylesheet" type="text/css" href="./css/estilo.css" media="all"/>

<script src="./includes/javascript/jquery.js" type="text/javascript"></script> 
<script language="javascript">
      function marcado(){
      if (document.form.acept.checked) {
      document.form.submit(); 
       }
      else{
      alert("Debes aceptar las condiciones de uso");
      document.form.acept.focus();
          return false; 
      }
}
</script> 
<script type="text/javascript" language="javascript">
var posicionCampo = 1;
function agregarUsuario() {
    nuevaFila = document.getElementById("tablaUsuarios").insertRow(-1);
    nuevaFila.id = posicionCampo;
    nuevaCelda = nuevaFila.insertCell(-1);
    nuevaCelda.innerHTML = "<td><label>Modelo:</label></td><td><input type='text' placeholder='Modelo' id='modelo[" + posicionCampo + "]' name='modelo[" + posicionCampo + "]'></td>";
    nuevaCelda = nuevaFila.insertCell(-1);
    nuevaCelda.innerHTML = "<td><label>Matr&iacute;cula:</label></td><td><input type='text' placeholder='Matr&iacute;cula' size='10' id='matr[" + posicionCampo + "]' name='matr[" + posicionCampo + "]'></td>";
    nuevaCelda = nuevaFila.insertCell(-1);
    nuevaCelda.innerHTML = "<td><input type='button' value='Eliminar' onclick='eliminarUsuario(this)'></td>";
    posicionCampo++;
}
function eliminarUsuario(obj) {
    var oTr = obj;
    while(oTr.nodeName.toLowerCase() != 'tr') {
        oTr=oTr.parentNode;
    }
    var root = oTr.parentNode;
    root.removeChild(oTr);
}
</script>
</head>
<body>
   <header>
    
    <form name="form" action="sendb.php" method="post">
<table width="35%" align="center" border="0" cellspacing="0" cellpadding="0">
       <tr>
         <td><label for="empresa">Raz&oacute;n Social.:</label></td>   
           <td colspan="3"><input class="celda" type="text" placeholder="Nombre completo de la sociedad" name="empresa" id="empresa"  required></td>
      </tr> 
       <tr>
       <td><label for="pob">Poblaci&oacute;n:</label></td>
        <td><input type="text" class="celda" name="pob" id="pob" maxlength="50" ><br/></td>
        </tr>
        <tr>
        <td colspan="4"><table id="tablaUsuarios" width="100%"></table></td>
        </tr>
        <tr>
         <td colspan="3"> <input type="button" id="btnAdd" value="Pulse aqu&iacute; para a&ntilde;adir nuevos veh&iacute;culos"/ onClick="agregarUsuario();leer()"></td>
            <td><input type="hidden" name="ntotal" id="ntotal" value="" /></td>
      </tr>
    <tr>
    <td colspan="4"><input type="checkbox" name="acept" id="acept" value="" maxlength="50"  ><a href="condiciones.html" target="_blank">He le&iacute;do y estoy de acuerdo con las condiciones de uso.</a><br/></td></tr>
    <tr>
       <td colspan="4" align="center"><input type="submit" value="Enviar">
        <input type="submit" onClick=" window.location.href='alta.html'"  value="Volver atr&aacute;s">
       </td>
   </tr>
   </table></form>
</div>
</html>


Todo esto se envia mediante un POST a un texto en php:

Código :

<?php
$empresa = $_POST['empresa'];
$pob = $_POST['pob'];
foreach ($_POST['modelo'] as $value) { 
   
   }
foreach ($_POST['matr'] as $matr) { 
   
   }   
   
echo "   
<ul>
 <li><u>Nombre de la empresa:</u> '.$empresa.'
 <li><u>Poblacion:</u> '.$pob.'
 <li><u>Modelo: </u>'.$value.'
 <li><u>Matricula: </u>'.$matr.'"

?>


Y solo me sale 1 de los campos de matricula y modelo.
Esto lo quiero implementar luego con PHPMAILER para mandarlo x correo, pero tendrían que salir todos los modelos y matriculas de los coches mas o menos así:
$matricula1 = $_POST['matr1'] y $modelo1= $_POST['modelo1'] de forma automática, ya que no se cuantos coches tiene cada persona.

De todas formas si conoceis algun metodo mejor o tal...os lo agradeceria enormemente

Muchisimas gracias por la atención y siento ser tan novato jeje

Por emuhell

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 May 2014 12:35 pm
Casi pero no...

La sentencia foreach cicla en todas las posiciones del array y almacena el valor de cada una de ellas en la variable que le indiques después de "as", pero es UN valor a la vez. El foreach es un bucle.

Hay otra sintaxis para foreach que te puede ayudar aquí y sirve para extraer el índice, además de extraer el valor de la posición del array:

Código PHP :

foreach ($array as $indice => $valor) {
...
}


Como presumiblemente $_POST['modelo'] y $_POST['matr'] son arrays con la misma cantidad de elementos y se corresponden entre sí...

Lo que has querido hacer es algo así:

Código PHP :

<?php
$empresa = $_POST['empresa'];
$pob = $_POST['pob'];
foreach ($_POST['modelo'] as $indice => $valor) { 

  $modelo = $valor;
  $matr = $_POST['matr'][$indice];   
 
   
?>
<ul>
 <li><u>Nombre de la empresa:</u> <?php echo $empresa; ?>
 <li><u>Poblacion:</u> <?php echo $pob; ?>
 <li><u>Modelo: </u> <?php echo $modelo; ?>
 <li><u>Matricula: </u><?php echo $matr; ?></ul>
<?php
} // foreach
?>


O algo parecido...

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 May 2014 03:34 pm
Muchas gracias por contestar ante todo.

Con eso casi lo consigo, lo unico que así me repite X veces la empresa con los distintos coches.

A mi me gustaria que pudiera quedarse algo tal que

Empresa: XXX
Población: YYY
Coches: ModeloA -> MatrículaA; ModeloB -> Matrícula B; ModeloC -> MatriculaC

No se si eso será posible

Saludos de nuevo!

Por emuhell

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 May 2014 04:48 pm
Estoy mirando que con la función array_combine he conseguido pasar de:

Código :

modelo[0] = volvo, modelo[1] = opel, ... y matricula[0] = 1234 ABC,  matricula[1] = 1234 BCD


a

Código :

 COCHE[0] = volvo => 1234 ABC, COCHE[1] = opel => 1234 BCD.


Ahora lo unico que me hace falta es la opción para que cada key y valor salga de modo que quede algo tipo:

Código PHP :

 Coche: Volvo -> 1234 ABC; OPEL -> 1234BCD; .... 


No se si es mejor tenerlo todo en un array o en dos, con la misma clave..

HELP!! y gracias de nuevo!

Por emuhell

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 May 2014 05:12 pm
lo ideal es que modifiques el HTML , la logica que quieres usar deberia ser algo asi
<input name="coche[][matricula]" ...................
<input name="coche[][modelo]" ...................

asi obtendras un array $_POST,que contendra un array COCHE con todos los elemenos en una fila

Código PHP :

foreach ($_POST['coche'] as $row){
        echo $row['modelo'] . ' && '  .  $row['matricula'];
}

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 May 2014 09:23 pm
En el caso que tu dices, como sabría que ID tiene cada campo dinámico, ya que así se crean con modelo1,modelo2, modelo3,....y matricula1,2,3.

No entiendo muy bien como se haría así. Podrías explicar un poco más, te lo agradeceria enormemente :)

Un saludo!

Por emuhell

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 May 2014 11:36 pm
cuando se usa la asginacion de nombres en formulario de la forma
name="dato[]" se le esta indicando que se cree automaticamente contando desde el 0 para adelante ahora si quieres tener control de los indices lo podrias agregar como lo pusiste mas arriba

Código :

function agregarUsuario() {
    nuevaFila = document.getElementById("tablaUsuarios").insertRow(-1);
    nuevaFila.id = posicionCampo;
    nuevaCelda = nuevaFila.insertCell(-1);
    nuevaCelda.innerHTML = "<td><label>Modelo:</label></td><td><input type='text' placeholder='Modelo' name='coche[" + posicionCampo + "][modelo]'></td>";
    nuevaCelda = nuevaFila.insertCell(-1);
    nuevaCelda.innerHTML = "<td><label>Matr&iacute;cula:</label></td><td><input type='text' placeholder='Matr&iacute;cula' size='10'' name='coche[" + posicionCampo + "][modelo]'></td>";
    nuevaCelda = nuevaFila.insertCell(-1);
    nuevaCelda.innerHTML = "<td><input type='button' value='Eliminar' onclick='eliminarUsuario(this)'></td>";
    posicionCampo++;
}

y si quieres el numero de indice o key que le agregaste a tus datos solo tienes que agregar a tu foreach una variable ma

Código PHP :

foreach ($_POST['coche'] as $posicionCampo => $row){
        echo $row['modelo'] . ' && '  .  $row['matricula'];
}

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 28 May 2014 11:43 am
Joe....pues asi es mucho mas sencillo :D

Muchisimas gracias!

Ahora voy a intentar que esa cadena se me guarde en una variable para poder usarla en phpmailer, ya que en el $body, tengo algo tal que...

Código :

$mail->Body    = '
<ul>
 <li><b><u>DATOS DE LA EMPRESA<br/></b></u>
 <li><u>Nombre de la empresa:</u> '.$empresa.'
 <li><u>Poblacion:</u> '.$pob.'
 <li>Presenta los siguientes coches: '.$value.'

Por emuhell

3 de clabLevel



 

chrome

 

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