Foros del Web » Programando para Internet » PHP »

Guardar datos de input text dinamicos

Estas en el tema de Guardar datos de input text dinamicos en el foro de PHP en Foros del Web. Hola amigos: Estoy tratando de guardar unos datos en mysql que se almacenan en input text generados por javascript. El problema es que solo me ...
  #1 (permalink)  
Antiguo 16/06/2012, 22:29
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Busqueda Guardar datos de input text dinamicos

Hola amigos:

Estoy tratando de guardar unos datos en mysql que se almacenan en input text generados por javascript. El problema es que solo me guarda los datos de la ultima fila.

Cómo puedo hacer para que los almacene todos???

Este es el código que los genera:

Código PHP:
Ver original
  1. <html>
  2. <head>
  3. <script src="js/jquery.js" type="text/javascript"></script>
  4. <script type="text/javascript">
  5. $(document).ready(function(){
  6.    
  7. });
  8.  
  9. function agregarFila(obj){
  10.         $("#cant_campos").val(parseInt($("#cant_campos").val()) + 1);
  11.         var oId = $("#cant_campos").val();
  12.         var tipo_contacto = $("#selTipo_contacto").val();
  13.         var persona_contacto = $("#txtPersona_contacto").val();
  14.         var telefonos = $("#txtTelefonos").val();
  15.         var correo_contacto = $("#txtCorreo_contacto").val();
  16.  
  17.         var strHtml1 = "<td>" + tipo_contacto + '<input type="hidden" id="hdnTipo_contacto_' + oId + '" name="hdnTipo_contacto_' + oId + '" value="' + tipo_contacto + '"/></td>';
  18.         var strHtml2 = "<td>" + persona_contacto + '<input type="hidden" id="hdnPersona_contacto_' + oId + '" name="hdnPersona_contacto_' + oId + '" value="' + persona_contacto + '"/></td>' ;
  19.         var strHtml3 = "<td>" + telefonos + '<input type="hidden" id="hdnTtelefonos_' + oId + '" name="hdnTelefonos_' + oId + '" value="' + telefonos + '"/></td>' ;
  20.         var strHtml4 = "<td>" + correo_contacto + '<input type="hidden" id="hdnCorreo_contacto_' + oId + '" name="hdnCorreo_contacto_' + oId + '" value="' + correo_contacto + '"/></td>' ;
  21.         var strHtml5 = '<td><img src="images/delete.png" width="16" height="16" alt="Eliminar" onclick="if(confirm(\'Realmente desea eliminar este detalle?\')){eliminarFila(' + oId + ');}"/>';
  22.         strHtml5 += '<input type="hidden" id="hdnIdCampos_' + oId +'" name="hdnIdCampos[]" value="' + oId + '" /></td>';
  23.         var strHtmlTr = "<tr id='rowDetalle_" + oId + "'></tr>";
  24.         var strHtmlFinal = strHtml1 + strHtml2 + strHtml3 + strHtml4 + strHtml5;
  25.         //tambien se puede agregar todo el HTML de una sola vez.
  26.         //var strHtmlTr = "<tr id='rowDetalle_" + oId + "'>" + strHtml1 + strHtml2 + strHtml3 + strHtml4 + strHtml5 + strHtml6 +"</tr>";
  27.         $("#tbDetalle").append(strHtmlTr);
  28.         //si se agrega el HTML de una sola vez se debe comentar la linea siguiente.
  29.         $("#rowDetalle_" + oId).html(strHtmlFinal);
  30.         return false;
  31.     }
  32.     function eliminarFila(oId){
  33.         $("#rowDetalle_" + oId).remove();  
  34.         return false;
  35.     }
  36.  
  37.     function cancelar(){
  38.         $("#tbDetalle").html("");  
  39.         return false;
  40.     }
  41. </script>
  42. </head>
  43. <body>
  44. <form name="proyecto" id="proyecto" action="prueba6.php" method="post">
  45.     <input type="hidden" id="num_campos" name="num_campos" value="0" />
  46.     <input type="hidden" id="cant_campos" name="cant_campos" value="0" />
  47. <fieldset>
  48. <tr>
  49.     <td>Tipo de Contacto:</td>
  50.     <td><select name="selTipo_contacto[]" id="selTipo_contacto" class="textbox txtFec">
  51.       <option value="Informacion general">Informacion general</option>
  52.       <option value="Acuerdo comercial">Acuerdo comercial</option>
  53.       <option value="Reservaciones">Reservaciones</option>
  54.       <option value="Notificacion de pagos">Notificacion de pagos</option>
  55.       <option value="Actualización de tarifas">Actualizacion de tarifas</option>
  56.     </select></td>
  57.     <td>Persona Contacto:</td>
  58.     <td><input name="txtPersona_contacto[]" type="text" id="txtPersona_contacto" size="10" class="textbox" /></td>
  59.     <td>Telefonos:</td>
  60.     <td><input name="txtTelefonos[]" type="text" id="txtTelefonos" size="10" class="textbox" /></td>
  61.     <td>Correo Contacto:</td>
  62.     <td><input name="txtCorreo_contacto[]" type="text" id="txtCorreo_contacto" size="10" class="textbox" /></td>
  63.   </tr>
  64.  
  65.    
  66. </fieldset>
  67. <div class="button_div">    
  68.     <input type="reset" id="btnCancel" name="btnCancel" value="Cancelar" class="buttons_CANCEL" onClick="cancelar();" />
  69.     <input type="button" id="btnAgregar" name="btnAgregar" value="Agregar Persona" class="buttons_aplicar" onClick="agregarFila(document.getElementById('cant_campos'));" />
  70.     <input type="submit" id="btnAgregar" name="btnAgregar" value="Guardar" class="buttons_OK"  />
  71. </div>
  72. <fieldset class="fieldset">
  73.     <legend class="legend">
  74.         Detalle de Personas
  75.     </legend>
  76.     <div class="clear"></div>
  77.     <div id="form3" class="form-horiz">
  78.     <table width="100%" id="tblDetalle" class="listado">
  79.         <thead>
  80.             <tr>
  81.                 <th>Tipo de Contacto</th>
  82.                 <th>Persona Contacto</th>
  83.                 <th>Telefonos</th>
  84.                 <th>Correo Contacto</th>
  85.                 <th>Accion</th>
  86.             </tr>
  87.         </thead>
  88.         <tbody id="tbDetalle">
  89.         </tbody>
  90.     </table>
  91.     </div>
  92. </fieldset>
  93. </form>
  94. </body>
  95. </html>

