Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-04-2007
Shadowless Shadowless is offline
Miembro
 
Registrado: abr 2007
Posts: 33
Poder: 0
Shadowless Va por buen camino
Formulario variable.

Saludos !!!
Estoy intentando crear una base de datos con MySQL introduciendo los datos mediante formularios en PHP.
El problema es que necesito que, dependiendo del valor escogido en una lista desplegable ( por ejemplo el número de miembros de un equipo ) el número de campos en el formulario varíe manteniendo los datos introducidos anteriormente en otros campos.
Esto es posible ? Puedo redirigir el formulario hacia otro manteniendo esos datos o puedo modificar el formulario actual ?
Muchas gracias por adelantado, si no me he explicado muy bien decidmelo por favor. ^_^
Responder Con Cita
  #2  
Antiguo 30-04-2007
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Cita:
Empezado por Shadowless
Saludos !!!
El problema es que necesito que, dependiendo del valor escogido en una lista desplegable ( por ejemplo el número de miembros de un equipo ) el número de campos en el formulario varíe manteniendo los datos introducidos anteriormente en otros campos.
Esto es posible ?
Claro que sí, pero debes ser tu mismo el que asigne nuevamente los valores a esos campos, ya que cada vez que haces submit a un formulario los campos se envian al servidor y por lo tanto se limpian automáticamente de los controles

Cita:
Empezado por Shadowless
Puedo redirigir el formulario hacia otro manteniendo esos datos o puedo modificar el formulario actual ?
a ver, si vas a otro formulario, te estás yendo a otra página, de tal forma vas sí o sí a perder los datos, en realidad lo que debes hacer es cargar la misma página asignando los respectivos valores a los campos anteriores, esto se puede hacer....mirate este enlace, puede que te sirva

Hasta Luego .-
__________________
No todo es como parece ser...
Responder Con Cita
  #3  
Antiguo 30-04-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Shadowless
El problema es que necesito que, dependiendo del valor escogido en una lista desplegable ( por ejemplo el número de miembros de un equipo ) el número de campos en el formulario varíe manteniendo los datos introducidos anteriormente en otros campos.
Esto es posible ?
Yo creo que sí que puede hacerse... habrás visto por ahí varios ejemplos, pero, creo que ya no sería PHP sino JavaScript el que tendría que venir en nuestra ayuda. O a lo menos creo que en principio sería lo más razonable.

Cita:
Empezado por Shadowless
Puedo redirigir el formulario hacia otro manteniendo esos datos o puedo modificar el formulario actual ?
No se entiende muy bien el asunto. Supongamos un Script A que termina imprimiendo un formulario A. El Script que ha de hacerse cargo de dicho formulario (indicado en el "action" del formulario) no tiene porqué ser el Script A, podría ser el Script B.

Y nada impide que el Script B imprima otro formulario utilizando o no los datos que le llegasen del formulario del Script A. Vamos, que, en principio, no habría problema en hacer algo así: falta que concretes y te pongas a ello y comentes los problemas que te encuentres.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 30-04-2007
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Ahora que veo metido a javascript en el cuento, me he confundido , parece que entendí mal el asunto, ahora con la respueta de dec, no sé si nuestro amigo Shadowless está pensanso mantener los valores y cambiar el número de campos del formulario dinamicamente, mmmm de todas maneras coincido con dec , está confuso el tema.....
__________________
No todo es como parece ser...
Responder Con Cita
  #5  
Antiguo 30-04-2007
Shadowless Shadowless is offline
Miembro
 
Registrado: abr 2007
Posts: 33
Poder: 0
Shadowless Va por buen camino
Hola !!!
Muchas gracias por la ayuda!!! Pero como veo que el tema está un poco confuso voy a intentar especificar más.
El caso es que necesito hacer un formulario para introducir grupos de trabajo en la base de datos. Así que tengo un campo para "título del trabajo", "director" etc.
Sin embargo, para el número de miembros del equipo, no hay un número fijo.
De modo que había pensado en poner una lista desplegable para poder elegir el número de miembros y así organizar otro formulario con la correspondiente cantidad de campos para los nombres.
Lo que no sé hacer es, redirigir o crear este nuevo formulario sin perder la información que hayan introducido en los campos de arriba.
Si se les ocurre otra forma de hacerlo distinto de la lista desplegable se los agradecería mucho tb.

Suerte y gracias !!!
Responder Con Cita
  #6  
Antiguo 01-05-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Shadowless
Si se les ocurre otra forma de hacerlo distinto de la lista desplegable
A ver qué te parece este ejemplo.

Cada vez que oprimas el botón "Agregar", se agregará un nuevo <input> para un nuevo miembro sin necesidad de cambiar de página. Cuando has puesto todos, mandas los datos como con cualquier otro formulario.

// Saludos

Última edición por roman fecha: 01-05-2007 a las 01:34:18.
Responder Con Cita
  #7  
Antiguo 01-05-2007
Shadowless Shadowless is offline
Miembro
 
Registrado: abr 2007
Posts: 33
Poder: 0
Shadowless Va por buen camino
Muchas gracias por la ayuda !!! Creo que ya he solucionado parte del problema y además he aprendido a manejar mejor los métodos. ^_^
Un último detalle por favor.
Qué propiedad debo usar y dónde, para que los campos que se generen estén alineados en el centro en lugar de la izq ?
Muchas gracias.
Un saludo.
Responder Con Cita
  #8  
Antiguo 01-05-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Si te refieres a centrar el texto de los "input" entonces puedes usar algo así:

Código:
<input type="text" style="text-align: center" />
Si lo que quieres es centrar los propios "input" entonces algo como esto:

Código:
<div style="text-align: center">
 <input type="text" />
</div>
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 11-05-2007
semptrion semptrion is offline
Miembro
 
Registrado: abr 2007
Posts: 112
Poder: 18
semptrion Va por buen camino
Un método un poco gastado pero que funciona

Para cargar datos (cuyo número es variable) utilizo la técnica de colocar varias filas de los datos requeridos en blanco.

Más o menos defino lo siguiente:

Una tabla padre (la de los datos del grupo)

Una tabla de hijos (la de los datos de los miembros del grupo)

Por costumbre, los datos de la tabla padre se colocan en la parte superior del formulario:
Código:
Nombre del grupo: [_______________________]
Título del trabajo: [_______________________]
Director: [___________________v]
etc.
y luego, en cada fila los nombres de los miembros del grupo:
Código:
Nombre                       Campo2               Campo3        Eliminar
-----------------------------------------------------------------------------
[Juan Pérez_____]         [foo__________]         [foo______]    [ ]
[Fulano de Tal___]        [foo__________]         [foo______]    [ ]
[Mengano de cual]         [foo__________]         [foo______]    [ ]
.
.
.
y luego espacios vacíos para colocar otros nombres (nótese que no hay eliminar):
Código:
[______________]         [______________]         [_________] 
[______________]         [______________]         [_________] 
[______________]         [______________]         [_________] 
[______________]         [______________]         [_________] 
[______________]         [______________]         [_________]
La cantidad de filas "en blanco" depende de la aplicación del formulario. Algunos serán suficientes con tres, otros con uno, quizá otros con diez. Por ejemplo si lo normal es que sean equipos de diez personas, se colocarán cinco líneas en blanco (de tal manera que en dos grabaciones se alcance el total).

Una vez que se envíe el formulario, al aparecer los datos en pantalla, nuevamente aparecerán la misma cantidad original de líneas en blanco (por si sea un equipo de 14 miembros). Y así sucesivamente.

La lógica de programación será que cada uno de los inputs, selects o buttons de la tabla de hijos tendrá, en el nombre de la variable, una conformación de array asociativo bidimensional donde la primera llave será el id del registro y la segunda el nombre del campo.

Por ejemplo, si ya existen tres registros en la tabla de hijos con los ids 123, 811 y 2314 los inputs tendrán la forma:
Código:
<input name="hijos[123][nombre]" type="text" value="Juan Pérez" />
<input name="hijos[811][nombre]" type="text" value="Fulano de Tal" />
<input name="hijos[2314][nombre]" type="text" value="Mengano de Cual" />
Si fuesen selects, serán:
Código:
<select name="hijos[123][campo2]" >...</select>
<select name="hijos[811][campo2]" >...</select>
<select name="hijos[2314][campo2]" >...</select>
Para los registros nuevos, se utilizarán número negativos descendientes:
Código:
<input name="hijos[-1][nombre]" type="text" value="" />
<input name="hijos[-2][nombre]" type="text" value="" />
<input name="hijos[-3][nombre]" type="text" value="" />
<input name="hijos[-4][nombre]" type="text" value="" />
etc.
Para recuperar los datos en el PHP, se empleará un array asociativo regular.

P.e.
Código PHP:
$hijos $_POST['hijos']; 
y luego se procederá a grabarlos:
Código PHP:
foreach( $hijos as $id => $campo ) {
    
/* Validar los campos del registro */
    
if ( $id && empty( $campo['nombre' ) ) {
        
$error[$id] = 'No se ha colocado el nombre';
    }
    
/* ...y otras validaciones */
    /* si todo está ok, entonces grabaremos o insertaremos, según el id */
    
if ( $id ) {
        
$query 'update miembros set '
            
' nombre=' $campo['nombre']
            . 
', campo2=' $campo['campo2']
            . 
', campo3=' $campo['campo3']
            . 
' where id = ' $id;
        
/* ejecutamos el query, como sea que lo hagamos */
     
} else {
        
$nuevoId generarId'miembros' );
        
// se supone que conocemos el id del grupo $idGrupo
        
$query 'insert into miembros '
             
'( id, idgrupo, nombre, campo2, campo3 ) values ( ' 
            
', ' $nuevoId
            
', ' $idgrupo
            
', ' $campo['nombre']
            . 
', ' $campo['campo2']
            . 
', ' $campo['campo3']
             . 
')';
        
/* ejecutamos el query, como sea que lo hagamos */
    
}

En cuanto al tema de centrear el contenido de un control, sugiero que se utilicen clases css. Por ejemplo,
Código:
<input type="text" class="center" />
Y luego definir en el css:
Código:
.center { text-align: center; }
Así, el control es estructural y el formateo es semántico, dejando la apariencia donde debe estar: en el css.

Espero te sirva.

Saludos

Última edición por semptrion fecha: 11-05-2007 a las 03:56:35.
Responder Con Cita
  #10  
Antiguo 13-05-2007
Shadowless Shadowless is offline
Miembro
 
Registrado: abr 2007
Posts: 33
Poder: 0
Shadowless Va por buen camino
Muchas gracias por la ayuda !!!
Lamento ho haber contestado antes pero es que no he tenido internet en un tiempo.
Probaré el método que me dices semptrion, que parece interesante, aunque he utilizado el ejemplo de roman y ya he podido resolver un poco el problema.
Una pequeña duda y ya dejo de incordiar.
Cómo puedo introducir una variable de control para limitar el número de campos que se pueden crear mediante un método ?
Muchas gracias de antemano.
Responder Con Cita
  #11  
Antiguo 13-05-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Shadowless
Cómo puedo introducir una variable de control para limitar el número de campos que se pueden crear mediante un método ?
Siguiendo el código fuente de Román podríamos añadir algo como esto:

Código PHP:
<script type='text/javascript'>

/**
 * Máximo número de miembros
 */
MAX_MIEMBROS 4;

/**
 * Número total de miembros
 */
totalMiembros 0;

function 
docLoad()
{
  
/**
   * Guardamos una referencia a la lista de miembros
   */
  
oDivMiembros document.getElementById("miembros");
}

function 
agregarMiembro()
{
  
/**
   * Si el número de campos supera el máximo no continuamos
   */
  
if(totalMiembros >= MAX_MIEMBROS){
    
alert('Superaste el número máximo de miembros');
    return 
false;
  }

  
/**
   * Creamos un objeto input para un nuevo miembro
   */
  
var oInput document.createElement('input');
  
  
/**
   * Asignamos propiedades
   */
  
oInput.type 'text';
  
oInput.name 'miembros[]';

  
/**
   * Insertamos el objeto input en la lista de miembros
   */
  
oDivMiembros.appendChild(oInput);
  
  
/**
   * Incrementamos la variable para el "control" del número de miembros
   */
  
totalMiembros++;

  
/**
   * Ponemos el foco del teclado en el cuadro de texto insertado
   */
  
oInput.focus();
}
</script> 
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #12  
Antiguo 14-05-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
A lo apuntado por dec, sólo añadiría que además de la restricción por javascript, deberemos hacer la propia en el script php que reciba los datos. Saltarse el javascript puede ser relativamente fácil, y si la restricción en el límite de elementos es importante para tu sistema, no debes confiar en lo que venga del cliente y hacer tus propias comprobaciones del lado del servidor.

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
variable dentro de una variable molinero1 Varios 3 23-04-2007 12:44:48
Variable!! jdattoli Conexión con bases de datos 3 10-05-2006 10:10:04
variable con sql Cosgaya Tablas planas 3 15-12-2005 15:49:14
pasar datos de un formulario vista a cualquier formulario @-Soft OOP 2 28-09-2004 21:56:01
Hacer visible un formulario cuyo nombre temgo en una variable apicito OOP 1 25-11-2003 19:24:59


La franja horaria es GMT +2. Ahora son las 12:01:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi