Foros del Web » Programando para Internet » PHP »

formulario dinamico?

Estas en el tema de formulario dinamico? en el foro de PHP en Foros del Web. Bueno, es que hago una cosulta de una tabla me mostrara todos los campos y datos, pero esta tabla, esta sujeta constantemente a cambios en ...
  #1 (permalink)  
Antiguo 10/10/2006, 11:55
Avatar de jhonny777  
Fecha de Ingreso: septiembre-2006
Mensajes: 38
Antigüedad: 17 años, 7 meses
Puntos: 0
formulario dinamico?

Bueno, es que hago una cosulta de una tabla me mostrara todos los campos y datos, pero esta tabla, esta sujeta constantemente a cambios en los campos por lo que hice una consulta de este tipo:

Código PHP:
<HTML>
<HEAD>
<TITLE>Reporte.php</TITLE>
</HEAD>
<BODY>
<h1><div align="center">Reporte generado</div></h1>
<br>
<br>
<?
include('aut_config.inc.php');  
mysql_connect("$sql_host""$sql_usuario""$sql_pass") or die("No se pudo conectar a la Base de datos") or die(mysql_error());
mysql_select_db("$sql_db") or die(mysql_error());

$result mysql_query("select * from $sql_tabla"); 
echo 
"<table bgcolor=\"#EB3D00\" align=center style=\"border:2px outset black\">";
for (
$i 0$i mysql_num_fields($result); $i++)
    { 
    print 
"<th>".mysql_field_name($result$i)."</th>\n"
    } 
while (
$registro mysql_fetch_row($result))
    {
    echo 
"<tr>";
    foreach(
$registro  as $clave)
        {
        echo 
"<td bgcolor=\"#FCB7B7\"style=\"border:2px groove black\" align=\"center\">",$clave,"</td>";
        }
    }
echo 
"</tr></table>";
mysql_close(); 
?> 

</BODY>
</HTML>
<body>
ahora que estoy haciendo la pagina de la consulta mas dinamica agregandole funciones por variables URL, me surge una duda que no he podido resolver, como puedo crear un formulario (dinamico) para insertar registros, teniendo en cuenta que la tabla puede cambiar en el numero de sus campos... por lo que crear un formulario determinando los campos, no me seria util...

... mmm... me pueden ayudar con esto... gracias.. o darme una luz...

Última edición por jhonny777; 10/10/2006 a las 12:00
  #2 (permalink)  
Antiguo 10/10/2006, 22:08
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Pues no entendí del todo tu consulta pero te hice un código con la esperanza de que te sea útil:

Código PHP:
<?php
$basededatos 
'libreria'// sólo sustituye esta variable
$tabla 'articulos_solicitados'// y esta también

mysql_pconnect("servername","username","password"); // y esta es la última
mysql_select_db$basededatos );

if ( isset ( 
$_POST['submit'] ) )
{
   
$cam $_POST['campos'];
   
$cam substr_replace $cam""strlen $cam ) - 1); // quitamos la última coma
   
$val explode ","$cam );

   for ( 
$i 0$i count $val ); $i++ )
   {
      ${
$val}[$i] = $_POST['$val[$i]']; // creamos las variables de estilo $campo = $_POST['campo']
      
$postcampos[] = $$val[$i];
   }

   
$values "";

   for ( 
$j 0$j count $postcampos ); $j++ )
   {
      
$values .= "'".$postcampos[$j]."',";
   }

   
$values substr_replace $values""strlen $values ) - 1); // quitamos la última coma para evitar problemas en la cosulta

   
$consulta2 "INSERT INTO $tabla ( $cam ) values ( $values )";

   
$res mysql_query $consulta2 );
   echo 
"Los datos fueron ingresados";
}
else
{
   
$consulta "DESCRIBE $tabla";
   
$res mysql_query $consulta );
   
$numres mysql_num_rows($res);
   if ( 
$numres == )
   {
      echo 
"No se encontraron resultados";
   }
   else
   {
      while ( 
$filas mysql_fetch_array $res ) ) 
      { 
         
$campos[] = $filas['Field']; // agregamos el nombre de los campos en un array
      
}
      
$numerodecampos count($campos);
   
?>
   <form name="formu" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
   <?php
      
echo "<table><tr>";
      
$juntos '';
      for ( 
$e 0$e count $campos ); $e++ )
      {
         
$juntos .= $campos[$e].",";
         echo 
"<td>".$campos[$e].":</td><td><input type=\"text\" name=\"".$campos[$e]."\"></td></tr><tr>";
      }
      echo 
"<input type=\"hidden\" name=\"campos\" value=\"".$juntos."\">"// juntos son todos los campos
      
echo "</tr><tr><td colspan=\"2\"><input type=\"submit\" name=\"submit\" value=\"Enviar\"></td></tr>";
      echo 
"</table>";
   
?>
   </form>
   <?php
   
}
}
?>
Este código lo que hace es realizar una consulta a la bd y extraer el número y nombres de los campos de la tabla que tú le indiques y luego muestra un formulario para que puedas insertar un nuevo dato.

Nota: Deberías de checar también el asunto de tipo de campo y cambiar la variable $consulta2 para que le mandes de alguna manera la clausula que deseas realizar, sea esto un INSERT, UPDATE, DELETE o algo así, no te lo puse porque no va con tu pregunta así que a estudiar mi chavo y a mejorar este código.

Espero sea lo que necesitabas o por lo menos te de una idea para realizar lo que necesitas. Suerte

Última edición por Erikfrancisco; 11/10/2006 a las 11:09
  #3 (permalink)  
Antiguo 11/10/2006, 10:40
Avatar de ikaroraul  
Fecha de Ingreso: octubre-2006
Ubicación: La Paz
Mensajes: 391
Antigüedad: 17 años, 6 meses
Puntos: 16
yo PamPoco entiendo

Man que tal, yo tamPoco entiendo tu Problema, creo que quieres agregar filas a tu tablas o columnas???
bueno Para las filas solo debes usar un while en el cual te dibuje la tabla hasta que la "tabla de la base de datos" este vacia seria mas o menos asi:

Código HTML:
<TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1>
            <TR> 
              <TD>&nbsp;<B>CANTIDAD</B></TD>
              <TD>&nbsp;<B>DENSIDAD</B>&nbsp;</TD>
              <TD>&nbsp;<B>DIMENSIONES</B>&nbsp;</TD>
              <TD>&nbsp;<B>MODIFICAR</B>&nbsp;</TD>
			  <TD>&nbsp;<B>ELIMINAR</B>&nbsp;</TD>
			  
            </TR>
            <?php       
			   while($row = mysql_fetch_array($mostrart))
			{    
			  printf("    
				<tr>	
					<td>%s</td> 
					<td>%s</td>
					<td>%s</td>
				<td><a href=\"borra.php?id=%d\">Editar</a></td>
				<td><a href=\"borra.php?id=%d\">Borrar</a></td>
				</tr> ", 
			  $row["Cantidad"], 
			  $row["Densidad"],
			  $row["Dimensiones"],
			  $row["id_de_Pedido"],
  			  $row["id_de_Pedido"]); 
			  
			   } 
  		   mysql_free_result($mostrart); 
		   mysql_close($link);  
			?>
          </table> 
donde $mostrar es un query:

EsPero que te sirva
EXITOS
[email protected]
  #4 (permalink)  
Antiguo 12/10/2006, 13:00
Avatar de jhonny777  
Fecha de Ingreso: septiembre-2006
Mensajes: 38
Antigüedad: 17 años, 7 meses
Puntos: 0
mm.. bueno me explico mejor, el codigo que hice me permite hacre una consulta de toda la tabla, incluyendo el nombre de los campos y los datos que estan en ella... claro y los visualiza en una tabla... :P

Hice la consulta de esta manera por que el usuario puede agregarle campos a la tabla, (aclaro que el codigo que puse no hace eso, el solo hace una consulta de toda las tabla, como un reporte... el ingreso de tablas lo hice en otra pagina) entonces no puedo hacer la consulta determinandole los campos que me muestre... lo que necesito ahora es hacer un formulario para asignarle los registro, pero como han asignado nuevos campos necesito que este me tenga encuenta estos y que asigne imput type text de los campos que esten...

... mmm... Ikaroraul... creo aclarado esto, el codigo que me diste no me sirve mucho pero gracias... Erick probaré el codigo de una vez gracias.. si algo posteo ;)

... vot aprobar los codigos que me dieron...
  #5 (permalink)  
Antiguo 12/10/2006, 14:25
Avatar de jhonny777  
Fecha de Ingreso: septiembre-2006
Mensajes: 38
Antigüedad: 17 años, 7 meses
Puntos: 0
Efectivamente... dependiendo de los campos que esten en este momento en la tabla... pero me sale un error al intentar agregar los campos...

Código PHP:
     