y aqui los guardo:

Código PHP:
Ver original
  1. include ('funciones/db.php');
  2.  
  3. $conexion = db_connect();
  4.   if (!$conexion)
  5.    return 0;
  6.  
  7. $num_campos= $_POST['num_campos'];
  8. $cant_campos= $_POST['cant_campos'];
  9.  
  10. $tipo_contacto = $_POST['selTipo_contacto'];
  11. $persona_contacto = $_POST['txtPersona_contacto'];
  12. $telefonos = $_POST['txtTelefonos'];
  13. $correo_contacto = $_POST['txtCorreo_contacto'];
  14.  
  15. $numRows = count($cant_campos);
  16.  
  17.     for($i=0; $i<$numRows; $i++) {
  18.           $sql_ins2 = mysql_query("INSERT INTO contactos (id_posada, tipo_contacto, persona_contacto, telefonos, correo_contacto) VALUES ('$id_posada', '".$_POST['selTipo_contacto'][$i]."', '".$_POST['txtPersona_contacto'][$i]."', '".$_POST['txtTelefonos'][$i]."', '".$_POST['txtCorreo_contacto'][$i]."')") or die ("Error en Insert : ".mysql_error());
  19.     }

Gracias por su ayuda...
__________________
Caminando con el corazón partío
  #2 (permalink)  
Antiguo 17/06/2012, 01:02
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Guardar datos de input text dinamicos

Estas generando intpus con un nombre del tipo 'hdnPersona_contacto_X' y luego recoges los datos de variables con el nombre 'txtPersona_contacto', como puedes ver no coinciden, por lo tanto imposible de que se guarden ambos datos, debes hacer coincidir los nombres, si no, no tiene caso, para que veas de lo que hablo has un...

Código PHP:
Ver original
  1. echo '<pre>';
  2. var_dump($_POST);
  3. echo '</pre>';
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 17/06/2012, 17:53
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar datos de input text dinamicos

Hola, lo cambié como me indicaste pero solo me guarda la última fila ingresada. Asi quedó:

