PHP - problemas con formulario dinamico

 
Vista:

problemas con formulario dinamico

Publicado por papalin (2 intervenciones) el 30/06/2008 15:24:47
hola, he escrito antes este problema pero creo que no lo he redactado del todo bien quizas, paso a detallarselos:

tengo un formulario en una pagina php, al mismo se le pueden agregar mas campos mediante dhtml, mi problema es que no puedo recibir los nuevos campos generados, yo antes hice una pagina de prueba y todo funciona perfectamente. Este es el codigo de mi formulario php:

#frm_consultassist_consultation

<form id="assist" action="script_sql/consulta_assist.php" method="GET" name="assist" >
<fieldset id="fs">
<br>
<select name="campo" id="campo">
<option value="vacio"><? echo txt_concept ?></option>
<optgroup label=" <? echo $nombre_tabla[0] ?>">
<? for ($i=0; $i<count($nombre_campo); $i++) {
if ($i > 0) {
if ($nombre_tabla[$i] != $nombre_tabla[$i-1])
{ ?>
</optgroup>
<optgroup label=" <? echo $nombre_tabla[$i] ?> "> <?
} }
?>
<option value="<?php echo $nombre_campo[$i];?>"> <? if (strlen($etiqueta_campo[$i])<=2){echo $nombre_campo[$i];} else {echo $etiqueta_campo[$i];}?></option>
<? } ?>
</optgroup>
</select>
<select name="comparador" id="comparador">
<option value="vacio"><? echo txt_comparator ?>     </option>
<option value="LIKE"> LIKE </option>
<option value="="> = </option>
<option value=">"> > </option>
<option value="<"> < </option>
<option value=">="> >= </option>
<option value="<="> <= </option>
<option value="BETWEEN"> BETWEEN </option>
</select>
<input id="texto" name="texto" type="text" />
<br>
<br>
</fieldset>
<input type="button" onClick="agregarHijo()" value="<? echo txt_add ?>" />
<input type="button" onClick="eliminarHijo()" value="<? echo txt_delete ?>" />
<input type="button" onClick="eliminarTodo()" value="<? echo txt_deleteall ?>" />
<input align="right" id="input" name="input" type="submit" value="<? echo txt_submit ?> " />
</form>


Bueno, ahora mi script para generar dinamicamente mi formulario es el siguiente:

#clonar.js

var cantidad = 0;

//esta funcion agrega la condicion "AND" u "OR" que desea el usuario, despues llama a la funcion clonar nodos para agregar el nuevo criterio

function agregarHijo()
{
cantidad++;
document.getElementById('fs').appendChild(document .createElement('br'));
var nuevohijo = document.createElement('select');
nuevohijo.name = "opcion"+cantidad;
var op1 = new Option("AND", "AND");
var op2 = new Option("OR", "OR");
nuevohijo.appendChild(op1);
nuevohijo.appendChild(op2);
document.getElementById('fs').appendChild(nuevohij o);
document.getElementById('fs').appendChild(document .createElement('br'));
clonarNodos();
}

//esta funcion elimina un criterio agregado, tiene el for porque debe eliminar lineas en blancoy los demas nodos que se agregaron
function eliminarHijo()
{
if (cantidad!=0)
{
for (i=0; i<11; i++)
{
var nuevohijo=document.getElementById('fs');
nuevohijo.removeChild(nuevohijo.lastChild);
}
cantidad--;
}
}

function eliminarTodo()
{
while (cantidad!=0)
{
for (i=0; i<11; i++)
{
var nuevohijo=document.getElementById('fs');
nuevohijo.removeChild(nuevohijo.lastChild);
}
cantidad--;
}
}

//esta funcion lo que hace es clonar el nodo en el que se encuantran los criterios de seleccion
function clonarNodos()
{
document.getElementById('fs').appendChild(document .createElement('br'));
var id=document.getElementById("campo");
var nuevos=id.cloneNode(true);
nuevos.style.id='campo'+cantidad;
nuevos.name='campo'+cantidad;
id=document.getElementById("fs");
id.appendChild(nuevos);
espaciar();
var id=document.getElementById("comparador");
var nuevos=id.cloneNode(true);
nuevos.style.id='comparador'+cantidad;
nuevos.name='comparador'+cantidad;
id=document.getElementById("fs");
id.appendChild(nuevos);
espaciar();
var id=document.getElementById("texto");
var nuevos=id.cloneNode(true);
nuevos.style.id='texto'+cantidad;
nuevos.name='texto'+cantidad;
nuevos.value="";
id=document.getElementById("fs");
id.appendChild(nuevos);
document.getElementById('fs').appendChild(document .createElement('br'));
document.getElementById('fs').appendChild(document .createElement('br'));

}

function espaciar() {
var espacio = document.createTextNode("u00a0");
document.getElementById("fs").appendChild(espacio) ;
}

Y finalmente donde recibo los datos es este script:

#consulta_assist.php

<?php
echo $_GET["campo"];
echo $_GET["comparador"];
echo $_GET["texto"];

$i=1;

while($_GET["campo"."$i"] != "")
{
echo $_GET["opcion"."$i"];
echo $_GET["campo"."$i"];
echo $_GET["comparador"."$i"];
echo $_GET["texto"."$i"];
$i++;
}

if (isset($campo1))
{
echo "definido";
}
else
{
echo "NO DEFINIDO";
}
if (isset($campo2))
{
echo "definido";
}
else
{
echo "NO DEFINIDO";
}
?>

Los ultimos "if" de este script son para ver si me define el campo o no, lo que hago es clonar el fieldset de mi formulario, pero el problema cuando quiero recoger los datos enviados esta en que parece que no me define los campos, es decir que no existen, pero el codigo javascript anda perfectamente, me genera los campos sin problemas.

Bueno, agradeceria enormemente si me pudieran ayudar, lo postee aqui porque en realidad no se si es problema de php o de javascript. muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problemas con formulario dinamico

Publicado por Diego Romero (1450 intervenciones) el 30/06/2008 18:48:56
Cuando creas un nuevo elemento de formulario, no le pongas números consecutivos al "name", simplemente haz algo como esto:

nuevos.name='texto[]';

De la misma manera en el HTML donde dice:

<input id="texto" name="texto" type="text" />

Cámbialo por:

<input id="texto" name="texto[]" type="text" />

Procede así con el resto de los elementos.

Los corchetes rectos hará que se cree un Array con índice numérico al momento de hacer POST. ¡Ah!, eso es otra cosa, cambia el method del formulario a POST y recibe los datos en PHP con $_POST.

Solo para probar, en el script consulta_assist.php pon esta sentencia:

echo "_POST: <br><pre>";
var_dump($_POST);
echo "</pre>";

Y te darás cuenta inmediatamente cómo puedes acceder a los datos enviados desde el formulario.

Por último, no estoy seguro que agrupar los elementos del formulario con <fieldset> sea lo adecuado, quizá debas hacerlo con <div>.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas con formulario dinamico

Publicado por papalin (2 intervenciones) el 30/06/2008 21:17:43
sigo con el mismo problema, solamente capturo el primer dato cargado, si queres te puedo enviar todos los scripts, si te interesa verlos en el sistema completo. gracias. saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas con formulario dinamico

Publicado por Diego Romero (1450 intervenciones) el 01/07/2008 03:16:59
Ok, envíame lo que tengas, en archivo .zip por favor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar