Foros del Web » Programando para Internet » PHP »

Arrays en _POST

Estas en el tema de Arrays en _POST en el foro de PHP en Foros del Web. Hola a todos: Como estoy comenzando tengo la tira de dudas, a ver si un alma caritativa, me hecha otra mano. En el formulario hago ...
  #1 (permalink)  
Antiguo 13/05/2006, 11:27
 
Fecha de Ingreso: mayo-2006
Mensajes: 59
Antigüedad: 11 años, 6 meses
Puntos: 0
Arrays en _POST

Hola a todos:
Como estoy comenzando tengo la tira de dudas, a ver si un alma caritativa, me hecha otra mano.

En el formulario hago la siguiente entrada:
For ($nI2 = 1; $nI2 <= $nI; $nI2 ++){;
echo 'Titul:</td><td><input type="text" name=".aTitul[$nI2]." size="50" value ="'.$aTitul[$nI2].'">';
}


Pero después no se llamar a esta variable.
He probado con :

For ($nI1 = 1; $nI1 <= $_POST['nReg']; $nI1 ++){;
$cTitul = mysql_real_escape_string($_POST['aTitul[$nI1]']);
echo 'Titul '.$cTitul;
}

Pero no Funciona
  #2 (permalink)  
Antiguo 13/05/2006, 12:08
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 11 años, 7 meses
Puntos: 2
No se entiende bien tu código para generar los inputs. ¿queres darle el nombre "aTitul"?, porque despues utilizar $aTitul como si fuera un arreglo.
Para acceder a un elemento de un arreglo que esta contenido dentro de otro arreglo se utiliza esta notación:

Código PHP:
<?
$elemento 
$arreglo[indice1][indice2]; 
?>
Te recomiendo que leas la página del manual de php que explica el uso de las matrices:

http://www.php.net/manual/es/language.types.array.php

Una sugerencia: en lugar de utilizar for para recorrer arreglos, utilizá foreach, que es una construcción especial para esto.
Saludos.
  #3 (permalink)  
Antiguo 13/05/2006, 16:50
 
Fecha de Ingreso: mayo-2006
Mensajes: 59
Antigüedad: 11 años, 6 meses
Puntos: 0
Hola Notwen:

Veo que estas siempre a la way.

En este caso no utilizo foreach porque la rutina es mas compleja de lo que aparece en el mensaje y como vengo de otros lenguajes, estoy pez en PHP.

Pasando al problema. Efectivamente aTitulo es un arreglo.

Paso a explicar .....

Primero preparoo el formulario con varios campos repetidos un número indeterminado de veces($nI), por tanto monto un array para cada campo... aTitulo[], otro de aAutor[], etc...
For ($nI2 = 1; $nI2 <= $nI; $nI2 ++){;
echo 'Titulo:<input type="text" name=".aTitul[$nI2]." size="50"
value ="'.$aTitulOrg[$nI2].'">';
echo 'Texto:<input type="text" name=".aAutor[$nI2]." size="50" value ="'.$aAutorOrg[$nI2].'">';
}

La segunda parte es la que no entiendo su funcionamiento, que es recoger el valor de estos arreglos, a pesar de haberme leido el funcionamiento de los arrays.

Aqui se el numero de elementos que tienen todos los arreglos ($_POST['nReg']), por tanto intento leer cada uno de estos elementos, que tienen el mismo nombre pero difrente indice.

For ($nI1 = 1; $nI1 <= $_POST['nReg']; $nI1 ++){;
$cTitul = mysql_real_escape_string($_POST['aTitul[$nI1]']);
$cAutor = mysql_real_escape_string($_POST['aAutor[$nI1]']);

echo 'Titul '.$cTitul;
echo 'Texto '.$cTexto;
}

Como puedes observar ya utilizo la funcion (mysql_real_escape_string) que me enseñastes ayer.

Gracias
  #4 (permalink)  
Antiguo 13/05/2006, 16:53
 
Fecha de Ingreso: mayo-2006
Mensajes: 59
Antigüedad: 11 años, 6 meses
Puntos: 0
Perdon.
Tambien utice el formato
cAutor = mysql_real_escape_string($_POST[aAutor][$nI1]);
  #5 (permalink)  
Antiguo 15/05/2006, 05:33
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 11 años, 7 meses
Puntos: 2
Bueno, no entiendo porqué decis que con $_POST['nReg']) recuperas el número de elementos del arreglo. ¿nReg es un campo oculto del formulario donde guardas la cantidad de elementos?. Esto en principio no necesitas ese campo, basta con hacer un count($_POST['aAutor']). Además, si utilizas foreach, no es necesario que sepas el número de elementos.
Otra cosa: no necesitas darle un índice explícito a los campos de tu formulario, basta con declar su nombre como aAutor[] para que sea considerado como un arreglo. Además, creo que estas utilizando mal el operador de concatenación (.), no lo necesitas para definir el nombre de tus inputs:

Código PHP:
<?
for ($nI2 1$nI2 <= $nI$nI2 ++){;
echo 
'Titulo:<input type="text" name="aTitul[]" size="50" 
value ="'
.$aTitulOrg[$nI2].'">';
echo 
'Texto:<input type="text" name="aAutor[]" size="50" value ="'.$aAutorOrg[$nI2].'">';
}
La forma de recupera los valores sería asi:


Código PHP:
<?
//Con un for:
for ($nI1 0$nI1 count($_POST['aTitul']); $nI1 ++){
$cTitul mysql_real_escape_string($_POST['aTitul'][$nI1]);
$cAutor mysql_real_escape_string($_POST['aAutor'][$nI1]);
echo 
'Titul '.$cTitul;
echo 
'Texto '.$cTexto;
}

//Con un foreach:

foreach ($_POST['aTitul'] as $valor) {
$cTitul mysql_real_escape_string($valor);
}
?>
Saludos.
  #6 (permalink)  
Antiguo 15/05/2006, 10:20
 
Fecha de Ingreso: mayo-2006
Mensajes: 59
Antigüedad: 11 años, 6 meses
Puntos: 0
Ha sido una leccion magistral.

No solo porque me has aclarado la duda que tenia, sino porque me has enseñado mas cosas.

Te reitero mi gratitud.
  #7 (permalink)  
Antiguo 15/05/2006, 10:28
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 11 años, 7 meses
Puntos: 2
De nada, Pinyo22, me alegro de haberte ayudado en algo.
Saludos.
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:26.