Código PHP:
Ver original
  1. <html>
  2. <head>
  3. <script src="js/jquery.js" type="text/javascript"></script>
  4. <script type="text/javascript">
  5. $(document).ready(function(){
  6.    
  7. });
  8.  
  9. function agregarFila(obj){
  10.         $("#cant_campos").val(parseInt($("#cant_campos").val()) + 1);
  11.         var oId = $("#cant_campos").val();
  12.         var tipo_contacto = $("#selTipo_contacto").val();
  13.         var persona_contacto = $("#txtPersona_contacto").val();
  14.         var telefonos = $("#txtTelefonos").val();
  15.         var correo_contacto = $("#txtCorreo_contacto").val();
  16.  
  17.         var strHtml1 = "<td>" + tipo_contacto + '<input type="hidden" id="selTipo_contacto_' + oId + '" name="selTipo_contacto_' + oId + '" value="' + tipo_contacto + '"/></td>';
  18.         var strHtml2 = "<td>" + persona_contacto + '<input type="hidden" id="txtPersona_contacto_' + oId + '" name="txtPersona_contacto_' + oId + '" value="' + persona_contacto + '"/></td>' ;
  19.         var strHtml3 = "<td>" + telefonos + '<input type="hidden" id="txtTtelefonos_' + oId + '" name="txtTelefonos_' + oId + '" value="' + telefonos + '"/></td>' ;
  20.         var strHtml4 = "<td>" + correo_contacto + '<input type="hidden" id="txtCorreo_contacto_' + oId + '" name="txtCorreo_contacto_' + oId + '" value="' + correo_contacto + '"/></td>' ;
  21.         var strHtml5 = '<td><img src="images/delete.png" width="16" height="16" alt="Eliminar" onclick="if(confirm(\'Realmente desea eliminar este detalle?\')){eliminarFila(' + oId + ');}"/>';
  22.         strHtml5 += '<input type="hidden" id="hdnIdCampos_' + oId +'" name="hdnIdCampos[]" value="' + oId + '" /></td>';
  23.         var strHtmlTr = "<tr id='rowDetalle_" + oId + "'></tr>";
  24.         var strHtmlFinal = strHtml1 + strHtml2 + strHtml3 + strHtml4 + strHtml5;
  25.         //tambien se puede agregar todo el HTML de una sola vez.
  26.         //var strHtmlTr = "<tr id='rowDetalle_" + oId + "'>" + strHtml1 + strHtml2 + strHtml3 + strHtml4 + strHtml5 + strHtml6 +"</tr>";
  27.         $("#tbDetalle").append(strHtmlTr);
  28.         //si se agrega el HTML de una sola vez se debe comentar la linea siguiente.
  29.         $("#rowDetalle_" + oId).html(strHtmlFinal);
  30.         return false;
  31.     }
  32.     function eliminarFila(oId){
  33.         $("#rowDetalle_" + oId).remove();  
  34.         return false;
  35.     }
  36.  
  37.     function cancelar(){
  38.         $("#tbDetalle").html("");  
  39.         return false;
  40.     }
  41. </script>
  42. </head>
  43. <body>
  44. <form name="proyecto" id="proyecto" action="prueba6.php" method="post">
  45.     <input type="hidden" id="num_campos" name="num_campos" value="0" />
  46.     <input type="hidden" id="cant_campos" name="cant_campos" value="0" />
  47. <fieldset>
  48. <tr>
  49.     <td>Tipo de Contacto:</td>
  50.     <td><select name="selTipo_contacto[]" id="selTipo_contacto" class="textbox txtFec">
  51.       <option value="Informacion general">Informacion general</option>
  52.       <option value="Acuerdo comercial">Acuerdo comercial</option>
  53.       <option value="Reservaciones">Reservaciones</option>
  54.       <option value="Notificacion de pagos">Notificacion de pagos</option>
  55.       <option value="Actualización de tarifas">Actualizacion de tarifas</option>
  56.     </select></td>
  57.     <td>Persona Contacto:</td>
  58.     <td><input name="txtPersona_contacto[]" type="text" id="txtPersona_contacto" size="10" class="textbox" /></td>
  59.     <td>Telefonos:</td>
  60.     <td><input name="txtTelefonos[]" type="text" id="txtTelefonos" size="10" class="textbox" /></td>
  61.     <td>Correo Contacto:</td>
  62.     <td><input name="txtCorreo_contacto[]" type="text" id="txtCorreo_contacto" size="10" class="textbox" /></td>
  63.   </tr>
  64.  
  65.    
  66. </fieldset>
  67. <div class="button_div">    
  68.     <input type="reset" id="btnCancel" name="btnCancel" value="Cancelar" class="buttons_CANCEL" onClick="cancelar();" />
  69.     <input type="button" id="btnAgregar" name="btnAgregar" value="Agregar Persona" class="buttons_aplicar" onClick="agregarFila(document.getElementById('cant_campos'));" />
  70.     <input type="submit" id="btnAgregar" name="btnAgregar" value="Guardar" class="buttons_OK"  />
  71. </div>
  72. <fieldset class="fieldset">
  73.     <legend class="legend">
  74.         Detalle de Personas
  75.     </legend>
  76.     <div class="clear"></div>
  77.     <div id="form3" class="form-horiz">
  78.     <table width="100%" id="tblDetalle" class="listado">
  79.         <thead>
  80.             <tr>
  81.                 <th>Tipo de Contacto</th>
  82.                 <th>Persona Contacto</th>
  83.                 <th>Telefonos</th>
  84.                 <th>Correo Contacto</th>
  85.                 <th>Accion</th>
  86.             </tr>
  87.         </thead>
  88.         <tbody id="tbDetalle">
  89.         </tbody>
  90.     </table>
  91.     </div>
  92. </fieldset>
  93. </form>
  94. </body>
  95. </html>

y en el que guarda:

Código PHP:
Ver original
  1. include ('funciones/db.php');
  2.  
  3. $conn = db_connect();
  4.   if (!$conn)
  5.    return 0;
  6.  
  7. $id_posada = 8;
  8. $num_campos= $_POST['num_campos'];
  9. $cant_campos= $_POST['cant_campos'];
  10. $tipo_contacto = $_POST['selTipo_contacto'];
  11. $persona_contacto = $_POST['txtPersona_contacto'];
  12. $telefonos = $_POST['txtTelefonos'];
  13. $correo_contacto = $_POST['txtCorreo_contacto'];
  14.  
  15. echo '<pre>';
  16.     var_dump($_POST);
  17.     echo '</pre>';
  18.  
  19. $numRows = count($cant_campos);
  20.  
  21.     for($i=0; $i<$numRows; $i++) {
  22.           $sql_ins2 = mysql_query("INSERT INTO contactos (id_posada, tipo_contacto, persona_contacto, telefonos, correo_contacto) VALUES ('$id_posada', '".$_POST['selTipo_contacto'][$i]."', '".$_POST['txtPersona_contacto'][$i]."', '".$_POST['txtTelefonos'][$i]."', '".$_POST['txtCorreo_contacto'][$i]."')") or die ("Error en Insert : ".mysql_error());
  23.     }

Al imprimir con var_dump me arroja esto:

Código PHP:
Ver original
  1. array(16) {
  2.   ["num_campos"]=>
  3.   string(1) "0"
  4.   ["cant_campos"]=>
  5.   string(1) "2"
  6.   ["selTipo_contacto"]=>
  7.   array(1) {
  8.     [0]=>
  9.     string(25) "Actualización de tarifas"
  10.   }
  11.   ["txtPersona_contacto"]=>
  12.   array(1) {
  13.     [0]=>
  14.     string(6) "Jimena"
  15.   }
  16.   ["txtTelefonos"]=>
  17.   array(1) {
  18.     [0]=>
  19.     string(6) "999999"
  20.   }
  21.   ["txtCorreo_contacto"]=>
  22.   array(1) {
  23.     [0]=>
  24.     string(18) "[email protected]"
  25.   }
  26.   ["btnAgregar"]=>
  27.   string(7) "Guardar"
  28.   ["selTipo_contacto_1"]=>
  29.   string(19) "Informacion general"
  30.   ["txtPersona_contacto_1"]=>
  31.   string(4) "Bugs"
  32.   ["txtTelefonos_1"]=>
  33.   string(6) "111111"
  34.   ["txtCorreo_contacto_1"]=>
  35.   string(16) "[email protected]"
  36.   ["hdnIdCampos"]=>
  37.   array(2) {
  38.     [0]=>
  39.     string(1) "1"
  40.     [1]=>
  41.     string(1) "2"
  42.   }
  43.   ["selTipo_contacto_2"]=>
  44.   string(25) "Actualización de tarifas"
  45.   ["txtPersona_contacto_2"]=>
  46.   string(6) "Jimena"
  47.   ["txtTelefonos_2"]=>
  48.   string(6) "999999"
  49.   ["txtCorreo_contacto_2"]=>
  50.   string(18) "[email protected]"
  51. }

Que estoy haciendo mal????

Gracias.
__________________
Caminando con el corazón partío
  #4 (permalink)  
Antiguo 17/06/2012, 18:26
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Guardar datos de input text dinamicos

count retorna el numero de items dentro de un ARRAY, $cant_campos NO ES ARRAY, es un string/int, en todo caso sería...

Código PHP:
Ver original
  1. for($i=0; $i<$cant_campos; $i++) {
  2.  
  3. }
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 17/06/2012, 19:02
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar datos de input text dinamicos

Ahora me guardó la última fila y otra en la que solo guardo un campo (id_posada). Esto arrojó el var_dump:

Código PHP:
Ver original
  1. array(16) {
  2.   ["num_campos"]=>
  3.   string(1) "0"
  4.   ["cant_campos"]=>
  5.   string(1) "2"
  6.   ["selTipo_contacto"]=>
  7.   array(1) {
  8.     [0]=>
  9.     string(21) "Notificacion de pagos"
  10.   }
  11.   ["txtPersona_contacto"]=>
  12.   array(1) {
  13.     [0]=>
  14.     string(3) "Pam"
  15.   }
  16.   ["txtTelefonos"]=>
  17.   array(1) {
  18.     [0]=>
  19.     string(7) "4444444"
  20.   }
  21.   ["txtCorreo_contacto"]=>
  22.   array(1) {
  23.     [0]=>
  24.     string(15) "[email protected]"
  25.   }
  26.   ["btnAgregar"]=>
  27.   string(7) "Guardar"
  28.   ["selTipo_contacto_1"]=>
  29.   string(13) "Reservaciones"
  30.   ["txtPersona_contacto_1"]=>
  31.   string(3) "kim"
  32.   ["txtTelefonos_1"]=>
  33.   string(6) "333333"
  34.   ["txtCorreo_contacto_1"]=>
  35.   string(13) "[email protected]"
  36.   ["hdnIdCampos"]=>
  37.   array(2) {
  38.     [0]=>
  39.     string(1) "1"
  40.     [1]=>
  41.     string(1) "2"
  42.   }
  43.   ["selTipo_contacto_2"]=>
  44.   string(21) "Notificacion de pagos"
  45.   ["txtPersona_contacto_2"]=>
  46.   string(3) "Pam"
  47.   ["txtTelefonos_2"]=>
  48.   string(7) "4444444"
  49.   ["txtCorreo_contacto_2"]=>
  50.   string(15) "[email protected]"
  51. }
__________________
Caminando con el corazón partío
  #6 (permalink)  
Antiguo 18/06/2012, 09:53
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar datos de input text dinamicos

Hola, revisando el código me doy cuenta que hay algo que está fallando en el javascript. Pero no entiendo que es porque si pasa los datos pero solo guarda los ultimos completos. No entiendo.

Por favor si me pueden explicar porque no se guardan o donde los estoy pasando mal. Quiero entender esto.

Gracias
__________________
Caminando con el corazón partío
  #7 (permalink)  
Antiguo 18/06/2012, 09:58
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Guardar datos de input text dinamicos

No entiendo bien que es lo que esta pasando, pero, puedes hacer algo así...

Código PHP:
Ver original
  1. for($i=0; $i<count($_POST['txtTelefonos']); $i++) {
  2.  
  3. }

El problema sería si el numero de campos no es igual en todos los que vas a insertar...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #8 (permalink)  
Antiguo 18/06/2012, 10:19
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Guardar datos de input text dinamicos

No es el Javascript el que falla, sino la forma de tomar la información desde $_POST, estás intentando leer, por ejemplo, ['selTipo_contacto'] como array, pero, en realidad es una cadena y los diferentes elementos están como:

['selTipo_contacto']
['selTipo_contacto_1']
['selTipo_contacto_2']

Entonces, para recorrerlos todos sería algo como:
Código PHP:
Ver original
  1. for($i = 0; $i <= $numRows; $i++) {
  2.           // Primero necesitamos saber cómo acceder a los campos
  3.           $sufijo  = ($i == 0) ? '' : "_$i";
  4.           // Si es la primera pasada, entonces los campos no tienen sufijo
  5.           // Si $i es mayor que cero, el sufijo es guión bajo, seguido del valor de $i
  6.  
  7.           // Ahora, para acceder a cada campo:
  8.           // En lugar de poner $_POST['txtPersona_contacto'][$i]
  9.           // Debes usar: $_POST['txtPersona_contacto' . $sufijo]
  10.           $sql_ins2 = mysql_query("INSERT INTO contactos (id_posada, tipo_contacto, persona_contacto, telefonos, correo_contacto) VALUES ('$id_posada', '".$_POST['selTipo_contacto'.$sufijo]."', '".$_POST['txtPersona_contacto'.$sufijo]."', '".$_POST['txtTelefonos'.$sufijo]."', '".$_POST['txtCorreo_contacto'.$sufijo]."')") or die ("Error en Insert : ".mysql_error());
  11.     }

El único problema sería con txtTelefonos, que es un array y después es una cadena cuando tienes txtTelefonos_1, etc.
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 18/06/2012, 10:22
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar datos de input text dinamicos

lo puse como me indicaste y le puse un echo asi:

Código PHP:
Ver original
  1. for($i=0; $i<count($_POST['txtTelefonos']); $i++) {
  2.       echo $txtTelefonos[$i];
  3.     }
y no muestra nada
__________________
Caminando con el corazón partío
  #10 (permalink)  
Antiguo 18/06/2012, 10:24
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar datos de input text dinamicos

pero hay alguna forma de que todos sean arrays?
__________________
Caminando con el corazón partío
  #11 (permalink)  
Antiguo 18/06/2012, 10:29
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Guardar datos de input text dinamicos

Sorry, estaba confundido, los campos son array al crearlos, pero al agregar los demás desde Javascript lo haces como texto normal.

Lo que está en rojo es el sufijo que estás agregando:
var strHtml1 = "<td>" + tipo_contacto + '<input type="hidden" id="selTipo_contacto_' + oId + '" name="selTipo_contacto_' + oId + '" value="' + tipo_contacto + '"/></td>';

Debiendo ser:
var strHtml1 = "<td>" + tipo_contacto + '<input type="hidden" id="selTipo_contacto[]' + '" name="selTipo_contacto_' + oId + '" value="' + tipo_contacto + '"/></td>';

Lógicamente, necesitas hacerlo para cada campo.
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 18/06/2012, 10:37
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar datos de input text dinamicos

Gracias Triby, lo pruebo y les aviso. Gracias tambien por tu ayuda Nemutagk.
__________________
Caminando con el corazón partío
  #13 (permalink)  
Antiguo 18/06/2012, 10:57
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar datos de input text dinamicos

Ahora me guarda las 2 filas pero una solo guarda Array, Array, Array... y la otra si guarda los datos. lo coloqué asi:

Código PHP:
Ver original
  1. function agregarFila(obj){
  2.         $("#cant_campos").val(parseInt($("#cant_campos").val()) + 1);
  3.         var oId = $("#cant_campos").val();
  4.         var tipo_contacto = $("#selTipo_contacto").val();
  5.         var persona_contacto = $("#txtPersona_contacto").val();
  6.         var telefonos = $("#txtTelefonos").val();
  7.         var correo_contacto = $("#txtCorreo_contacto").val();
  8.  
  9.         var strHtml1 = "<td>" + tipo_contacto + '<input type="hidden" id="selTipo_contacto[]' + '" name="selTipo_contacto_' + oId + '" value="' + tipo_contacto + '"/></td>';
  10.         var strHtml2 = "<td>" + persona_contacto + '<input type="hidden" id="txtPersona_contacto[]' + '" name="txtPersona_contacto_' + oId + '" value="' + persona_contacto + '"/></td>' ;
  11.         var strHtml3 = "<td>" + telefonos + '<input type="hidden" id="txtTtelefonos[]' + '" name="txtTelefonos_' + oId + '" value="' + telefonos + '"/></td>' ;
  12.         var strHtml4 = "<td>" + correo_contacto + '<input type="hidden" id="txtCorreo_contacto[]' + '" name="txtCorreo_contacto_' + oId + '" value="' + correo_contacto + '"/></td>' ;
  13.         var strHtml5 = '<td><img src="images/delete.png" width="16" height="16" alt="Eliminar" onclick="if(confirm(\'Realmente desea eliminar este detalle?\')){eliminarFila(' + oId + ');}"/>';
  14.         strHtml5 += '<input type="hidden" id="hdnIdCampos[]' +'" name="hdnIdCampos_" value="' + oId + '" /></td>';
  15.         var strHtmlTr = "<tr id='rowDetalle_" + oId + "'></tr>";
  16.         var strHtmlFinal = strHtml1 + strHtml2 + strHtml3 + strHtml4 + strHtml5;
  17.         //tambien se puede agregar todo el HTML de una sola vez.
  18.         //var strHtmlTr = "<tr id='rowDetalle_" + oId + "'>" + strHtml1 + strHtml2 + strHtml3 + strHtml4 + strHtml5 + strHtml6 +"</tr>";
  19.         $("#tbDetalle").append(strHtmlTr);
  20.         //si se agrega el HTML de una sola vez se debe comentar la linea siguiente.
  21.         $("#rowDetalle_" + oId).html(strHtmlFinal);
  22.         return false;
  23.     }

y en el que guarda asi:

Código PHP:
Ver original
  1. $numRows = count($tipo_contacto);
  2.  
  3.  
  4. for($i = 0; $i <= $numRows; $i++) {
  5.               // Primero necesitamos saber cómo acceder a los campos
  6.               $sufijo  = ($i == 0) ? '' : "_$i";
  7.               // Si es la primera pasada, entonces los campos no tienen sufijo
  8.               // Si $i es mayor que cero, el sufijo es guión bajo, seguido del valor de $i
  9.      
  10.               // Ahora, para acceder a cada campo:
  11.               // En lugar de poner $_POST['txtPersona_contacto'][$i]
  12.               // Debes usar: $_POST['txtPersona_contacto' . $sufijo]
  13.               $sql_ins2 = mysql_query("INSERT INTO contactos (id_posada, tipo_contacto, persona_contacto, telefonos, correo_contacto) VALUES ('$id_posada', '".$_POST['selTipo_contacto'.$sufijo]."', '".$_POST['txtPersona_contacto'.$sufijo]."', '".$_POST['txtTelefonos'.$sufijo]."', '".$_POST['txtCorreo_contacto'.$sufijo]."')") or die ("Error en Insert : ".mysql_error());
  14.         }

