Foros del Web » Programando para Internet » PHP »

Array de Inputs Text

Estas en el tema de Array de Inputs Text en el foro de PHP en Foros del Web. Buenos dias compañeros, revisando entre los foros, busque informacion sobre esto, pero no consegui lo que necesito o quizas no lo entedi, les explico: tengo ...
  #1 (permalink)  
Antiguo 21/07/2011, 06:59
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Array de Inputs Text

Buenos dias compañeros, revisando entre los foros, busque informacion sobre esto, pero no consegui lo que necesito o quizas no lo entedi, les explico:

tengo una tabla que genero dinamicamente desde mysql y a esta tabla le agregue un input='text', este input se vera en la tabla tantas veces sea la consulta que genera la tabla, es posible insertar cada input como un registro?? en SQL seria algo asi:

Código SQL:
Ver original
  1. INSERT INTO tabla (campo1, campo2, campo3) VALUES
  2. (v1_1, v1_2, v1_3),
  3. (v2_1, v2_2, v2_3),
  4. (v3_1, v3_2, v3_3);

Pero como hago para hacer un insert con PHP ya que pueden generarse 3 input como tambien podrian ser 100, espero haberme explicado, aqui les dejo mi codigo

Archivo Variacion.php

Código PHP:
<?php
session_start
();
if(!isset(
$_SESSION['cedula'])){
header("Location: ../index.php"); 
} else { 
$cedula=$_SESSION['cedula'];
$codigo=$_SESSION['codigo'];

?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=latin2" />
<title>Ingreso de Variaciones</title>
<link rel=stylesheet href="./Style/default.css" type="text/css">
<link rel=stylesheet href="./Style/menuH.css" type="text/css">

<script>
function abrir(URL){
window.open(URL,"",'width=600,height=350,left=380,top=200,toolbar=no,scrollbars=yes,statusbar=no,menubar=no,resizable=no,Location=no,titlebar=no');
return false;
}
</script>
  

</head>
<?php
    
include('menu.php');
?>

<?
     
include("conexion.php");
     
$conexion = new ControlBD();
     
$conexion->conectar();
     
$conexion->seleccionarBD();


$query "SELECT con_tipnom,con_codigo,con_descri,con_mensaj,con_repres FROM nmconceptos 
    WHERE con_http = 1 AND con_activo = 1 AND con_mensaj <> '' AND con_tipnom = 'SQM'"
;

$resul=$conexion->ejecutarQuery($query);    

?>


<body onload="document.formulario1.busqueda.focus()">

<div align="center">
<fieldset>
 <!--<table width="400" border="0" align="center">
        <tr>-->
  <th scope="row" align="center" ><legend>INGRESO DE VARIACIONES DE PAGO
  </legend></th>
 <!-- <table width="575" border="0" align="center" class="tabla"> -->
<tr>
          
 <form name="formulario1" method="post" action="variaciones_BD.php" autocomplete="off" >
  <table cellpadding="0" cellspacing="0" border = '1' align="center"  class="nomina">
  <tr>
  <td><strong>Codigo</strong></td>
  <td><input name="cod" type="text" id="cod" readonly="readonly" size="10" /></td>
  <td><strong>Trabajador / Empleado</strong></td>
  <td><input name="emp" type="text" id="emp" readonly="readonly" /></td>
  <td><a href onclick="abrir('trabajadores.php');">Seleccionar Empleado  </a></td>
  <!--<td><a href onclick="abrir('grupos.php');">Nuevo Grupo </a></td>-->
</tr>
  </table>
  <p>
  <div align="center">
        <table cellpadding="0" cellspacing="0" border = '1' align="center"  class="nomina">
          <tr style="background:#6d8693">
            <td>Codigo</td>
            <td align="center">Descripcion</td>
            <td>Variacion</td>
            <td colspan="2">Representacion</td> 
            <!--<input type="hidden" name="ced_tra" value="<?=$cedula?>"  /> -->
          </tr>
          
          <? while ($row mysql_fetch_array($resul)){ ?>
            <tr>
              <td><input type="text" name="concepto[]" readonly="readonly" value="<?=$row['con_codigo'];?>" size="4"  /></td>
              <td><?=$row['con_descri']; ?></td>
              <td><?=$row['con_mensaj']; ?></td>
              <td><?=$row['con_repres']; ?></td>
              <td><input type="text" name="var[]" id="var" /></td>
             <? }
                
mysql_free_result($resul);
             
?>
            </tr>                
            
        </table>
      </div>

        <input name="enviar" type="submit" value="Guardar"  />
  
           </form>

</tr>
</fieldset>
</div>
</body>
</html>
<? ?>
archivo Variacion_BD.php

Código PHP:
<?php
include_once("conexion.php");

    
$conexion = new ControlBD();
    
$conexion->conectar();
    
$conexion->seleccionarBD();
    
    
$ced_tra=$_POST['cod'];
    
$concept=$_POST['concepto'];
    
$variac=$_POST['var'];

    
    
    
/*print_r($_POST['var']);
    print_r($_POST['concepto']);*/
    
 
$query "INSERT INTO nmvariac (var_cantid,var_codcon,var_codtra) values ('$variac','$concept','$ced_tra')";    
    
$conexion->ejecutarQuery($query);
?>
Espero puedan ayudarme, Saludos
  #2 (permalink)  
Antiguo 21/07/2011, 07:12
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Array de Inputs Text

Si lo tienes muy bien planteado, te falta un empujón final, ahí va:

En los inputs has puesto muy inteligentemente name="concepto[]" y name="var[]". Con esto, PHP interpreta que hay varios inputs dentro del formulario que tienen el mismo name y lo que hace es crear un array con ese name que contenga todos los posibles valores de los inputs que salgan, sean 1 o 1000. Para ver esto, en Variacion_BD.php haz var_dump($_POST['concepto']) o var_dump($_POST['var']) y verás que realmente son arrays.

Luego, en $concept y en $variac tienes dos arrays, no tienes más que recorrerlos:
Código PHP:
$query "INSERT INTO nmvariac (var_cantid,var_codcon,var_codtra) values";
for (
$i 0$i sizeof($concept); $i++) {
    
$query .= " ('$variac[$i]','$concept[$i]','$ced_tra')";
    if (
$i != sizeof($concept) - 1) {
        
$query .= ",";
    }

El if es simplemente para que añada , en todas las filas, menos en la última, que ya sobra la , De todas formas, imprime la query (echo $query;) para verla, que lo hice rápido y no estoy muy seguro de que esté bien formateada.

Espero que te sirva, un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #3 (permalink)  
Antiguo 21/07/2011, 07:32
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Array de Inputs Text

Hola vgonga1986 muchas gracias, eres un Maestro, me funciono de ORO, es lo que estaba buscando, gracias por el empujon jejeje

Mira otra consulta, como haria para que cuando un input este vacio no me lo inserte? ya que no es obligatoria llenar todos los input.

Saludos y nuevamente mil gracias
  #4 (permalink)  
Antiguo 21/07/2011, 09:09
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Array de Inputs Text

Pones un if más o menos así:
Código PHP:
$query "INSERT INTO nmvariac (var_cantid,var_codcon,var_codtra) values";
for (
$i 0$i sizeof($concept); $i++) {
    if ((isset(
$variac[$i])) && (!empty($variac[$i])))
        
$query .= " ('$variac[$i]','$concept[$i]','$ced_tra')";
        if (
$i != sizeof($concept) - 1) {
            
$query .= ",";
        }
    }

Es decir, si el input está en el array y, además, no es vacío, añade al query, si no, nada.

Fácil, sencillo y para toda la familia. Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #5 (permalink)  
Antiguo 21/07/2011, 11:15
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Array de Inputs Text

Hola de nuevo vgonga1986, el if lo que hace es que si el campo no esta vacio no lo agregara, con ese if si dejo varios input vacios no me ingresa ningun valor en la base de datos, pero lo que quisiere es que si algun campo esta vacio solo me agregue los que estan llenos hice esto:

Código PHP:
if (empty($variac[$i]))
{

.....


Y no me funciono, tambien hice esto:

Código PHP:

if ($variac[$i]!="")
{

.....


Y tampoco funciono, qjue me estara faltando??

Saludos
  #6 (permalink)  
Antiguo 22/07/2011, 01:19
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Array de Inputs Text

En teoría con lo que te puse ahí arriba debería funcionar, prueba con if (!empty($variac[$i])) y si no te funciona haz lo que te dije antes, imprime la query (echo $query) y así ves qué consulta se ha hecho, para ver si tiene algún error, es posible que haya problemas con la "," del final, pero es que no puedo mirarlo aquí, tienes que debuguearlo tú.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #7 (permalink)  
Antiguo 22/07/2011, 05:47
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Array de Inputs Text

Hola de nuevo, probe imprimiendo $query despues de ingresar solo 3 valores en 3 inputs y me devolvio esto:

Código SQL:
Ver original
  1. INSERT INTO nmvariac (var_cantid,var_codcon,var_codtra,var_ajuste,var_nummem,var_tipnom) VALUES ('5','A006','10762082','0','0','M') ('2','A007','10762082','0','0','M') ('1200','A008','10762082','0','0','M'),

Le quite la como del final y me impreme lo mismo sin la coma (,) no entiendo xq no me esta insertando los datos a la base datos, probe cambiando la condicion de varias maneras y tambien probe la opcion que me diste, pero no me ingresa nada en la Base de Datos

Los datos si los esta enviando ya que al hacer "echo $query" me trae la cadena que coloque mas arriba, si tienen alguna idea de lo que podria estar pasando se lo agradeceria

Saludos
  #8 (permalink)  
Antiguo 22/07/2011, 06:03
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Array de Inputs Text

Por lo que me pones ahí, deduzco que has estado toqueteando el código que te pasé. Entonces, si yo te paso un código, me dices que no funciona, yo trabajo sobre el último código que te pasé, si tú lo has modificado y yo te digo que modifiques, ya no lo estás haciendo sobre el último que te pasé. Si tocas algo, ponme otra vez el trozo de código, porque yo ya no sé cuál es tu última versión y así es imposible.

Te voy a explicar como tiene que ser la sentencia y la montas tú, porque ya me parece que te estás limitando a copiar lo que yo te paso sin pensarlo. Para insertar varios registros en una misma consulta tienes que montar así:
INSERT INTO Tabla (campo1, campo2, ..., campoN) VALUES (valor1, valor2, ..., valorN), (valor1, valor2, ..., valorN), ..., (valor1, valor2, ..., valorN)

Las comas las tienes mal, la tienes donde no tiene que ir y te falta donde tiene que ir, es decir, justo al revés.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #9 (permalink)  
Antiguo 22/07/2011, 06:08
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Array de Inputs Text

No compañero, estoy usando el mismo codigo que tu me pasaste:

Código PHP:
   $query "INSERT INTO nmvariac (var_cantid,var_codcon,var_codtra,var_ajuste,var_nummem,var_tipnom) VALUES";
     for (
$i 0$i sizeof($concept); $i++) {
      if ((isset(
$variac[$i])) && (!empty($variac[$i]))) {
             
$query .= " ('$variac[$i]','$concept[$i]','$ced_tra','$var_ajuste','$var_nunmen','$tipo_nom')";
          if (
$i != sizeof($concept) - 1) {
            
//$query .= ",";
          
}
       }
     }  
     echo 
$query
Solo le agregue el If que me recomendaste, solo dije que probe haciendo varios cambios pero igual no me los inserta en la base de datos.

Ese es el codigo, donde estoy poniendo mal las comas (,)??

Saludos
  #10 (permalink)  
Antiguo 22/07/2011, 06:13
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Array de Inputs Text

Solo le comente esta parte:
Código PHP:
Ver original
  1. //$query .= ",";
de esa manera si imprime con las comas de dices, pero de igual forma no me inserta debido a que me coloca una coma al final, pienso que debe ser por eso, ya que hay 10 inputs pero solo coloco la informacion en 3 y la sentencia recorre el arreglo y espera mas datos

Asumo que ese sea el problema
  #11 (permalink)  
Antiguo 22/07/2011, 06:52
Avatar de sonics2008  
Fecha de Ingreso: diciembre-2009
Ubicación: Santiago, Chile
Mensajes: 60
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Array de Inputs Text

Mira yo tuve el msimo problema hace tiempo, y lo hice de esta forma.

una function que me guarde los datos normales
y otra con los detalles osea las tablas que tu nombras.

bueno cuento corto, comparo un campo de un array de esta forma
Código PHP:
if($variable_array['numero_input']==""){return;} 
luego de esa variable, colocas el insert, eso te deberia funcionar ya que yo lo tengo asi y hasta el momento funciona sin problemas.
  #12 (permalink)  
Antiguo 22/07/2011, 06:54
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Array de Inputs Text

Vamos a hacerlo al revés, añadimos coma a todas las líneas y al final, quitamos la última.

Este es el último código que te mando, con lo que te he dicho ya podrías hacerlo tú, pero bueno:

Código PHP:
   $query "INSERT INTO nmvariac (var_cantid,var_codcon,var_codtra,var_ajuste,var_nummem,var_tipnom) VALUES";
     for (
$i 0$i sizeof($concept); $i++) {
      if ((isset(
$variac[$i])) && (!empty($variac[$i]))) {
             
// Añadimos una línea por cada input relleno:
             
$query .= " ('$variac[$i]','$concept[$i]','$ced_tra','$var_ajuste','$var_nunmen','$tipo_nom'),";
       }
     }
     
// Borramos el último caracter de la cadena, la "," que sobra:
     
$query substr($query0strlen($query) - 1);
     echo 
$query
Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #13 (permalink)  
Antiguo 22/07/2011, 07:58
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Array de Inputs Text

Hola vgonga1986, de verdad disculpa toda la molestia q pude haber causado, probe este ultimo codigo y funcionó, lo que entendi fue:

Le quitamos el if ya que la condicion aplicaba siempre a recorrer todo el arreglo si no siempre colocaria la coma al final

Con este codigo:

Código PHP:
$query substr($query0strlen($query) - 1); 
Lo que se hizo fue recorrer la cadena con STRLEN y se aplica el SUBSTR recorriendo tambien la cadena y quitando el ultimo caracter como el -1, si en realidad es eso lo que hace lo entendi muy bien

Y disculpa todas la preguntas, solo que no tenia ideas y me desesperaba rapido ya que el WORK me presionaron

Saludos y gracias por la ayuda
  #14 (permalink)  
Antiguo 22/07/2011, 08:40
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Array de Inputs Text

substr toma un trozo de una cadena desde la posición 0 hasta la penúltima posición, que la saco con strlen (tamaño de la cadena) menos 1. Así, la idea es poner la coma siempre, pero quitar la última, para que el query se ejecute bien y no dé error de SQL.

Me alegro que te haya funcionado con esto, suerte y un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?

Etiquetas: input, sql
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 01:06.