Notice
Undefined index$val[$iin C:Aldorintrodatos.php on line 77

Notice
: Array to string conversion in C:Aldorintrodatos.php on line 77

Notice
Undefined variableIAC in C:Aldorintrodatos.php on line 78

Notice
Undefined index$val[$iin C:Aldorintrodatos.php on line 77

Notice
: Array to string conversion in C:Aldorintrodatos.php on line 77

Notice
Undefined variableNro_factura in C:Aldorintrodatos.php on line 78

Notice
Undefined index$val[$iin C:Aldorintrodatos.php on line 77

Notice
: Array to string conversion in C:Aldorintrodatos.php on line 77

Notice
Undefined variableFecha in C:Aldorintrodatos.php on line 78
Los datos fueron ingresados 
en la ultima linea aparecen que los datos fueron insertados pero voy a mirara la tabla y hay un nuevo registro con los espacios en blanco...

las lineas a que se refiere son las siguientes :
Código PHP:
 77     ${$val}[$i] = $_POST['$val[$i]']; // creamos las variables de estilo  $campo = $_POST['campo']
 
78   $postcampos[] = $$val[$i]; 
Bueno... la verdad no se como crear las variables de estilo... :S

Código PHP:
<?php
          
          
include ('aut_verifica.inc.php');
 include(
'aut_config.inc.php');  
        
mysql_connect("$sql_host""$sql_usuario""$sql_pass") or die("No se pudo conectar a la Base de datos") or die(mysql_error());
        
mysql_select_db("$sql_db") or die(mysql_error());

if ( isset ( 
$_POST['submit'] ) )
{
   
$cam $_POST['campos'];
   
$cam substr_replace $cam""strlen $cam ) - ); // quitamos la última coma (aqui le quite ",1")
   
$val explode ","$cam );

   for ( 
$i 0$i count $val ); $i++ )
   {
      ${
$val}[$i] = $_POST['$val[$i]']; // creamos las variables de estilo $campo = $_POST['campo']
      
$postcampos[] = $$val[$i];
   }

   
$values "";

   for ( 
$j 0$j count $postcampos ); $j++ )
   {
      
$values .= "'".$postcampos[$j]."',";
   }

   
$values substr_replace $values""strlen $values ) - ); // quitamos la última coma para evitar problemas en la cosulta le quite (",1") aunque dejandoselo tambien me aprece el problema...

   
$consulta2 "INSERT INTO $sql_table ( $cam ) values ( $values )";

   
$res mysql_query $consulta2 );
   echo 
"Los datos fueron ingresados";
}
else
{
   
$consulta "DESCRIBE $sql_table";
   
$res mysql_query $consulta );
   
$numres mysql_num_rows($res);
   if ( 
$numres == )
   {
      echo 
"No se encontraron resultados";
   }
   else
   {
      while ( 
$filas mysql_fetch_array $res ) ) 
      { 
         
$campos[] = $filas['Field']; // agregamos el nombre de los campos en un array
      
}
      
$numerodecampos count($campos);
   
?>
   <form name="formu" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
   <?php
      
echo "<table><tr>";
      
$juntos '';
      for ( 
$e 0$e count $campos ); $e++ )
      {
         
$juntos .= $campos[$e].",";
         echo 
"<td>".$campos[$e].":</td><td><input type=\"text\" name=\"".$campos[$e]."\"></td></tr><tr>";
      }
      echo 
"<input type=\"hidden\" name=\"campos\" value=\"".$juntos."\">"// juntos son todos los campos
      
echo "</tr><tr><td colspan=\"2\"><input type=\"submit\" name=\"submit\" value=\"Enviar\"></td></tr>";
      echo 
"</table>";
   
?>
   </form>
   <?php
   
}
}
?>
  #6 (permalink)  
Antiguo 12/10/2006, 15:02
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Y si cambias tu if de esta manera:

Código PHP:
if ( isset ( $_POST['submit'] ) )
{
   
$cam $_POST['campos'];
   
$cam substr_replace $cam""strlen $cam ) - ); // quitamos la última coma (aqui le quite ",1")
   
$val explode ","$cam );

   for ( 
$i 0$i count $val ); $i++ )
   {
      echo 
$val[$i]." - ";
      echo 
$_POST['$val[$i]']." - ";
   }
/*
   for ( $i = 0; $i < count ( $val ); $i++ )
   {
      ${$val}[$i] = $_POST['$val[$i]']; // creamos las variables de estilo $campo = $_POST['campo']
      $postcampos[] = $$val[$i];
   }

   $values = "";

   for ( $j = 0; $j < count ( $postcampos ); $j++ )
   {
      $values .= "'".$postcampos[$j]."',";
   }

   $values = substr_replace ( $values, "", strlen ( $values ) - 1 ); // quitamos la última coma para evitar problemas en la cosulta le quite (",1") aunque dejandoselo tambien me aprece el problema...

   $consulta2 = "INSERT INTO $sql_table ( $cam ) values ( $values )";

   $res = mysql_query ( $consulta2 );
   echo "Los datos fueron ingresados";
*/

esto lo hago con el fin de saber si en la variable $val te esta guardando los nombres de los campos que vas a ingresar. En la primera línea te deberá aparecer el nombre de los campos y en la segunda los valores que deseas insertar a la base de datos. Hazlo y dime que te salio en pantalla.

En cuanto a lo que mencionas de:

Cita:
Iniciado por jhonny777 Ver Mensaje
Bueno... la verdad no se como crear las variables de estilo... :S
Lo que intento hacer con esas líneas es crear variables como esta:

$tucampo = $_POST['tucampo'];

¿Ahora entiendes para que las puse?

Última edición por Erikfrancisco; 12/10/2006 a las 15:08
  #7 (permalink)  
Antiguo 12/10/2006, 15:13
Avatar de jhonny777  
Fecha de Ingreso: septiembre-2006
Mensajes: 38
Antigüedad: 17 años, 7 meses
Puntos: 0
mmm... Me salen un formulario con los nombres de los campos y su respectivo input text... le intente agregar los datos pero me sale el mismo error... :P
  #8 (permalink)  
Antiguo 12/10/2006, 15:18
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Bueno, cambia tu if como te dije y borra los comentarios (lo que esta en amarillo), eso es lo que te ha de generar errores ya que se supone que lo que esta entre comentario no lo ejecuta pero bueno, tal vez causa errores porque estamos anidando comentarios y eso no es correcto.
  #9 (permalink)  
Antiguo 12/10/2006, 15:38
Avatar de jhonny777  
Fecha de Ingreso: septiembre-2006
Mensajes: 38
Antigüedad: 17 años, 7 meses
Puntos: 0
Bueno me sale el formulario... pero cuando le doy aceptar, con los cmpos llenos, no me sale el mensaje: "sus datos han sido ingresados" ni ingresa datos vacios.. como lo hacia antes... y ahora ?
  #10 (permalink)  
Antiguo 12/10/2006, 15:41
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Bueno, ¿sólo cambiaste el if de esta manera?:

Código PHP:
if ( isset ( $_POST['submit'] ) ) 

   
$cam $_POST['campos']; 
   
$cam substr_replace $cam""strlen $cam ) - ); // quitamos la última coma (aqui le quite ",1") 
   
$val explode ","$cam ); 

   for ( 
$i 0$i count $val ); $i++ ) 
   { 
      echo 
$val[$i]." - "
      echo 
$_POST['$val[$i]']." - "
   } 

Porque te debería de mostrarte lo que escribiste en el formulario, y los nombres de los campos.
  #11 (permalink)  
Antiguo 12/10/2006, 15:58
Avatar de jhonny777  
Fecha de Ingreso: septiembre-2006
Mensajes: 38
Antigüedad: 17 años, 7 meses
Puntos: 0
ya... mira el codigo que tengo es este... mmm...

Código PHP:
<?php
          
          
include ('aut_verifica.inc.php');
 include(
'aut_config.inc.php');  
        
mysql_connect("$sql_host""$sql_usuario""$sql_pass") or die("No se pudo conectar a la Base de datos") or die(mysql_error());
        
mysql_select_db("$sql_db") or die(mysql_error());

if ( isset ( 
$_POST['submit'] ) )
{
   
$cam $_POST['campos'];
   
$cam substr_replace $cam""strlen $cam ) - 1); // quitamos la última coma
   
$val explode ","$cam );

   for ( 
$i 0$i count $val ); $i++ )
   {
      echo 
$val[$i]." - "
      echo 
$_POST['$val[$i]']." - "
   }

   
$values "";

 }
else
{
   
$consulta "DESCRIBE $sql_table";
   
$res mysql_query $consulta );
   
$numres mysql_num_rows($res);
   if ( 
$numres == )
   {
      echo 
"No se encontraron resultados";
   }
   else
   {
      while ( 
$filas mysql_fetch_array $res ) ) 
      { 
         
$campos[] = $filas['Field']; // agregamos el nombre de los campos en un array
      
}
      
$numerodecampos count($campos);
   
?>
            <form name="formu" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
              <?php
      
echo "<table><tr>";
      
$juntos '';
      for ( 
$e 0$e count $campos ); $e++ )
      {
         
$juntos .= $campos[$e].",";
         echo 
"<td>".$campos[$e].":</td><td><input type=\"text\" name=\"".$campos[$e]."\"></td></tr><tr>";
      }
      echo 
"<input type=\"hidden\" name=\"campos\" value=\"".$juntos."\">"// juntos son todos los campos
      
echo "</tr><tr><td colspan=\"2\"><input type=\"submit\" name=\"submit\" value=\"Enviar\"></td></tr>";
      echo 
"</table>";
   
?>
            </form>
            <?php
   
}
}
?>
mmm... me sale el formulario (el nombre y el campo)... cuando le inserto datos en el campo y le doy aceptar.. me sale un nuevo error...

Tengo que decir que IAC, Nro_factura, Fechas; son los nombres de los campos...

IAC -
Notice: Undefined index: $val[$i] in C:\Aldor\introdatos.php on line 78
- Nro_factura -
Notice: Undefined index: $val[$i] in C:\Aldor\introdatos.php on line 78
- Fecha -
Notice: Undefined index: $val[$i] in C:\Aldor\introdatos.php on line 78
-

Entonces creo que la variable $val si los almacena....

Última edición por jhonny777; 14/10/2006 a las 16:29
  #12 (permalink)  
Antiguo 16/10/2006, 15:19
Avatar de jhonny777  
Fecha de Ingreso: septiembre-2006
Mensajes: 38
Antigüedad: 17 años, 7 meses
Puntos: 0
bueno... ya pudimos resolver el problema...
el codigo es el siguiente...

Código PHP:
<?php

$basededatos 
'aldor'// Variable de la base de datos
$tabla 'movimiento'// Variable de la tabla

mysql_connect("localhost","",""); //Conexion
mysql_select_db($basededatos);

if ( isset ( 
$_POST['submit'] ) )
{
   
$cam $_POST['campos']; // recibimos los campos de esta forma campo1,campo2, campoN,
   
$cam substr_replace $cam""strlen $cam ) - 1); // quitamos la última coma
   
$val explode ","$cam ); // separamos los campos de esta forma campo1

   
for ( $i 0$i count $val ); $i++ )
   {
      
$postcampos[] = $val[$i];
   }

   
$values ""// variable en la que se almacenara el contenido de la variable ej. $campo1 = "algo", guardaremos algo

   
for ( $j 0$j count ($postcampos); $j++ )
   {
      
$values .= "'".$_POST[$postcampos[$j]]."',"// agregamos los valores separador por una coma
   
}

   
// quitamos la última coma para evitar problemas en la cosulta ya que $values contiene algo así: algo,otro,mas,
   
$values substr_replace $values""strlen $values ) - 1);

   
// esto generara una consulta + o - así: INSERT INTO tabla ( campo1,campo2,campoN ) VALUES ( algo,otro,mas )
   
$consulta2 "INSERT INTO $tabla ( $cam ) VALUES ( $values )";

   
$res mysql_query$consulta2 );
   echo 
"Los datos fueron ingresados";
}
else
{
   
$consulta "DESCRIBE $tabla";
   
$res mysql_query$consulta );
   
$numres mysql_num_rows$res );
 
   if ( 
$numres == )
   {
      echo 
"No se encontraron resultados";
   }
   else
   {
      while ( 
$filas mysql_fetch_array $res ) ) 
      { 
         
$campos[] = $filas['Field']; // agregamos el nombre de los campos en un array
      
}

      
$numerodecampos count$campos );
   
?>
   <form name="formu" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
   <?php
      
echo "<table><tr>";
      
$juntos ''// aquí guardamos el nombre de todos los campos

      
for ( $e 0$e count ($campos); $e++ )
      {
         
$juntos .= $campos[$e].","// separamos los campos por una coma
         // creamos un input type=text por cada campo de la tabla
         
echo "<td>".$campos[$e].":</td><td><input type=\"text\" name=\"".$campos[$e]."\"></td></tr><tr>";
      }
      echo 
"<input type=\"hidden\" name=\"campos\" value=\"".$juntos."\">"// guardamos la variable $juntos en un campo escondido
      
echo "</tr><tr><td colspan=\"2\"><input type=\"submit\" name=\"submit\" value=\"Enviar\"></td></tr>";
      echo 
"</table>";
   
?>
   </form>
   <?php
   
}
}
?>
aqui esta el codigo con todos los comentarios... gracias erik
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 19:10.