Foros del Web » Programando para Internet » PHP »

PHP + JS + MySql Formulario dinámico

Estas en el tema de PHP + JS + MySql Formulario dinámico en el foro de PHP en Foros del Web. Hola, primero me presento. Soy Gonzalo, me registre hace poco porque empecé con flash y pensé que podría prestar ayuda a otros nuevos en eso ...
  #1 (permalink)  
Antiguo 10/11/2011, 13:03
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
PHP + JS + MySql Formulario dinámico

Hola, primero me presento. Soy Gonzalo, me registre hace poco porque empecé con flash y pensé que podría prestar ayuda a otros nuevos en eso ya que lo iba entendiendo bastante bien y ahora soy yo el que necesita ayuda.

Intentaré explicarme lo mejor posible y poner código, tengo como 5 archivos, y largos así que no puedo ponerlo todo jeje.

Estoy creando un formulario bastante dinámico:
En primer lugar tengo dos selects dependientes, al seleccionar una cosa en el primero me carga el segundo. El contenido de ambos desde la base de datos pero con la DB no tengo ningun problema. Esto me funcionaba muy bien.

La cosa se complicó cuando decidí poner un botón para añadir campos (añadir más selects como estos), para que el usuario pueda meter más productos. De momento lo estoy llevando bastante bien con unos códigos que encontre por Internet de AJAX, pero me he encontrado con un PROBLEMA:

En un archivo PHP tengo un script en el head donde me genera texto para la página mediante innerHTML:
Código PHP:
    nuevaCelda.innerHTML="<td><?php generaPaises("+posicionCampo+");?></td>";
    nuevaCelda=nuevaFila.insertCell(-1);
    nuevaCelda.innerHTML="<td><select disabled='disabled' name='piezas"+posicionCampo+"' id='piezas"+posicionCampo+"'><option value='0'>Selecciona opci&oacute;n...</option></select></td>";
    nuevaCelda=nuevaFila.insertCell(-1);
    nuevaCelda.innerHTML="<td><div id='pepe"+posicionCampo+"'>"+posicionCampo+"</div></td>";
Esto es parte del código. Como veis, en la primera línea introduzco una llamada a una función, generaPaises(variable), pero no me funciona bien, el PROBLEMA está identificado.
Si en lugar de poner "+posicionCampo+" pongo el número manualmente todo va correcto, la cosa es que no me reconoce "+posicionCampo+" como una variable, en el resto de casos sí, eso es lo gracioso. Lo sé porque puse un echo y me imprimía literalmente y probe cambiando por un numero y me funcionaba.

¿Hay alguna manera de solucionarlo? De hacer que el código que genere el script lleve el número de la variable en la función en vez de que lo reconozca como texto. Mi función generarPaises() está así:
Código PHP:
function generaPaises($num)
{     
    
conectar();
    
$consulta=mysql_query("SELECT id, opcion FROM lista_catalogos");
    
desconectar();

    
// Voy imprimiendo el primer select compuesto por los paises
    
echo "<select name='catalogos".$num."' id='catalogos".$num."' onChange='cargaContenido(this.id)'>";
    echo 
"<option value='0'>Elige un catálogo</option>";
    while(
$registro=mysql_fetch_row($consulta))
    {
        echo 
"<option value='".$registro[0]."'>".$registro[1]."</option>";
    }
    echo 
"</select>".$num."";

Perdón por la parrafada, pero no quería explcarme de menos y alomejor me pase, jeje, muchas gracias.
  #2 (permalink)  
Antiguo 10/11/2011, 13:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: PHP + JS + MySql Formulario dinámico

Recuerda algo escencial, PHP y Javascript no se ejecutan al mismo tiempo, PHP es procesado en el servidor, por lo cual la variable posicionCampo nunca se va a transmitir a PHP.

Tienes dos formas de solucionar esto, la primera es que tengas el select con los paises con un ID dummy, y desde Javascript tomarlo, clonarlo e insertarlo en la celda que quieres.

La otra es crear desde PHP el select y usando AJAX inyectarlo al DOM de tu documento, al momento de agregar la nueva fila.

Ambas soluciones requieren de uso de JS para inyectar el resultado en el html destino, usa la que más te sientas comodo.

Yo en particular en situaciones así, uso mejor JS para clonar los elementos y agregarlos al documento HTML, así no saturo el server con peticiones que puedo resolver en JS.
  #3 (permalink)  
Antiguo 10/11/2011, 13:16
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
Respuesta: PHP + JS + MySql Formulario dinámico

Muchas gracias, es que no controlo mucho de js y php estoy más familiarizado pero no soy un pro. Si que se que el php se ejecuta en el servidor y el javascript en el cliente, etc, pero el lenguaje en sí no.

Pero lo he solucionado!!
Código PHP:
nuevaCelda.innerHTML="<td><?php generaPaises('"+posicionCampo+"');?></td>";
    nuevaCelda=nuevaFila.insertCell(-1);
    nuevaCelda.innerHTML="<td><select disabled='disabled' name='piezas"+posicionCampo+"' id='piezas"+posicionCampo+"'><option value='0'>Selecciona opci&oacute;n...</option></select></td>";
    nuevaCelda=nuevaFila.insertCell(-1);
    nuevaCelda.innerHTML="<td><div id='pepe"+posicionCampo+"'>"+posicionCampo+"</div></td>";
Así funciona a la perfección, me va todo! Para el que no lo note he puesto unas comillas simples (') antes de las comillas dobles donde me daba el problema.
Muchas gracias, si alguien quiere los archivos de todo que me avise, pero la mitad no es de mi autoría, la otra mitad sí y muy contento estoy!
  #4 (permalink)  
Antiguo 10/11/2011, 13:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: PHP + JS + MySql Formulario dinámico

Interesante tu solución, y sirve ya que estas pasando como tal la cadena para que sea evaluada por javascript al final +1

Etiquetas: ajax, dinamicos, select, 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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:22.