FAQ
Hola a todos.

Tengo una consulta de la cual extraigo datos y los muestro en un campo
desplegable (SELECT).

Lo que necesito es mostrar varios SELECT en el mismo formulario mostrando los
mismos datos.

Mi pregunta es: ¿hay algún modo de hacer eso sin tener que ejecutar una
consulta por cada uno de ello?.

Si pongo:

-------------------------------------------
<?php
$serv= "select id, nombre from equipos where...";
$result_serv= pg_query($serv)
or die("serv ha fallado"); ?>
.....
<SELECT name="servDomi" disabled="true">
<OPTION selected=""></OPTION>
while($row_servDom= pg_fetch_array($result_serv))
{ ?>
<OPTION value="<?php echo $row_servDom["id"]; ?>"><?php echo
$row_servDom["nombre"]; ?></OPTION>
<?php } ?>
</SELECT>

---------------------------
Esto me muestra los datos en el SELECT, pero para hacer otro SELECT, ¿tengo
que volver a ejecutar pg_query() ?.

¿no se puede hacer de algún modo para no volver a ejecutar la consulta,
aprovechando los datos extraidos?.

----
Saludos.
Pablo.

Search Discussions

  • Carlos Niño Alonso at Jun 2, 2006 at 9:13 am
    En vez de enseñarlos, guardalos en una variable, y usala cuando necesites ese
    select.

    osase en vez de
    echo "tal tal y cual";
    haz
    $variable=$variable."tal tal y cual";

    y cuando la quieras usar:

    <select>$variable</select>


    Hola a todos.
    Tengo una consulta de la cual extraigo datos y los muestro en un campo
    desplegable (SELECT).
    Lo que necesito es mostrar varios SELECT en el mismo formulario mostrando los
    mismos datos.
    Mi pregunta es: ¿hay algún modo de hacer eso sin tener que ejecutar una
    consulta por cada uno de ello?.
    Si pongo:
    -------------------------------------------
    <?php
    $serv= "select id, nombre from equipos where...";
    $result_serv= pg_query($serv)
    or die("serv ha fallado"); ?>
    .....
    <SELECT name="servDomi" disabled="true">
    <OPTION selected=""></OPTION>
    while($row_servDom= pg_fetch_array($result_serv)) { ?>>
    <OPTION value="<?php echo $row_servDom["id"]; ?>"><?php echo
    $row_servDom["nombre"]; ?></OPTION>
    <?php } ?>
    </SELECT>
    ---------------------------
    Esto me muestra los datos en el SELECT, pero para hacer otro SELECT, ¿tengo
    que volver a ejecutar pg_query() ?.
    ¿no se puede hacer de algún modo para no volver a ejecutar la consulta,
    aprovechando los datos extraidos?.
    ----
    Saludos.
    Pablo.
  • Fco. Javier Sánchez-Ostiz Erviti at Jun 2, 2006 at 10:27 am
    Yo lo haría de la siguiente manera que creo que te servirá

    -------------------------------------------
    <?php
    $serv= "select id, nombre from equipos where...";
    $result_serv = pg_query($serv)
    or die("serv ha fallado");
    while( $row_servDom = pg_fetch_array($result_serv, PGSQL_ASSOC)){
    $matriz_datos [id] = $row_servDom[nombre];
    }

    function crear_select($matriz){
    $select .= "<SELECT name=\"servDomi\" disabled=\"true\">";
    foreach ($matriz as $clave => $valor)//Recorremos la matriz que pasamos como parámetro
    $select .= "<OPTION value=\"".$clave."\">".$valor."</OPTION>";
    $select .= "</SELECT>";
    return $select;
    }

    crear_select($matriz_datos);//Ahora puedo llamar a esta función allí donde haga falta
    ?>
    ---------------------------------------

    No sé si es esto lo que buscabas, un saludico desde Pamplona;

    Spielberg



    http://news.php.net/php.general.es/59029
  • Pablo Braulio at Jun 2, 2006 at 11:13 am
    El Viernes, 2 de Junio de 2006 12:26, Fco. Javier Sánchez-Ostiz Erviti
    escribió:
    Yo lo haría de la siguiente manera que creo que te servirá

    -------------------------------------------
    <?php
    $serv= "select id, nombre from equipos where...";
    $result_serv = pg_query($serv)
    or die("serv ha fallado");
    while( $row_servDom = pg_fetch_array($result_serv, PGSQL_ASSOC)){
    $matriz_datos [id] = $row_servDom[nombre];
    }

    function crear_select($matriz){
    $select .= "<SELECT name=\"servDomi\" disabled=\"true\">";
    foreach ($matriz as $clave => $valor)//Recorremos la matriz que pasamos
    como parámetro $select .= "<OPTION
    value=\"".$clave."\">".$valor."</OPTION>";
    $select .= "</SELECT>";
    return $select;
    }

    crear_select($matriz_datos);//Ahora puedo llamar a esta función allí donde
    haga falta ?>
    ---------------------------------------

    No sé si es esto lo que buscabas, un saludico desde Pamplona;

    Spielberg



    http://news.php.net/php.general.es/59029
    Podría servirme, gracias.

    --
    Saludos.
    Pablo.
  • Jonathan Lara at Jun 2, 2006 at 2:22 pm
    yo te recomiendo el uso de la siguiente función, todo tipo de resultado
    es almacenado como un array, así los puedo utilizar dentro del script
    muchas veces.

    function query($sql, &$filas, $conexion_bd="")
    {
    if (!$conexion_bd)
    global $conexion_bd; // rescatar el descriptor
    $result = pg_query($conexion_bd,$sql) or die("Error en el
    query:$sql <br>Error:".pg_last_error());
    if ((stristr($sql, "INSERT INTO")) || (stristr($sql, "UPDATE "))||
    (stristr($sql, "DELETE ")))
    return $result;
    else
    {
    if ($result)
    {
    $filas = @pg_num_rows($result);
    while($row = @pg_fetch_array($result))
    $array[] = $row;
    return $array;
    }
    else
    return false;
    }
    }

    Pablo Braulio escribió:
    El Viernes, 2 de Junio de 2006 12:26, Fco. Javier Sánchez-Ostiz Erviti
    escribió:
    Yo lo haría de la siguiente manera que creo que te servirá

    -------------------------------------------
    <?php
    $serv= "select id, nombre from equipos where...";
    $result_serv = pg_query($serv)
    or die("serv ha fallado");
    while( $row_servDom = pg_fetch_array($result_serv, PGSQL_ASSOC)){
    $matriz_datos [id] = $row_servDom[nombre];
    }

    function crear_select($matriz){
    $select .= "<SELECT name=\"servDomi\" disabled=\"true\">";
    foreach ($matriz as $clave => $valor)//Recorremos la matriz que pasamos
    como parámetro $select .= "<OPTION
    value=\"".$clave."\">".$valor."</OPTION>";
    $select .= "</SELECT>";
    return $select;
    }

    crear_select($matriz_datos);//Ahora puedo llamar a esta función allí donde
    haga falta ?>
    ---------------------------------------

    No sé si es esto lo que buscabas, un saludico desde Pamplona;

    Spielberg



    http://news.php.net/php.general.es/59029
    Podría servirme, gracias.
  • Pablo Braulio at Jun 2, 2006 at 2:58 pm

    El Viernes, 2 de Junio de 2006 16:22, Jonathan Lara escribió:
    yo te recomiendo el uso de la siguiente función, todo tipo de resultado
    es almacenado como un array, así los puedo utilizar dentro del script
    muchas veces.

    function query($sql,  &$filas, $conexion_bd="")
    {
    if (!$conexion_bd)
    global $conexion_bd; // rescatar el descriptor
    $result = pg_query($conexion_bd,$sql) or die("Error en el
    query:$sql  <br>Error:".pg_last_error());
    if ((stristr($sql, "INSERT INTO")) || (stristr($sql, "UPDATE "))||
    (stristr($sql, "DELETE ")))
    return $result;
    else
    {
    if ($result)
    {
    $filas = @pg_num_rows($result);
    while($row = @pg_fetch_array($result))
    $array[] = $row;
    return $array;
    }
    else
    return false;
    }
    }
    No acabo de acertar lo que dices.

    Tengo lo siguiente.

    / Selección de los servidores.
    $serv= "select id, nombre from equipos where empresa = ".$_COOKIE['empresa']."
    and servidor = 't'";
    $result_serv= pg_query($serv)
    or die("serv ha fallado");
    while($row_servDom= pg_fetch_array($result_serv))
    $servidores[] = $row_servDom; <-------------------
    return $servidores; <--------------------------------- No se si estas dos
    líneas están bien puestas.

    Luego lo que pretendo es hacer un while para que me cree los <OPTION> con
    valor de "id" y mostrando el "nombre".

    Espero haberme explicado bien.

    Si pongo

    <?php
    while($servidores) { ?>
    <OPTION value="<?php echo $servidores["id"]; ?>"><?php echo
    $servidores["nombre"]; ?></OPTION>

    Haciendo esto no funciona.

    ¿Sabrías decirme como puedo hacerlo?.
    --
    Saludos.
    Pablo.
  • Jonathan Lara at Jun 2, 2006 at 3:58 pm
    Pablo Braulio escribió:

    con mi funcion quedaria asi:

    // *** INICIO CODIGO ***
    $sql = "SELECT id, nombre FROM equipos WHERE empresa = '{$_COOKIE['empresa']}' AND servidor = 't'";
    $empresas = query($sql, $filas, $tu_descriptor_de_conexion);
    for ($c=0;$c<$filas;$c++)
    echo "<option value='{$empresas[$c]["id"]}'>{$empresas[$c]["nombre"]}</option>";
    // *** FIN CODIGO ***

    corto no?

    / Selección de los servidores.
    $serv= "select id, nombre from equipos where empresa = ".$_COOKIE['empresa']."
    and servidor = 't'";
    $result_serv= pg_query($serv)
    or die("serv ha fallado");
    while($row_servDom= pg_fetch_array($result_serv))
    $servidores[] = $row_servDom; <-------------------
    return $servidores; <--------------------------------- No se si estas dos
    líneas están bien puestas.

    Luego lo que pretendo es hacer un while para que me cree los <OPTION> con
    valor de "id" y mostrando el "nombre".

    Espero haberme explicado bien.

    Si pongo

    <?php
    while($servidores) { ?>
    <OPTION value="<?php echo $servidores["id"]; ?>"><?php echo
    $servidores["nombre"]; ?></OPTION>

    Haciendo esto no funciona.

    ¿Sabrías decirme como puedo hacerlo?.
  • Pablo Braulio at Jun 2, 2006 at 4:15 pm

    El Viernes, 2 de Junio de 2006 17:57, Jonathan Lara escribió:
    Pablo Braulio escribió:

    con mi funcion quedaria asi:

    // *** INICIO CODIGO ***
    $sql = "SELECT id, nombre FROM equipos WHERE empresa =
    '{$_COOKIE['empresa']}' AND servidor = 't'"; $empresas = query($sql,
    $filas, $tu_descriptor_de_conexion);
    for ($c=0;$c<$filas;$c++)
    echo "<option
    value='{$empresas[$c]["id"]}'>{$empresas[$c]["nombre"]}</option>"; // ***
    FIN CODIGO ***

    corto no?
    Si muy corto, pero ese no era el problema inicial.

    Con esto tengo los OPTION del SELECT.

    Pero el problema es que los datos de esta consulta, quedan "ocupados" y para
    poder usarlos en otra ocasión (otro SELECT, INPUT, etc.), tengo que volver a
    correr el query.

    Mi pregunta inicial era, ¿como puedo hacer para evitar tener que ejecutar la
    misma consulta?.
    --
    Saludos.
    Pablo.
  • Jonathan Lara at Jun 2, 2006 at 4:41 pm
    el array $empresas sigue definido, con el mismo contenido, simplemente
    lo recorres de nuevo

    Pablo Braulio escribió:
    El Viernes, 2 de Junio de 2006 17:57, Jonathan Lara escribió:
    Pablo Braulio escribió:

    con mi funcion quedaria asi:

    // *** INICIO CODIGO ***
    $sql = "SELECT id, nombre FROM equipos WHERE empresa =
    '{$_COOKIE['empresa']}' AND servidor = 't'"; $empresas = query($sql,
    $filas, $tu_descriptor_de_conexion);
    for ($c=0;$c<$filas;$c++)
    echo "<option
    value='{$empresas[$c]["id"]}'>{$empresas[$c]["nombre"]}</option>"; // ***
    FIN CODIGO ***

    corto no?
    Si muy corto, pero ese no era el problema inicial.

    Con esto tengo los OPTION del SELECT.

    Pero el problema es que los datos de esta consulta, quedan "ocupados" y para
    poder usarlos en otra ocasión (otro SELECT, INPUT, etc.), tengo que volver a
    correr el query.

    Mi pregunta inicial era, ¿como puedo hacer para evitar tener que ejecutar la
    misma consulta?.
  • Gustavo Pardo at Jun 2, 2006 at 7:30 pm

    Pablo Braulio escribió:
    El Viernes, 2 de Junio de 2006 17:57, Jonathan Lara escribió:
    Pablo Braulio escribió:

    con mi funcion quedaria asi:

    // *** INICIO CODIGO ***
    $sql = "SELECT id, nombre FROM equipos WHERE empresa =
    '{$_COOKIE['empresa']}' AND servidor = 't'"; $empresas = query($sql,
    $filas, $tu_descriptor_de_conexion);
    for ($c=0;$c<$filas;$c++)
    echo "<option
    value='{$empresas[$c]["id"]}'>{$empresas[$c]["nombre"]}</option>"; // ***
    FIN CODIGO ***

    corto no?

    Si muy corto, pero ese no era el problema inicial.

    Con esto tengo los OPTION del SELECT.

    Pero el problema es que los datos de esta consulta, quedan "ocupados" y para
    poder usarlos en otra ocasión (otro SELECT, INPUT, etc.), tengo que volver a
    correr el query.

    Mi pregunta inicial era, ¿como puedo hacer para evitar tener que ejecutar la
    misma consulta?.
    me prendo tarde al hilo, así que disculpas si meto la pata, pero lo que
    necesitás (evitar tener que ejecutar la misma consulta) se resuelve usando la
    función mysql_data_seek($resource, 0) (volvés al inicio del resultset sin
    ejecutar la consulta nuevamente) ¿era eso?
    saludos.
    --
    Gustavo Pardo
    Dataneu
    Desarrollo de Software, Sitios Web y Hosting
    Mail: dataneu@gmail.com
    Web: http://dataneu.com.ar/
    Tel.(54)(299)489-6880
    Centenario, NQN - Argentina

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedJun 2, '06 at 8:08a
activeJun 2, '06 at 7:30p
posts10
users5
websitephp.net

People

Translate

site design / logo © 2022 Grokbase