entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

PHP Formulario de edición. Cómo armar 3 combos desde la misma tabla?

Hola!
Explico la pregunta:
Tengo 2 tablas: [finales] y [profesores]
Debo hacer un formulario para modificar datos de la tabla FINALES, cambiando los profesores citados para cada tribunal.
1- Cuál es la forma correcta de armar el select del formulario?
2- Cómo identifico el profesor que trae el REQUEST en el select?

Desde ya muchas gracias

El formulario sería algo así:
(imagen que no carga removida)

Supongamos que quiero modificar el vocal2, pero quiero dejar el presidente que está en la tabla finales sin cambios.
Cómo los identifico al armar el select?

Muchas Gracias.
Saludos

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola @top21tk,

entiendo que los datos de las combos para Presidente, vocal1 y vocal2 se toman de la misma tabla. Por otro lado tendrás una tabla para guardar los Finales con una forma parecida a:

Tabla Finales

id
id_final
id_materia
fecha
mesa
id_presidente
id_vocal1
id_vocal2

Bastaría en tonces con que cada input de tipo select en el formulario tenga un nombre distinto, como por ejemplo presidente, vocal1 y vocal2, para que cuando recibas los datos del formaulario por GET o por POST, sepas a qué campo de la tabla Finales corresponde cada dato.

Para cargar los datos en el formulario de edición, leerás la tabla Profesores todos los datos y por ejemplo para la combo "presidente" pondrás como selected=true al que tenga el valor en id_presidente de la tabla de Finales.

Entre las validaciones que deberías hacer, habría que validar que no se repita ningún valor en las 3 combo, ya que supongo que el presidente no podrá ser a la vez el primer vocal, etc.

Saludos cordiales!

0voto

top21tk comentado

Sí. Eso es lo que quiero.
Lo que pasa es que para cada campo (presidente, vocal1, vocal2) hago una consulta (o sea 3 consultas). Debería ser así?
Pienso que no. Debo hacer una sola consulta a la tabla profesores y despues tomar los datos de esa consutla....

Es así?

Ahora el estoy armando el select así:

    <select name="prof1">
        <option value=0>Presidente</option>
          <?php
// datos de la consulta a la tabla profesores
            while($row2 = mysql_fetch_array($result2)) {
    ?>
    <option value="<?=$row2["id"]?>"
    <?php
//Prof1 viene de la consulta de la tabla finales (es el presidente)
    if ($row["prof1"] = $row2["id"]){
    echo "selected>";
    }
   echo $row2["PROFESORES"]."</option>";
    }
    ?>

No funciona. Queda seleccionado el último profesor de la consulta profesores.

Desde ya muchas gracias por la paciencia.
Un abrazo.

0voto

Leonardo-Tadei comentado

Si hacés tres consultas exactamente iguales, el servidor MySQL las responderá desde su caché, con lo que no se consumen tantos recursos como parece.

Por otra parte, solo si los datos son pocos, podrías hacer una sola consulta, cargarla en un vector, y luego usar los datos en ese vector para generar las combo HTML... esto consume RAM para contener el vector.

Hacer una sola consulta y usar un vector para almacenar la respuesta no es buena idea si por ejemplo creés que va a haber en algún momento miles de Profesores. HAcer en cambio 3 consultas iguales no consumirá más RAM ya sea que tengas 10 Profesores o 5000.

Si me preguntás mi opinión, yo haría las 3 consultas...

Podrías probar ambas formas y con la función

microtime();

y con la función

memory_get_usage();

ir viendo cuanto tiempo tarda y cuánta memoria consume... a mi me gusta comprobar las cosas experimentalmente siempre que puedo y no depender de opiniones subjetivas ;-)

http://php.net/manual/en/function.microtime.php
http://php.net/manual/en/function.memory-get-usage.php

0voto

top21tk comentado

Gracias Leonardo.
Lo soluciné. Como es muy tarde publicaré el código en unas horas...
Abrazo...

Me estoy hciendo fan del sitio Muy útil

0voto

top21tk comentado

Solución:

  • Hice 4 consultas: 1 a la tabla finales y 3 a la tabla profesores

El select lo armé así:

<select name="prof1">
<option value=0>Presidente</option>
      <?php
       while($row2 = mysql_fetch_array($result2)){
     echo "<option value=".$row["prof1"];
            if ($row2["id"] == $row["prof1"]){
            echo " selected";
            }
     echo ">". $row2["PROFESORES"]."</option>";
    }
    ?>
</select>

0voto

Leonardo-Tadei comentado

Me alegra que te haya servido!

0voto

Peter comentado

No queda muy claro cual fue la solución, si la de Leonardo o la que comentas. Si la respuesta correcta es la que tu comentas, mejor publicala como respuesta y márcala como correcta.

Saludos.

1voto

Leonardo-Tadei comentado

Hola @Peter,

si no entiendo mal, lo que @top21tk comparte es la implementación que usó de la solución que le propuse...

Saludos cordiales!

0voto

Peter comentado

Ahora si queda claro :)

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta