Foros del Web » Programando para Internet » PHP »

$_REQUEST ¿dinámico?

Estas en el tema de $_REQUEST ¿dinámico? en el foro de PHP en Foros del Web. Hola a todos: Tengo creado un for que me genera campos con diferentes nombres en un formulario de la siguiente manera: Código HTML: <input name= ...
  #1 (permalink)  
Antiguo 18/10/2006, 10:56
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Pregunta $_REQUEST ¿dinámico?

Hola a todos:

Tengo creado un for que me genera campos con diferentes nombres en un formulario de la siguiente manera:

Código HTML:
<input name="nombre_1" type="text" value="" size="20" />
<input name="nombre_2" type="text" value="" size="20" />
<input name="nombre_3" type="text" value="" size="20" /> 
Y luego quiero llamar a ese campo dentro de un for de forma que sea dinámico, algo así:

Código PHP:
for($i=0$i<=3$i++) {
$nombre $_REQUEST['nombre_$i'];

Claro, que esto no funciona. ¿Alguna idea?
  #2 (permalink)  
Antiguo 18/10/2006, 11:15
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
Claro que el for que declaras nunca te va a funcionar ya que las variables que estas enviando no son eso (un array, son una variable y estas las ves con un simple echo), para que lo que tratas de hacer deberías de convertir esas variables en un array. Checa este ejemplo que te da las dos opciones que te menciono:

Código PHP:
<?php
if ( isset($_REQUEST['submit']) )
{
   
// esto si quieres ver el valor de los input
   
echo $_REQUEST['nombre_1']."<br/>";
   echo 
$_REQUEST['nombre_2']."<br/>";
   echo 
$_REQUEST['nombre_3']."<br/>";

   echo 
"<p>";

   
// esto si lo quieres recorrer como un array
   
$generararray $_REQUEST['nombre_1'].",".$_REQUEST['nombre_2'].",".$_REQUEST['nombre_3']; // concatenamos las variables que nos llegaron
   
$nuevoarray explode ","$generararray); // convertimos las variables en array

   
for ( $e 0$e count $nuevoarray ); $e++ )
   {
      echo 
$nuevoarray[$e]."<br/>";
   }
}
else
{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<input name="nombre_1" type="text" value="1" size="20" /><br/>
<input name="nombre_2" type="text" value="2" size="20" /></br/>
<input name="nombre_3" type="text" value="3" size="20" /><br/>
<input type="submit" name="submit" value="Enviar">
</form>
<?php
}
?>
Espero que con el ejemplo te quede claro y que por lo menos te de una idea para lo que quieres hacer.

Nota: Puedes cambiar el método de envío para que veas como funciona. Suerte
  #3 (permalink)  
Antiguo 18/10/2006, 11:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Yo recomendaría usar la técnica del "array"...

Es decir, . .los nombres de tus elementos del formulario son de tipo:
name="nombre[]" (con [] PHP lo entenderá como un array).

En tu script PHP de proceso recibiras un array para que lo proceses.

Tienen una FAQ al respecto para ver:
http://www.forosdelweb.com/showthrea...710#post518710


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 18/10/2006, 11:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Anastasiaphp Ver Mensaje
Hola a todos:

Tengo creado un for que me genera campos con diferentes nombres en un formulario de la siguiente manera:

Código HTML:
<input name="nombre_1" type="text" value="" size="20" />
<input name="nombre_2" type="text" value="" size="20" />
<input name="nombre_3" type="text" value="" size="20" /> 
Y luego quiero llamar a ese campo dentro de un for de forma que sea dinámico, algo así:

Código PHP:
for($i=0$i<=3$i++) {
$nombre $_REQUEST['nombre_$i'];

Claro, que esto no funciona. ¿Alguna idea?
Lo tenías casi según tu forma:

Código PHP:
$nombre $_REQUEST['nombre_'.$i]; 
ó

Código PHP:
$nombre $_REQUEST["nombre_$i"]; 
El problema está en que tus comillas simples hacían que no se interpretase el valor de tu variable $i .. por eso .. o contatenas (caso 1) o usas comillas dobles (caso 2).

Pero .. insito que trabajar este tema como un "array" original sería lo ideal.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 18/10/2006, 11:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Erikfrancisco Ver Mensaje
Claro que el for que declaras nunca te va a funcionar ya que las variables que estas enviando no son eso (un array, son una variable y estas las ves con un simple echo), para que lo que tratas de hacer deberías de convertir esas variables en un array. Checa este ejemplo que te da las dos opciones que te menciono:

Código PHP:
<?php
if ( isset($_REQUEST['submit']) )
{
   
// esto si quieres ver el valor de los input
   
echo $_REQUEST['nombre_1']."<br/>";
   echo 
$_REQUEST['nombre_2']."<br/>";
   echo 
$_REQUEST['nombre_3']."<br/>";

   echo 
"<p>";

   
// esto si lo quieres recorrer como un array
   
$generararray $_REQUEST['nombre_1'].",".$_REQUEST['nombre_2'].",".$_REQUEST['nombre_3']; // concatenamos las variables que nos llegaron
   
$nuevoarray explode ","$generararray); // convertimos las variables en array

   
for ( $e 0$e count $nuevoarray ); $e++ )
   {
      echo 
$nuevoarray[$e]."<br/>";
   }
}
else
{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<input name="nombre_1" type="text" value="1" size="20" /><br/>
<input name="nombre_2" type="text" value="2" size="20" /></br/>
<input name="nombre_3" type="text" value="3" size="20" /><br/>
<input type="submit" name="submit" value="Enviar">
</form>
<?php
}
?>
Espero que con el ejemplo te quede claro y que por lo menos te de una idea para lo que quieres hacer.

