Foros del Web » Programando para Internet » PHP »

Obtener datos de un formulario

Estas en el tema de Obtener datos de un formulario en el foro de PHP en Foros del Web. hola a tod@s, Tengo una pagina con un formulario y una serie de campos, al pulsar guardar quiero que guarde dichos campos en una base ...
  #1 (permalink)  
Antiguo 29/11/2005, 13:46
 
Fecha de Ingreso: noviembre-2002
Mensajes: 198
Antigüedad: 21 años, 5 meses
Puntos: 0
Obtener datos de un formulario

hola a tod@s,

Tengo una pagina con un formulario y una serie de campos, al pulsar guardar quiero que guarde dichos campos en una base de datos mysql.

El caso es que el numero de campos en el formulario puede variar, y sus nombres tambien, puedo tener por ejemplo campos con el id, de momento no le asigno ningún nombre, nose si es necesario, me refiero a ellos por su id,
este puede ser:

Turno-1T, Turno-2T, Turno-4T

ya que se han introducido 4 turnos pero el tercero se ha eliminado,

¿Como puedo saber cuantos campos tengo para poder acceder a ellos y guardarlos en mi base de datos?

Un saludo y gracias.
  #2 (permalink)  
Antiguo 29/11/2005, 15:59
 
Fecha de Ingreso: junio-2004
Ubicación: Cuautitlán
Mensajes: 48
Antigüedad: 19 años, 9 meses
Puntos: 0
Bueno no se si te sirva, pero puedes obtener todos los campos de tu formulario por medio de el array $_POST ó $_GET, dependiendo del método que utilices para enviar el formulario. Después puedes usar foreach() para leer el array:

Código PHP:
foreach ($_POST as $campo => $valor) {
   echo 
"$campo: $valor<br>\n";

Saludos!
  #3 (permalink)  
Antiguo 29/11/2005, 16:30
 
Fecha de Ingreso: noviembre-2002
Mensajes: 198
Antigüedad: 21 años, 5 meses
Puntos: 0
Pero sabes si hay alguna forma para saber los id de los campos porque sino como se a que campos corresponden.

Saludos.
  #4 (permalink)  
Antiguo 29/11/2005, 18:33
 
Fecha de Ingreso: junio-2004
Ubicación: Cuautitlán
Mensajes: 48
Antigüedad: 19 años, 9 meses
Puntos: 0
El 'id' de los campos no creo que lo puedas obtener, al menos eso creo, diganme si me equivoco.

Ahora el atributo 'name' lo puedes obtener en el ejemplo que te di con $campo.
  #5 (permalink)  
Antiguo 30/11/2005, 05:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
A que te refires con "id" .. Cara a a PHP lo único que recibes es el "name" del campo o input que creastes en tu formulario.

Aprovechandote de que $_POS es un array superglobal (al igual que $_GET .. etc) que contiene todo lo que se reciba por ese método .. recorre dicho array para obtener sus nombres de los campos que usastes y sus valores (tal cual comenta: theQuikeMX)

También sería recomendable que tratases ese grupo de datos al estilo "array" .. tal como presenta esta FAQ:

http://www.forosdelweb.com/showthrea...710#post518710

De todas formas . .se más explicito en tus preguntas .. adjunta el código que uses (formulario/ y como lo piensas procesar en PHP) para que nos hagamos una idea y tal vez orientarte por mejor camino.

Un saludo,
  #6 (permalink)  
Antiguo 30/11/2005, 10:48
 
Fecha de Ingreso: noviembre-2002
Mensajes: 198
Antigüedad: 21 años, 5 meses
Puntos: 0
Bueno me gustario que vieseis mi formulario pero como no puedo insertar una captura de pantalla y lo tengo en local...

Intentaré describirlo.

Tendo una tabla, llamemosle TablaTurnos

Esta tabla tiene tres columnas:

Primera columna tengo una lista desplegable para seleccionar el turno a meter (1,2,3.....), a esta lista le llamo Turno-"numeroDelTurno"T, osea q si se han metido 3 turno tengo Turno-1T,Turno-2T,Turno-3T.

Segunda columna: tengo dos campos de texto, los llamo HInicial-"numeroDelTurno" T, osea HInicial-1T,HInicial-2T.... y HFinal-"numeroDelTurno"T.


Tercera Columna: un campo de texto y una lista desplegable, el campo de texto lo llamo "CodOP-"numeroDelTurno" R y a la lista desplegable la llamo NomOP-"numeroDelTurno" R

Bueno luego tengo una segunda tabla, justo debajo de la primera, llamemosla tabla de registros.

En esta tabla tengo: CodProceso-"numeroDelRegistro" R
NomProceso-"numeroDelRegistro" R
UniProceso-"numeroDelRegistro" R
KgProceso-"numeroDelRegistro" R
IdTurno-"numeroDelRegistro" R

y otros campos pero no creo que haga falta que los nombre todos.

Total que como he dicho, un turno puede tener varios registros y se pueden borrar turnos y tambien sus registros, es decir, si en un turno hemos introducido varios registros podemos despues, antes de enviar decidir eliminar cualquiera de ellos y con los turnos pasa lo mismo, obviamente si borramos un turno borramos todos sus registros asociados.

Bueno tras toda esta explicación, surge la pregunta, una vez le demos a enviar debemos guardar toda esta informacion en una tabla que llamamos: Datos_Historicos.

Esta tabla tiene los campos: turno,HInicial,HFinal,CodOp,NomOP,NomProceso,CodPr oceso, etc.

Como es obvio debemos guardar esta información de forma coherente.

¿Y como hacemos eso?¿Como sabemos a que registro corresponde cada código de proceso por ejemplo?¿o como sabemos que turno o hora inicial tiene el registro tal?

Mi planteamiento:

Para saber a que registro corresponde el codigo de proceso tal , para eso a continuacion del nombre añado -numeroDelRegistro.

Para saber que turno tiene tal registro tengo el idTurno-"numeroDelRegistro"


Supongo que una solución puede ser vaya obteniendo, los valores del array $_POST o $_GET, obtengo el nombre del campo, de dicho nombre extraigo el numero apropiado,el numero del final y tambien la letra final R o T.

con esta informacion ya puedo obtener automaticomente el resto de información que acompaña al campo que estoy procesando, ya que la primera parte de los nombres que me hacen falta los conozco y la segunda lo acabo de obtener.

Otengo esta informacion y lo guardo en la base de datos y marco que el registro tal ya se a procesado para que en el recorrido que estoy haciendo del array $_POST, cuando me aparezca otro campo con el numero ya procesado, pase al siguiente.

Seria una posibilidad, ¿no?
  #7 (permalink)  
Antiguo 30/11/2005, 10:50
 
Fecha de Ingreso: noviembre-2002
Mensajes: 198
Antigüedad: 21 años, 5 meses
Puntos: 0
AKI QUERIA PONER:

Tercera Columna: un campo de texto y una lista desplegable, el campo de texto lo llamo "CodOP-"numeroDelTurno" T y a la lista desplegable la llamo NomOP-"numeroDelTurno" T
  #8 (permalink)  
Antiguo 30/11/2005, 11:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Me lié con la explicación teórica .. pero si pudieras adjuntar el código actual que ilustre todo lo que has comentado tal vez nos hagamos una mejor idea del problema.

Sobre el tema de las capturas podrías usar servicios como este para poder compartir imagenes en foros y demás:
http://www.forosdelweb.com/showthread.php?t=289547


Un saludo,
  #9 (permalink)  
Antiguo 30/11/2005, 12:01
 
Fecha de Ingreso: noviembre-2002
Mensajes: 198
Antigüedad: 21 años, 5 meses
Puntos: 0
Aqui te adjunto parte de mi código, nose si eso te puede aclarar, pense que me explicación es basante clara, ¿donde te liaste?

<form id="formulario" name="formulario" method="post" action= >

<table width="875" border="0" cellspacing="0">

<table width="900" border="0" cellspacing="0" >
<tr>
<td width="2">&nbsp;</td>
<td width="868" bgcolor="#F7F7F7"><table width="868" border="0" cellspacing="0" bordercolor="1">
<tr valign="top" bordercolor="2">
<td width="138" height="37" bordercolor="0"><table width="138" border="1" cellspacing="0" id="Turno">
<tr>
<td width="134" height="37" bgcolor="#2157D7"><div align="center" class="Estilo6"><u>Turno</u></div>
<div align="center" class="Estilo3">
<select name="Turno-1T" class="Estilo2" id="Turno-1T" onChange="JavaScript:asignarHoras()" >

<?php
for ($i=0; $i<$numTurnos; $i++ )
echo "<option value='".$j."'>" .$regTurnos[$i][0] ."</option>";

?>
</select>

</div></td>
</tr>
</table>
<!-- tabla horario --> </td>
<td width="161" bordercolor="1"><table width="161" height="37" border="1" cellspacing="0" id="Horario">
<tr valign="top">
<td width="170" height="37" bgcolor="#2157D7"><div align="center" class="Estilo6"><u>Horario</u></div>
<div align="center" class="Estilo3">

<input name="HInicial-1T" type="text" class="Estilo2" id="HInicial-1T" size="6" align="middle" >

&nbsp; <input name="HFinal-1T" type="text" class="Estilo2" id="HoraFinal3" size="6" align="middle">
<span class="Estilo4"><u>
</u></span></div></td>
</tr>
</table>
<!-- tabla Operario --> </td>
<td width="573" bordercolor="1"><table width="560" border="1" cellspacing="0" id="Operario">
<tr>
<td width="558" height="37" bgcolor="#2157D7"><div align="center" class="Estilo6"><u>Operario</u></div>
<div align="center" class="Estilo3"><span class="Estilo4"><u><u>
<input name="CodOP-1T" type="text" class="Estilo4" id="CodOP-1T" value="" size="10">
</u>
</u></span>

&nbsp;
<select name="NomOP-1T" size class="Estilo4" id="NomOP-1T""10">

<?php ?>
</select>
<span class="Estilo4"><u>
</u></span></div></td>
</tr>
</table></td>
</tr>
</table></td>
<td width="24" bgcolor="#F7F7F7"><table height="34" border="0" cellspacing="0">
<tr>
<td width="20"><span class="Estilo4"><u><u><u><u>
</u></u> </u></u></span></td>
</tr>
</table></td>
</tr>
</table>
<table width="875" border="0" cellspacing="0">
<tr>
<td colspan="3" align="left" valign="top" bgcolor="#F7F7F7">
<table width="870" border="1" cellspacing="0">
<tr valign="top">
<td width="31" rowspan="2" bgcolor="#FFFFCC"><p> <div align="center">
</div>
</p> <p>&nbsp;</p>
<p> <span class="Estilo4"><u><u>
<input name="IdTurno-1R" type="text" class="Estilo4" id="IdTurno-1R" style="visibility:hidden " value="" size="3">
</u></u></span></p>
</td>
<td width="743" rowspan="2" bgcolor="#FFFFFF">
<table border="0" cellspacing="0" id="segunadaFila">
<tr valign="top" height="142">
<td width="72">
<table width="72" height="151" border="1" cellspacing="0" id="Maquina">
<tr valign="top" height="68">
<td bgcolor="#CCCCFF"><div align="center" class="Estilo3 Estilo5">
<p><u><span class="Estilo8">MAQUINA</span></u>&nbsp; </p>
</div>
<div align="center" class="Estilo3">
<p>
<select name="Maq-1R" class="Estilo1" id="Maq-1R">

................................continua
  #10 (permalink)  
Antiguo 30/11/2005, 12:07
 
Fecha de Ingreso: noviembre-2002
Mensajes: 198
Antigüedad: 21 años, 5 meses
Puntos: 0
Al final de lo que acabo de poner tengo:

<div id="contenido">



</div>


Aki es donde inserto los nuevos turnos y registros.

Pongo parte del codigo de inserta nuevo turno:

echo (" &nbsp;

<table width=875 border=0 cellspacing=0>

<table width=900 border=0 cellspacing=0 >
<tr>
<td>&nbsp;</td>
<td width=869 bgcolor=#F7F7F7>

<table width=868 border=0 cellspacing=0 bordercolor=1>
<tr valign=top bordercolor=2>
<td width=138 height=37 bordercolor=0>
<table width=138 border=1 cellspacing=0>
<tr>
<td width=134 height=37 bgcolor=#2157D7><div align=center class=Estilo6><u>Turno</u></div>
<div align=center class=Estilo3>
<select class=Estilo2 id=\"Turno-$TurnoActual T \" name=\"Turno-$TurnoActual T \" onChange=JavaScript:asignarHoras()>");


for ($i=0; $i<$numTurnos; $i++ )
echo "<option value='".$j."'>" .$regTurnos[$i][0] ."</option>";


echo(" ........................................ continua

Pongo parte del codigo de insertar nuevo registro:


echo (" <table width=875 border=0 cellspacing=0>
<tr>
<td colspan=3 align=left valign=top bgcolor=#F7F7F7>
<table width=870 border=1 cellspacing=0>
<tr valign=top>
<td width=31 rowspan=2 bgcolor=#FFFFCC>
<p><div align=center>
<img id=\"Elim-$RegistroActual\" src=eliminar.JPG width=29 height=30 onClick=\"javascript:eliminarRegistro('Elim-$RegistroActual',$TurnoActual)\" style=\"cursor: pointer; border: 1px solid black; visibility:hidden;\" >
</div>
</p>
<p>&nbsp;</p>
<p><span class=Estilo4><u><u>
<u><u>
</u></u> </u></u></span></p>
<p>
<span class=Estilo4><u><u>
<input type=text class=Estilo4 id=\"IdTurno-$RegistroActual R \" name=\"IdTurno-$RegistroActual R \" style=visibility:hidden value=$TurnoActual size=3>
</u></u></span></p></td>

<td width=743 rowspan=2 bgcolor=#FFFFFF>
<table border=0 cellspacing=0 >
<tr valign=top height=142>
<td width=72>
<table width=72 height=151 border=1 cellspacing=0>
<tr valign=top height=68>
<td bgcolor=#CCCCFF>
<div align=center class=Estilo3>
<p><u><span class=Estilo8>MAQUINA</span></u>&nbsp; </p>
</div>
<div align=center class=Estilo3>
<p>
<select class=Estilo1 id=\"Maq-$RegistroActual R\" name=\"Maq-$RegistroActual R\">
");

for ($i=0; $i<$numMaquinas; $i++ )
{
echo "<option>$regMaquinas[$i]</option>";

}

echo("
</select>
</p>
<div >
<p class=Estilo4><u>
<u></u></u></p>
<p class=Estilo4><u>
</u> </p>
</div>
</div></td>
</tr>
</table></td>
<td width=372>

<table width=372 height=151 border=1 cellspacing=0>
<tr valign=top height=142>
<td width=326 bgcolor=#CCCCFF>
<div align=center class=Estilo4><u>Proceso </u></div>
<div align=center class=Estilo4>
<select class=Estilo2 id=\"CodProceso-$RegistroActual R\" name=\"CodProceso-$RegistroActual R\">
  #11 (permalink)  
Antiguo 30/11/2005, 12:17
 
Fecha de Ingreso: noviembre-2002
Mensajes: 198
Antigüedad: 21 años, 5 meses
Puntos: 0
aki os envio enlace para ver imagen, haber si funciona



otro:

[img=http://img457.imageshack.us/img457/592/dibujo2bv.th.png]
  #12 (permalink)  
Antiguo 30/11/2005, 13:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No acabé de entender mucho el proposito de todo esto ..pero sólo te puedeo comentar que la foma que tienes de trabajar con la generación de tus elementos dinámicos podrías usar el formato "array" ..

Sería:

En lugar de:
<select class=Estilo1 id=\"Maq-$RegistroActual R\" name=\"Maq-$RegistroActual R\">

usar:
<select class=Estilo1 id=\"Maq-$RegistroActual R\" name=\"Maq[]\">

Y por un campo hidden lleva el ID del registro que corresponda.
<input type=\"text\" name=\"RegistroActual[]\" value=\"$RegistroActual\">

En tu scritp PHP de proceso, obtendras N arrays "paralelas" con los valores de estos como indices de los mismos, para que los leas con un for() al mismo indice para todas las variables que propagas.

De esta forma tendrás un array con los "ID's" .. otro paralelo con los datos de "Maq" .. etc, etc.

Tendras todo separado listo para hacer tus UPDATE o INSERT bajo esos "ID's" y el resto de datos para actualizar registros o crear ...

Un saludo,
  #13 (permalink)  
Antiguo 30/11/2005, 13:52
 
Fecha de Ingreso: noviembre-2002
Mensajes: 198
Antigüedad: 21 años, 5 meses
Puntos: 0
Cita:
Iniciado por Cluster
No acabé de entender mucho el proposito de todo esto ..pero sólo te puedeo comentar que la foma que tienes de trabajar con la generación de tus elementos dinámicos podrías usar el formato "array" ..

Sería:

En lugar de:
<select class=Estilo1 id=\"Maq-$RegistroActual R\" name=\"Maq-$RegistroActual R\">

usar:
<select class=Estilo1 id=\"Maq-$RegistroActual R\" name=\"Maq[]\">

Y por un campo hidden lleva el ID del registro que corresponda.
<input type=\"text\" name=\"RegistroActual[]\" value=\"$RegistroActual\">

En tu scritp PHP de proceso, obtendras N arrays "paralelas" con los valores de estos como indices de los mismos, para que los leas con un for() al mismo indice para todas las variables que propagas.

De esta forma tendrás un array con los "ID's" .. otro paralelo con los datos de "Maq" .. etc, etc.

Tendras todo separado listo para hacer tus UPDATE o INSERT bajo esos "ID's" y el resto de datos para actualizar registros o crear ...

Un saludo,
Vamos a ver, nose porque me dices que no entiendes el proposito de todo esto ¿a que te rerieres?

Bueno, haber si me aclaro, en tu propuesta, tendría un array por cada campo ¿no?
y para acceder a el seria: Maq[1],Maq[2],Maq[3],Maq[5]

Si te fijas he pasado del 3 al 5, este sería el caso de eliminar el registro 4,¿no?

Bueno vale, si te he entenido bien, ya tengo toda mi informacion en los arrays
y para un mismo registro todos sus arrays correspondientes para acceder a ellos usaré el mismo indice, ¿no?

y como se que turno tienen, vale tendría el array IdTurno[]
y me daría el valor del turno, pero si tengo 4 turnos elimino el tercero, el valor del cuarto turno, el que ahora ocupa la posicion 3, sigue siendo 4, segun lo tengo hecho, ¿debo modificar esto?

¿para que el campo oculto que me comentas?
Lo siento pero no lo he entendido muy bien.
  #14 (permalink)  
Antiguo 03/12/2005, 12:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Bueno, haber si me aclaro, en tu propuesta, tendría un array por cada campo ¿no?
y para acceder a el seria: Maq[1],Maq[2],Maq[3],Maq[5]

Si te fijas he pasado del 3 al 5, este sería el caso de eliminar el registro 4,¿no?
No, no se trata de tener un array "replica" de los datos que tu almacenas en tu Base de datos (donde los "ID's" de tus registros pueden ser salteados) sino en generar un array asociativo que va a contener esos n° de registros que relaciona.

Ejemplo:
Tu array "Maq" editada en el formulario siempre será:
Maq[0] = "1"
Maq[1] = "34"
Maq[2] = "3"
Maq[3] = "etc"

Esos "valores" corresponderían a tus ID de máquina .. o a cualquier otro dato asociado.

Por ende aquí no se trata de que el "indice" de ese array sea tu "ID" asociado de un registro o dato concreto que por ahí ingresas y llega a tu script PHP de proceso, sino que ese array así te hace de "transportador" para tus ID's y demás datos.

Cita:
y como se que turno tienen, vale tendría el array IdTurno[]
y me daría el valor del turno, pero si tengo 4 turnos elimino el tercero, el valor del cuarto turno, el que ahora ocupa la posicion 3, sigue siendo 4, segun lo tengo hecho, ¿debo modificar esto?
Creo que con la explicación anterior debe quedarte claro ya que no generas un array en tu formulario con sus indices = a tus "IDturno" sino que son sus valores los que ahí colocas tu dato .. en este caso tus "IDturno" donde NO importa si son consecutivos, salteados o en total desorden.

[quote[¿para que el campo oculto que me comentas?
Lo siento pero no lo he entendido muy bien.[/quote]

Si tu tienes N datos que son asociados a cierto registro (indentificado como único por ese "ID turno" por ejemplo) .. lo que te hará falta es generar tantso arrays "paralelos" al estilo que te mencioné:

Idturno[]
IdMaq[]
datonose[]

Como datos estén asociados.. así tendrás por ejemplo:

idTurno[0] = "1"
idMaq[0]="3"
datonose[0]= "blabla"

idTurno[1] = "1"
idMaq[1]="56"
datonose[1]= "blablaasdfasdf"

idTurno[2] = "7"
idMaq[2]="2"
datonose[2]= "blabla444"

Si tienes algún dato que asociar entre estos, pero no lo solicitas via "input" en el formulario al usuario: por un input "text" .. por un "select" .. o por otro médio, en esos casos todos los demás datos que necesites asociar los deberías propagar de la misma forma bajo un input de un formulario HTML de tipo hidden

<input type="hidden" name="nose[]" value="<? echo $nose ?>">

Así se usa normalmente cuando tu generas un grupo de campos para un formulario que son agrupados y relacionados por un identificador que los haga únicos entre ellos.

Eso obtendrías si generas esos "input" donde pides esos datos en un formualrio por un bucle .. ya se un for() .. o un While() o cualquier otro tipo de bucle (y a su vez forzado por qué obtienes esos datos de una consulta a una Base de datos u otro médio).

Cita:
Vamos a ver, nose porque me dices que no entiendes el proposito de todo esto ¿a que te rerieres?
Pues que como veras el tema es complejo y no sé si en ese formulario todos los datos que aparecen son relacionados a una sóla máquina o en ese mismo formulario tienes grupos de datos que ajustas para un grupo de imagenes que vas editando (creo que es esto último lo que haces?)

Como no he entendido exactamente que es lo que deseas hacer para tu caso concreto simplemente me he limitado a explicarte como trabajar con formularios complejos donde los datos se generan dinámicamente (= no sabes cuantos vas a generar ni cuantos en consecuencia deberías procesar como variables en tu scritp PHP de proceso). Ahora .. intente aplicar lo que te he comentado a tu caso concreto si es que aplica .. por qué insisto que no me quedó claro que necesitas hacer.

Un saludo,
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 05:24.