Foros del Web » Programando para Internet » PHP »

Recoger datos de formulario

Estas en el tema de Recoger datos de formulario en el foro de PHP en Foros del Web. Hola amigos, ante todo decir que soy novato en PHP, así que no tengo prácticamente ni idea, aunque estoy tratando de aprender. Estoy trabajando sobre ...
  #1 (permalink)  
Antiguo 21/09/2010, 13:03
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Recoger datos de formulario

Hola amigos, ante todo decir que soy novato en PHP, así que no tengo prácticamente ni idea, aunque estoy tratando de aprender. Estoy trabajando sobre un formulario con campos dinámicos, he leído que para eso tengo que ponerle en el name [] para que se cree un array, pero mi pregunta es, ¿cómo puedo acceder a los valores de esos inputs? Según vaya resolviendo dudas iré posteando las que me quedan.
Gracias y saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #2 (permalink)  
Antiguo 21/09/2010, 13:13
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Recoger datos de formulario

pues el colocar el name[] hace que tu input sea un arreglo se usa mas que todos para datos de seleccion multiple y estos campos dinamicos comolos recibes, tal cual como recibes los campos normalmente
Código PHP:
Ver original
  1. $_POST['name']
claro esto te esta recibiendo un arreglo con los datos que enviaste en los campos si haces esto
Código PHP:
Ver original
  1. foreach($_POST['name'] as $key=>$value){
  2.     echo "la id es ".$key." el valor es".$value;
  3. }
recorreras todos tus campos diciendo el id y el valor de ahi lo que te queda es hacer el proceso correspondiente con cada uno de los campos espero te sea de ayuda mi comentario saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 21/09/2010, 13:20
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Respuesta: Recoger datos de formulario

Si tienes un input text por ejemplo:

<input type="text" name="nombre">

Luego para recojer el valor de nombre bastaría con hacer un simple $_POST:

Código PHP:
Ver original
  1. <?php
  2. echo "El dato es:".$_POST['nombre'];
  3. ?>

Ahora, si tienes varios inputs con un mismo name debes de añadirle [] así:


<input type="text" name="nombre[]">
<input type="text" name="nombre[]">

Luego, para recojer los datos bastaría con usar foreach por ejemplo:

Código PHP:
Ver original
  1. <?php
  2. foreach ($nombre as $valor) {
  3. echo $valor.'<br />';
  4. }
  5. ?>


Saludos,
  #4 (permalink)  
Antiguo 22/09/2010, 13:53
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Recoger datos de formulario

Ok, vamos a ver, tengo el siguiente código:
envio.php
Código PHP:
Ver original
  1. <?php
  2.   $nick = $_REQUEST['nombre'];
  3.   $puntos = $_REQUEST['puntos'];
  4.   $cx = $_REQUEST['coordx'];
  5.   $cy = $_REQUEST['coordy'];
  6.   $comentario = $_REQUEST['comentario'];
  7.   $space = /^\s+$/;
  8.   $enviar = true;
  9.   $error = '';
  10.   $msg = wordwrap('Nombre: '.$nick.'\nPuntos: '.$puntos.'\nComentario: '.$comentario.'\nCarácteres: '.strlen($comentario));
  11.   $f = ' por favor</p><br />';
  12.   if($nick == '' || ereg($space, $nick){
  13.    $enviar = false;
  14.    $error .= "<p class='error'>Escribe tu nombre,$f";
  15.   }
  16.   if($puntos == '0'){
  17.    $enviar = false;
  18.    $error .=
  19.   }
  20.   foreach($cx as $i){
  21.    if($i=='' || ereg($space, $i)){
  22.     /*¿Cómo puedo validar que sea un número?*/
  23.     $enviar = false;
  24.     $error .= "<p class='error'>Indica tus coordenadas,$f";
  25.    }
  26.   }  
  27.   foreach($cy as $j){
  28.    if($j=='' || ereg($space, $j)){
  29.     /*¿Cómo puedo validar que sea un número?*/
  30.     $enviar = false;
  31.     $error .= "<p class='error'>Indica tus coordenadas,$f";
  32.    }
  33.   }
  34.   if(strlen($comentario) > 1000){
  35.    $enviar = false;
  36.    $error .= "<p class='error'>El comentario es demasiado largo, por favor escribe como máximo 1000 carácteres (sobran ".(strlen($comentario))-1000." carácteres)</p><br />";
  37.   }
  38.   if(strlen($comentario) < 1 || ereg($space, $comentario){
  39.    enviar = false;
  40.    $error .= "<p class='error'>El comentario es muy corto, por favor revísalo</p><br />";
  41.   }
  42.   if($enviar){
  43.    mail('[email protected]', 'Formulario', $msg);
  44.   }else{
  45.    echo $error;
  46.   }
  47.  ?>
Pero cuando envío el formulario (formulario.html) me sale una página vacía :S ¿Qué puede ser? Si veis algún error más, que lo habrá, por favor decídmelo.
Saludos (:
Edit: Evidentemente el formulario lo mando vacío
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Última edición por _cronos2; 22/09/2010 a las 14:36
  #5 (permalink)  
Antiguo 22/09/2010, 19:13
 
Fecha de Ingreso: septiembre-2010
Mensajes: 20
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Recoger datos de formulario

A que pagina llamas desde el formulario???
  #6 (permalink)  
Antiguo 22/09/2010, 23:27
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Recoger datos de formulario

A envio.php
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #7 (permalink)  
Antiguo 05/10/2010, 12:05
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Recoger datos de formulario

Ya pude solucionar el problema de que no me aparecía la página cambiándome de hosting, pero ahora tengo el siguiente código:
Código PHP:
Ver original
  1. $cx = $_REQUEST['coordx'];
  2. $f = ' por favor</p><br />';
  3. foreach($cx as $a=>$i){
  4.  if(empty($a)){
  5.   echo "<p class='error'>Rellena tus coordenadas X,$f";
  6.  }
  7. }
Pero me salta error : Warning: Invalid argument supplied for foreach() on line 44
que es la línea del foreach, ¿qué estoy haciendo mal?
Gracias y saludos :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #8 (permalink)  
Antiguo 05/10/2010, 15:23
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Recoger datos de formulario

el argumento que estas pasando es un arreglo??? es decir en el formulario que antecede a esta pagina esta el nombre asi
Código HTML:
Ver original
  1. <input type="text" name="coordx[]"/>
xq el error es que no esta reconociendo el arreglo segun recuerdo una vez que me paso saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #9 (permalink)  
Antiguo 05/10/2010, 15:33
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Recoger datos de formulario

Sí, el name es coordx[], pero lo acabo de probar y si lo hago con un for() normal sí funciona, y probé a hacer implode() y también funcionaba; sólo me da error con el foreach()
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Etiquetas: recoger, formulario
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 07:28.