Buscador
YoReparo.com La Web 

Regístrate gratis para participar de los foros, o si ya estás registrado haz login.

PHP - Tratar gran cantidad de datos de formulario

comentario del autor Jue Jun 05, 2008 5:51 pm
   
Hola a todos.
Voy al grano

Tengo un formulario generado en php que devuelve una lista de items con ciertos parametros.
alpha1
beta1
gamma1

para el articulo 1

alpha2
beta2
gamma2

para el articulo 2

etcetera

basicamente se recuperan por http_post_vars["xxx"]

El punto es que quiero usar una funcion que vaya item por item examinando los datos para cargarlos a una base de datos. Las funciones iterativas pueden generar nombres como ${'alpha'.$id} pero no parece que puedan crearse variables de array con este metodo como

$'http_get_vars["alpha'.$id'"]' donde id es una variable incrementada para tratar la id del item y cargar los datos de cada item sucesivamente al la DB.

Es decir que se pueden crear nombres de variables a partir de cadenas pero no me funciona para arrays asociativos. PHP parece no reconocer la variable creada o llamada dinamicamente.

Si alguien me puede dar una pista de como tratar estos datos del formulario.

Gracias
Slds

Luis

Ajat

Reputación

asistió a la solución Lun Jun 16, 2008 8:12 pm
   
La verdad tenés que explicar mejor, pega código que es nuestro lenguage y vemos enseguida que queres y que haces, te comento dos cosas, primero http_get_vars fué dejada de utilizar hace 6 años por lo menos no puedo entender que lee la gente que todavía lo siguen utilizando a partir de PHP4 es $_GET o $_POST las variables a utilizar.

En PHP podes enviar variables en forma de "array" la forma de hacerlo es utilizando el mismo nombre en los campos del formulario con el agregado [] por ejemplo <input type="datos[]" value="1"> <input type="datos[]" value="2"> de esta forma en PHP lo vas a recuperar como un array con indices numericos repetitivos:

$_POST['datos'][0] => 1
$_POST['datos'][1] => 2

Por supuesto si en vez de eso queres enviar el indice ya sea entero o string lo especificas por ejemplo datos['clave_xx'].

Ahh en el ejemplo lo enviamos via post sino sería $_GET...

Por otra parte si queres "cargar" el formulario online debes utilizar Ajax, basicamente enviar consultas por cada campo y rellenar con las respuesta.

Espero que te ayude, avisame si necesitas algo más, en ese caso no olvides ampliar la consulta.

Saludos,
Martín

yoreparodr

Reputación

comentario del autor Dom Jul 06, 2008 8:25 pm
   
Como se puede ver en el codigo siguiente, php genera campos de formulario con nombres parametrados
availability.$id
modifyprice.$id
newprice.$id

y al ejecutarse, se van generando en html nombres de campos de formulario que seran reenviados a un archivo php para su tratamiento

item1
avalability1
modifyprice1
newprice1


item2
avalability2
modifyprice2
newprice2

etc

que son los atributos del item.$id

el punto es como procesar estos nombres de variables que son reenviados al archivo php en el array asociativo $_post y separalos en una iteracion de manera a que la iteracion vaya actualizando la DB los valores item por item
Pense en crear nombres de variables a partir de cadenas generando los nombres con los {} como sigue ${'variable'.$id} como lo detalle anteriormente pero dentro de un array eso no es posible

Aqui debajo el codigo PHP que genera los elementos y luego parte del HTML generado

PHP PHP PHP PHP
<?php
function vegshowup( $Id, $Veg_name, $Description, $Unitprice, $Avl)
{
// Definition of cell for showupbox format and elements l
echo '
<tr>
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFF99" style="border-bottom:1px dotted black">
<tr>
<td width="300"><table width="100%" border="0" style="vertical-align:top" cellspacing="0" cellpadding="3">
<tr>
<td><strong>'.$Id.' '.$Veg_name.'</strong></td>
</tr>
<tr>
<td>Descripcion:
<br/><span align="center">'.$Description.'</span></td>
</tr>
</table></td>
<td width="300" style="border-left:1px dotted black ; border-right:1px dotted black">
<table width="100%" border="0" cellspacing="0" cellpadding="4">
<tr>
<td><div align="right">Precio actual :</div></td>
<td style="font-size:24px" > <div align="center">'.$Unitprice.'</div></td>
</tr>
<tr>
<td><div align="right">Modificar: </div></td>
<td >
<input type="checkbox" name="modifyprice'.$Id.'" value="checkbox" />
<label>Si: </label></td>
</tr>
<tr>
<td ><div align="right">Nuevo Precio: </div></td>
<td><input type="text" name="newprice'.$Id.'" /> </td>
</tr>
</table></td>
<td style="padding:10px"><p align="center">Disponible:'.$Avl.'<br />

<select style="font-size:22px; font-weight:bold" name="availability'.$Id.'">
<option'; if($Avl){echo' selected';} else{};echo'>SI</option>
<option'; if(!$Avl){echo' selected';} else{};echo'>NO</option>
</select>
</label></td>
</tr>
</table>
</td>
</tr>';


HTML HTML HTML HTML

<table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFF99" style="border-bottom:1px dotted black">
<tr>
<td width="300"><table width="100%" border="0" style="vertical-align:top" cellspacing="0" cellpadding="3">
<tr>
<td><strong>1 Acelga</strong></td>
</tr>
<tr>
<td>Descripcion:
<br/><span align="center">Se fracciona por atado de 37 kilos</span></td>
</tr>
</table></td>
<td width="300" style="border-left:1px dotted black ; border-right:1px dotted black">
<table width="100%" border="0" cellspacing="0" cellpadding="4">
<tr>
<td><div align="right">Precio actual :</div></td>
<td style="font-size:24px" > <div align="center">1</div></td>
</tr>
<tr>
<td><div align="right">Modificar: </div></td>
<td >
<input type="checkbox" name="modifyprice1" value="checkbox" />
<label>Si: </label></td>
</tr>
<tr>
<td ><div align="right">Nuevo Precio: </div></td>
<td><input type="text" name="newprice1" /> </td>
</tr>


</table></td>
<td style="padding:10px"><p align="center">Disponible:0<br />
<select style="font-size:22px; font-weight:bold" name="availability1">
<option>SI</option>
<option selected>NO</option>
</select>
</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFF99" style="border-bottom:1px dotted black">
<tr>
<td width="300"><table width="100%" border="0" style="vertical-align:top" cellspacing="0" cellpadding="3">
<tr>
<td><strong>2 Akusay</strong></td>
</tr>
<tr>
<td>Descripcion:
<br/><span align="center">El precio es por kilogramo. Se vende por unidad. Cada unidad pesa entre 500 y 700g.</span></td>
</tr>
</table></td>
<td width="300" style="border-left:1px dotted black ; border-right:1px dotted black">
<table width="100%" border="0" cellspacing="0" cellpadding="4">
<tr>
<td><div align="right">Precio actual :</div></td>
<td style="font-size:24px" > <div align="center">3</div></td>
</tr>
<tr>
<td><div align="right">Modificar: </div></td>
<td >
<input type="checkbox" name="modifyprice2" value="checkbox" />

<label>Si: </label></td>
</tr>
<tr>
<td ><div align="right">Nuevo Precio: </div></td>
<td><input type="text" name="newprice2" /> </td>
</tr>
</table></td>
<td style="padding:10px"><p align="center">Disponible:1<br />
<select style="font-size:22px; font-weight:bold" name="availability2">
<option selected>SI</option>
<option>NO</option>
</select>
</label></td>
</tr>

</table>

Ajat

Reputación

solución Mar Jul 15, 2008 4:06 am
   
Hola,

Te comento de nuevo, porque no puedo ver cual es el impedimento, si generas el html de esta forma:
Código:
<input type="item[]" value="xxx">
<input type="avalability[]" value="xxx">
<input type="modifyprice[]" value="xxx">
<input type="newprice[]" value="xxx">


Vas a obtener un array así:
Código:
foreach ($_POST['item'] as key => $value) {

     print "$value;${_POST['avalability'][$key]};${_POST['modifyprice'][$key]};${_POST['newprice'][$key]}\n";
}


Por supuesto esto va a ser correcto dependiendo del orden de item, avalability, modifyprice, newprice.

En caso de que quieras tener más seguridad y ya que estas creando indices, asignaselo y vas a estar 100% seguro:
Código:
<input type="item[1]" value="xxx">
<input type="avalability[1]" value="xxx">
<input type="modifyprice[1]" value="xxx">
<input type="newprice[1]" value="xxx">

<input type="item[2]" value="xxx">
<input type="avalability[2]" value="xxx">
<input type="modifyprice[2]" value="xxx">
<input type="newprice[2]" value="xxx">

o para que quede igual que el ejemplo de abajo

<input type="1[item]" value="xxx">
<input type="1[avalability]" value="xxx">
<input type="1[modifyprice]" value="xxx">
<input type="1[newprice]" value="xxx">

y

<input type="2[item]" value="xxx">
<input type="2[avalability]" value="xxx">
<input type="2[modifyprice]" value="xxx">
<input type="2[newprice]" value="xxx">


Si de todas forma quieres seguir utilizando el método que comentas vas a tener que parsear cada nombre para extraer el indice por ejemplo:
Código:
$datos = array();
foreach ($_POST as $key => $value) {
     if (preg_match('!(\w+)(\d+)!', $key, $match)) {
       $datos[$match[2]][$match[1]]=$value;
    }
}


te queda algo como:
Código:
array(
    [1] => array(
          item => xxxx,
          avalability => xxxx,
          modifyprice => xxxxx,
          newprice => xxxx
     )
    [2] => array(
          item => xxxx,
          avalability => xxxx,
          modifyprice => xxxxx,
          newprice => xxxx
     )

)


La verdad que hay varias forma de armar la respuesta es más a criterio de lo que prefieras.

Si no es a lo que te referis amplia un poco más.

Saludos,
Martín

yoreparodr

Reputación

comentario del autor Mie Jul 16, 2008 2:46 pm
   
Te agradezco mucho por tomarte el tiempo de responderme. Voy a examinar bien esto. De hecho no sabia que podia declarar en el tipo de input atributos que definan la estructura del array Post. Esto es muy valioso para manejar datos generados por bucles que se reenvian en formularios a php.
Luego te contare como me fue
Slds
Luis

Ajat

Reputación



Hacer una pregunta

Boletín de Noticias

Reciba noticias de tecnología, tips de reparación y ofertas exclusivas.



Reglamento / P+F

Foros

Miembros / Expertos