el var_dump arroja esto:

Código PHP:
Ver original
  1. array(16) {
  2.   ["num_campos"]=>
  3.   string(1) "0"
  4.   ["cant_campos"]=>
  5.   string(1) "2"
  6.   ["selTipo_contacto"]=>
  7.   array(1) {
  8.     [0]=>
  9.     string(13) "Reservaciones"
  10.   }
  11.   ["txtPersona_contacto"]=>
  12.   array(1) {
  13.     [0]=>
  14.     string(4) "Till"
  15.   }
  16.   ["txtTelefonos"]=>
  17.   array(1) {
  18.     [0]=>
  19.     string(7) "4444444"
  20.   }
  21.   ["txtCorreo_contacto"]=>
  22.   array(1) {
  23.     [0]=>
  24.     string(15) "[email protected]"
  25.   }
  26.   ["btnAgregar"]=>
  27.   string(7) "Guardar"
  28.   ["selTipo_contacto_1"]=>
  29.   string(19) "Informacion general"
  30.   ["txtPersona_contacto_1"]=>
  31.   string(4) "lola"
  32.   ["txtTelefonos_1"]=>
  33.   string(7) "7474512"
  34.   ["txtCorreo_contacto_1"]=>
  35.   string(15) "[email protected]"
  36.   ["hdnIdCampos_"]=>
  37.   string(1) "2"
  38.   ["selTipo_contacto_2"]=>
  39.   string(13) "Reservaciones"
  40.   ["txtPersona_contacto_2"]=>
  41.   string(4) "Till"
  42.   ["txtTelefonos_2"]=>
  43.   string(7) "4444444"
  44.   ["txtCorreo_contacto_2"]=>
  45.   string(15) "[email protected]"
  46. }

esta parte estaba asi:

Código PHP:
Ver original
  1. strHtml5 += '<input type="hidden" id="hdnIdCampos_' + oId +'" name="hdnIdCampos[]" value="' + oId + '" /></td>';

y la puse asi:

Código PHP:
Ver original
  1. strHtml5 += '<input type="hidden" id="hdnIdCampos[]' +'" name="hdnIdCampos_" value="' + oId + '" /></td>';

no entiendo la falla
__________________
Caminando con el corazón partío
  #14 (permalink)  
Antiguo 18/06/2012, 18:47
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Guardar datos de input text dinamicos

Bueno, parece que el copy/paste sin analizar sigue siendo una mala opción, porque me equivoqué en la sugerencia para la línea del JS y la forma correcta es:

Código Javascript:
Ver original
  1. strHtml5 += '<input type="hidden" id="nombreDelCampo_' + oId +'" name="nombreDelCampo[]" value="' + oId + '" /></td>';

Con eso y el PHP "original" debería ser suficiente:
Código PHP:
Ver original
  1. // Debe ser <= porque el contador lo inicias en cero, de lo contrario omitiría el último elemento
  2. for($i=0; $i<=$numRows; $i++) {
  3.           $sql_ins2 = mysql_query("INSERT INTO contactos (id_posada, tipo_contacto, persona_contacto, telefonos, correo_contacto) VALUES ('$id_posada', '".$_POST['selTipo_contacto'][$i]."', '".$_POST['txtPersona_contacto'][$i]."', '".$_POST['txtTelefonos'][$i]."', '".$_POST['txtCorreo_contacto'][$i]."')") or die ("Error en Insert : ".mysql_error());
  4.     }
__________________
- León, Guanajuato
- GV-Foto
  #15 (permalink)  
Antiguo 18/06/2012, 19:19
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Guardar datos de input text dinamicos

Triby ahora si funciona. Tienes razón, cuando uno se copia códigos por allí sin saber lo que está haciendo, se vuelve una locura. Mil gracias por tu ayuda y explicaciones para entender lo que hago. ;)
__________________
Caminando con el corazón partío
  #16 (permalink)  
Antiguo 08/08/2015, 18:39
 
Fecha de Ingreso: agosto-2015
Mensajes: 3
Antigüedad: 8 años, 8 meses
Puntos: 0
Pregunta Respuesta: Guardar datos de input text dinamicos

Y por fin como quedo y trate de hacer los pasos pero me sigue insertando el ultimo y el otro lo inserta con Array Array Array, Helpme please!!!

Lo tengo de esta manera:

function agregarFila(obj){
$("#cant_campos").val(parseInt($("#cant_campos").v al()) + 1);
var oId = $("#cant_campos").val();
var tipo_contacto = $("#selTipo_contacto").val();
var persona_contacto = $("#txtPersona_contacto").val();
var telefonos = $("#txtTelefonos").val();
var correo_contacto = $("#txtCorreo_contacto").val();

var strHtml1 = "<td>" + tipo_contacto + '<input type="hidden" id="selTipo_contacto[]' + '" name="selTipo_contacto_' + oId + '" value="' + tipo_contacto + '"/></td>';
var strHtml2 = "<td>" + persona_contacto + '<input type="hidden" id="txtPersona_contacto[]' + '" name="txtPersona_contacto_' + oId + '" value="' + persona_contacto + '"/></td>' ;
var strHtml3 = "<td>" + telefonos + '<input type="hidden" id="txtTtelefonos[]' + '" name="txtTelefonos_' + oId + '" value="' + telefonos + '"/></td>' ;
var strHtml4 = "<td>" + correo_contacto + '<input type="hidden" id="txtCorreo_contacto[]' + '" name="txtCorreo_contacto_' + oId + '" value="' + correo_contacto + '"/></td>' ;
var strHtml5 = '<td><img src="images/delete.png" width="16" height="16" alt="Eliminar" onclick="if(confirm(\'Realmente desea eliminar este detalle?\')){eliminarFila(' + oId + ');}"/>';
strHtml5 += '<input type="hidden" id="hdnIdCampos_' + oId +'" name="hdnIdCampos[]" value="' + oId + '" /></td>';


y la funcion de insert asi:


$id_posada = 8;
$num_campos= $_POST['num_campos'];
$cant_campos= $_POST['cant_campos'];
$tipo_contacto = $_POST['selTipo_contacto'];
$persona_contacto = $_POST['txtPersona_contacto'];
$telefonos = $_POST['txtTelefonos'];
$correo_contacto = $_POST['txtCorreo_contacto'];

echo '<pre>';
var_dump($_POST);
echo '</pre>';

$numRows = count($cant_campos);

for($i=0; $i<=$numRows; $i++) {
$sql_ins2 = mysql_query("INSERT INTO contactos (id_posada, tipo_contacto, persona_contacto, telefonos, correo_contacto) VALUES ('$id_posada', '".$_POST['selTipo_contacto'][$i]."', '".$_POST['txtPersona_contacto'][$i]."', '".$_POST['txtTelefonos'][$i]."', '".$_POST['txtCorreo_contacto'][$i]."')") or die ("Error en Insert : ".mysql_error());
}
?>

GRACIAS POR SU AYUDA!!!

Última edición por V1ktor; 08/08/2015 a las 18:45
  #17 (permalink)  
Antiguo 08/08/2015, 22:06
 
Fecha de Ingreso: agosto-2015
Mensajes: 3
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: Guardar datos de input text dinamicos

LOGRE SOLUCIONARLO ANALIZANDO BIEN LOS COMENTARIOS, GRACIAS.


Código PHP:
for($i=1$i<=($_POST['cant_campos']); $i++){
 
$sufijo  = ($i == 0) ? '' "_$i";

$sql_ins2 mysql_query("INSERT INTO contactos (id_posada, tipo_contacto, persona_contacto, telefonos, correo_contacto) VALUES ('$id_posada', '".$_POST['selTipo_contacto'.$sufijo]."', '".$_POST['txtPersona_contacto'.$sufijo]."', '".$_POST['txtTelefonos'.$sufijo]."', '".$_POST['txtCorreo_contacto'.$sufijo]."')") or die ("Error en Insert : ".mysql_error()); 
  #18 (permalink)  
Antiguo 06/04/2016, 14:27
 
Fecha de Ingreso: febrero-2016
Mensajes: 31
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Guardar datos de input text dinamicos

Cita:
Iniciado por Triby Ver Mensaje
Bueno, parece que el copy/paste sin analizar sigue siendo una mala opción, porque me equivoqué en la sugerencia para la línea del JS y la forma correcta es:

Código Javascript:
Ver original
  1. strHtml5 += '<input type="hidden" id="nombreDelCampo_' + oId +'" name="nombreDelCampo[]" value="' + oId + '" /></td>';

Con eso y el PHP "original" debería ser suficiente:
Código PHP:
Ver original
  1. // Debe ser <= porque el contador lo inicias en cero, de lo contrario omitiría el último elemento
  2. for($i=0; $i<=$numRows; $i++) {
  3.           $sql_ins2 = mysql_query("INSERT INTO contactos (id_posada, tipo_contacto, persona_contacto, telefonos, correo_contacto) VALUES ('$id_posada', '".$_POST['selTipo_contacto'][$i]."', '".$_POST['txtPersona_contacto'][$i]."', '".$_POST['txtTelefonos'][$i]."', '".$_POST['txtCorreo_contacto'][$i]."')") or die ("Error en Insert : ".mysql_error());
  4.     }
disculpa amigo podrias ayudarme yo tengo un codigo diferente y al igual que a kimmy solo me guarda 1 solo dato, mis codigos son los siguientes:
codigo del formulario
Código PHP:
Ver original
  1. <div id="stylized" class="myform" style="margin:40px auto;">
  2.  
  3. <form id="form" name="form" method="POST" action="insertar_registro.php">
  4. <div id="material_pedido"></div>
  5.  
  6. <label>Clave del Empleado:</label><select id="empleado" name="idemp" style="width:50px;"></select><span style="float:left;padding:8px 0px 8px 8px;">
  7. Nombre del Empleado:</span><select  id="no_empl" style="width:90px;"></select><span style="float:left;padding:8px 0px 8px 8px;">
  8. Area del Solicitante:</span><select type="text" id="area" style="width:110px;"></select><span style="float:left;padding:8px 0px 8px 8px;">
  9. Fecha de la Solicitud:</span><?php $fecha= date("Y-m-d"); ?><!--=== sirve para obtener la fecha del equipo automaticamente ===-->
  10. <input type="date" name='fecha_sol[]' required value="<?php echo $fecha; ?>" readonly style="width:119px;"/><span style="float:left;padding:8px 0px 8px 8px;"></span>
  11. <left><h1>Articulo a pedir</h1>
  12. <p>Puede añadir mas de 1 pedido si asi lo decea</p></left>
  13. <div id="div_1">
  14. <span style="float:left;padding:9px 0px 0px 0px;">
  15. <label>Clave producto:</span></label><input type="text" id="clave1" name="clave[]" style="width:50px;"/><span style="float:left;padding:9px 0px 0px 0px;">
  16. Producto:</span><input type="text" id="prod" placeholder="Nombre producto" name="producto[]" style="width:110px;"/><span style="float:left;padding:9px 0px 0px 0px;">
  17. Marca:</span><input type="text" id="marca" placeholder="Marca producto" name="marca[]" style="width: 100px;"/><span style="float:left;padding:9px 0px 0px 0px;">
  18. Cantidad:</span><input type="number" name="cantidad[]" min='1' max='100'style="width:30px;"/><input class="bt_plus" id="1" type="button" value="+" /><div class="error_form"></div>
  19. </div>
  20. <br>
  21. <br>
  22. <button type="submit" name="submit" class="boton">Enviar</button>
  23. </form>
  24. </div>
codigo del agregar campos
Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $(".bt_plus").each(function (el){
  3.         $(this).bind("click",addField);
  4.     });
  5. });
  6.  
  7. function addField(){
  8.     //el id del elemento div qutandole la palabra "div_" de delante. para asi aumentar el numero.
  9.     var clickID = parseInt($(this).parent('div').attr('id').replace('div_',''));
  10.     //Se genera el nuevo id
  11.     var newID = (clickID+1);
  12.     //Se crea un clon del elemento div que contiene los campos de texto
  13.     $newClone = $('#div_'+clickID).clone(true);
  14.     //Se le asigna el nuevo numero id
  15.     $newClone.attr("id",'div_'+newID);
  16.     //se le asigna nuevo id al primer campo input dentro del div y le borro cualquier valor que tenga, asi no copia lo ultimo que hayas escrito.
  17.     //(igual que antes no es necesario tener un id)
  18.     $newClone.children("input").eq(0).attr("id",'clave'+newID).val('');
  19.     //Se borra el valor del segundo input(campo de cantidad)
  20.     $newClone.children("input").eq(1).val('');
  21.     //Se asigna el nuevo id al boton
  22.     $newClone.children("input").eq(4).attr("id",newID)
  23.     //Se inserta el div clonado y modificado despues del div original
  24.     $newClone.insertAfter($('#div_'+clickID));
  25.     //Se cambia el signo "+" por el signo"-" y se quita el evento addfield
  26.     $("#"+clickID).val('-').unbind("click",addField);
  27.     //Se cambia el signo del evento delRow para que borre la fila en caso de hacer click
  28.     $("#"+clickID).bind("click",delRow);
  29. }
  30.  
  31. function delRow(){
  32.     //Esta funcion destruye el elemento actual una vez echo el click
  33.     $(this).parent('div').remove();
  34. }
y por ultimo donde guardo
Código PHP:
Ver original
  1. <?php
  2.    
  3.     include("php/conexion.php");
  4.    
  5.     $cuenta = count($_POST['clave']);  /*esto fue lo que hice, pero me sigue guardando el primer campo y los otros 2 que agrego no*/
  6.     $cuenta = count($_POST['idemp']);
  7.     $cuenta = count($_POST['producto']);
  8.     $cuenta = count($_POST['marca']);
  9.     $cuenta = count($_POST['cantidad']);
  10.     $cuenta = count($_POST['fecha_sol']);
  11.    
  12.     for ($i=0; $i <$cuenta; $i++) {
  13.         $idemp = $_POST['idemp'][$i];
  14.         $clave = $_POST['clave'][$i];
  15.         $producto = $_POST['producto'][$i];
  16.         $marca = $_POST['marca'][$i];
  17.         $cantidad = $_POST['cantidad'][$i];
  18.         $fecha_sol = $_POST['fecha_sol'][$i];
  19.            
  20.      //print_r($_POST);
  21.  
  22.     $query1 ="INSERT INTO detalle(id_pedidos, id_producto, producto, marca, cantidad, fecha_solicitud)
  23.    VALUES('$idemp', '$clave', '$producto', '$marca', '$cantidad', '$fecha_sol')";
  24.     $resultado=mysqli_query($conexion, $query1);
  25.      
  26.       if($query1){
  27.               header("Location: pedidos.php");
  28.                 }else{
  29.                 echo '<script> alert("El Pedido No Se Envio");</script>';
  30.                 echo '<script> window.location=" pedidos.php"; </script>';
  31.             }
  32.     }
  33. ?>
espero puedas ayudare ya que seria de gran ayuda
  #19 (permalink)  
Antiguo 06/04/2016, 15:38
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Guardar datos de input text dinamicos

Hola Eric_Alberto,

Solo he revisado tu código por encima y lo que veo es que estás sobreescribiendo la variable $cuenta...

Por lo demás, ahora no te puedo ayudar, pero sí decirte que no se debe reabrir un post de tanto tiempo, si tienes una duda sobre algo antiguo (+ de 6 meses), abres un nuevo post y haces referencia al original.
  #20 (permalink)  
Antiguo 07/04/2016, 08:16
 
Fecha de Ingreso: febrero-2016
Mensajes: 31
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Guardar datos de input text dinamicos

Cita:
Iniciado por rbczgz Ver Mensaje
Hola Eric_Alberto,

Solo he revisado tu código por encima y lo que veo es que estás sobreescribiendo la variable $cuenta...

Por lo demás, ahora no te puedo ayudar, pero sí decirte que no se debe reabrir un post de tanto tiempo, si tienes una duda sobre algo antiguo (+ de 6 meses), abres un nuevo post y haces referencia al original.
Hola rbczgz con lo que me comentaste que estoy sobrescribiendo la variable $cuenta los borre todos menos el primero y ya me funciona a la perfección, gracias te lo agradezco de verdad

Etiquetas: dinamicos, html, input, mysql, sql, txt
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 14:47.