Nota: Puedes cambiar el método de envío para que veas como funciona. Suerte
Te liastes mucho ..

En principio pierdes todo el "dinamismo" del código pues concatenas "a mano" las posibles variabels que puedas recibir. Recuerda que el objetivo de esto es crear un código que "no" sepas cuantas variables te van a llegar (pues se generarn en forma dinámica con un bucle por algún lado ..).

Luego te liastes más concatenando tus variables en un string separado por comas para aplicar un explode() y así poder luego recorrer el array con un bucle for() (cuando lo más ideal en ese caso es un foreach() .. así ni cuentas ni tienes que llevar un contador por médio ..).

Estudia la FAQ propuesta y veras que comodo es generar este tipo de "formularios dinámicos" sin problemas.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 18/10/2006, 11:44
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Gracias Erikfrancisco, en realidad es solo una parte que estoy probando de un código más complejo que no me funciona, os he puesto el for con solo la línea a la que afectaba, el dato lo utilizo para luego subirlo a la BD.


Cluster, gracias, he mirado lo del array que me comentas, pero veo que no sirve para campos tipo text, que son los que yo necesito. Estoy probando $nombre = $_REQUEST['nombre_'.$i]; a ver si consigo que funcione al menos una parte.

Saludos.
  #7 (permalink)  
Antiguo 18/10/2006, 11:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Anastasiaphp Ver Mensaje
Gracias Erikfrancisco, en realidad es solo una parte que estoy probando de un código más complejo que no me funciona, os he puesto el for con solo la línea a la que afectaba, el dato lo utilizo para luego subirlo a la BD.


Cluster, gracias, he mirado lo del array que me comentas, pero veo que no sirve para campos tipo text, que son los que yo necesito. Estoy probando $nombre = $_REQUEST['nombre_'.$i]; a ver si consigo que funcione al menos una parte.

Saludos.
Sirve perfectamente para cualquier tipo de campo de un formulario .. sólo que el ejemplo usa un "checkbox" .. pero es lo mismo para cualquier tipo de elemento de un formulario HTML (incluido <select> ... y otros ..)

lo que debes respetar es el nombre del campo tipo:
nombre[]

PHP al final no sabe si el dato que le llegó era un "checkbox" con un "value" dado (como en el ejemplo de la FAQ) o era otro tipo de "input" con un valor digitado a mano o pre-fijado en un "value" del mismo.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 18/10/2006, 11:55
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
Me parece que:

$nombre = $_REQUEST['nombre_'.$i];

Si te va a funcionar siempre y cuando el valor inicial del for cominece por 1 y tu condicional lo cambies a $i<=4. U otra forma es sumandole uno a la variable de esta forma:

$nombre = $_REQUEST['nombre_'.($i+1)];

Suerte
  #9 (permalink)  
Antiguo 18/10/2006, 11:57
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
¡Vaya Cluster!
El caso es que es de las primeras cosas que probé y no me funcionó, lo hice de la siguiente manera:

Código HTML:
<input name="nombre[]" type="text" value="" size="20" />
<input name="nombre[]" type="text" value="" size="20" />
<input name="nombre[]" type="text" value="" size="20" /> 
Y luego lo llamaba así:
Código PHP:
$_REQUEST['nombre']['name']; 

volveré a probarlo...
  #10 (permalink)  
Antiguo 18/10/2006, 12:00
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Probaré también con
$nombre = $_REQUEST['nombre_'.($i+1)];

y a ver si consigo avanzar. Gracias a los dos.
  #11 (permalink)  
Antiguo 18/10/2006, 12:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Anastasiaphp Ver Mensaje
¡Vaya Cluster!
El caso es que es de las primeras cosas que probé y no me funcionó, lo hice de la siguiente manera:

Código HTML:
<input name="nombre[]" type="text" value="" size="20" />
<input name="nombre[]" type="text" value="" size="20" />
<input name="nombre[]" type="text" value="" size="20" /> 
Y luego lo llamaba así:
Código PHP:
$_REQUEST['nombre']['name']; 

volveré a probarlo...
No sé de donde sacastes esa sintax .. si vuelves a releer la FAQ veras que ya tienes un array que recorrer:

Código PHP:
foreach($_REQUEST['nombre'] as $dato){
   echo 
$dato."<br>";

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 18:26.