TransWikia.com

Cargar datos alojados en sql, a 2 tablas en php

Stack Overflow en español Asked by Daxtrox on December 22, 2021

necesito cargar datos en 2 tablas, los datos están en la misma tabla alojada en sql server.

Les dejo las lineas de codigo que estoy implementando pero tengo problemas para visualizar los datos

    <body>
    <table>
    <tr>
        <td>IdUsuario</td>
        <td>[Cédula]</td>
        <td>[Nombre]</td>
        
    </tr>
    <?php if(!$res) {?>
    <tr>
         <td colspan="6">No hay datos para mostrar</td>
    </tr>
    <?php }
    else {
    while($row=sqlsrv_fetch_array($res)) {?>
    <tr>
         <td><?php echo $row['idUsuario'];?></td>
         <td><?php echo $row['Cedula'];?></td>
         <td><?php echo $row['Nombre'];?></td>
        
    </tr>
   
</table>

<table>
    <tr>
        
        <td>[Apellido]</td>
        <td>[Teléfono]</td>
        <td>[Email]</td>
    </tr>
    <?php if(!$res) {?>
    <tr>
         <td colspan="6">No hay datos para mostrar</td>
    </tr>
    <?php }
    else {
    while($row=sqlsrv_fetch_array($res)) {?>
    <tr>
         
         <td><?php echo $row['Apellido'];?></td>
         <td><?php echo $row['Telefono'];?></td>
         <td><?php echo $row['Email'];?></td>
    </tr>
    <?php
    }//Fin while
    }//Fin if
    sqlsrv_close($con); ?>
</table>
        
    
    </body>
    </html>

2 Answers

Para poder usar el mismo juego de resultados dos veces, debes prepararlo desde la consulta, enviando un arreglo de opciones para crear un cursor que te permita "navegar" entre los resultados:

// Suponiendo que no tienes filtros
$query = "SELECT * FROM tabla";
// Vacío porque no hay filtros
$params = [];
// Crear cursor para poder manipular el apuntador en conjunto de resultados
$options = ["Scrollable" => SQLSRV_CURSOR_CLIENT_BUFFERED];
$res = sqlsrv_query($conn, $query, $params, $options);

// Recorres los resultados por primera vez
while($row=sqlsrv_fetch_array($res)) {
    // Aquí creas la primera tabla
}

En este punto, se terminaron los resultados y no puedes recorrer nuevamente el conjunto hasta que coloques el apuntador nuevamente al inicio:

// Ahora reinicia el apuntador del juego de resultados
sqlsrv_fetch($res, SQLSRV_SCROLL_ABSOLUTE, -1);

// Otra vez recorres los resultados
while($row=sqlsrv_fetch_array($res)) {
    // Aquí creas la segunda tabla
}

Referencias:

Answered by Triby on December 22, 2021

El problema es que no puedes hacer esto dos veces:

while($row=sqlsrv_fetch_array($res)) {

Es preciso entender una cosa cuando trabajas con resultados de consultas: lo que obtienes (en $res) es un conjunto de resultados, algo así como un puntero que luego puedes recorrer mediante alguno de los métodos fetch_. Lo que ocurre cuando aplicas esto: while($row=sqlsrv_fetch_array($res)) { es que mueves el puntero dentro del bucle para obtener los datos desde la primera hasta la última fila y cuando el bucle termina ya no hay más datos en el puntero. De modo que cuando intentas un segundo while para construir la segunda tabla, ya no hay datos en $res, porque fueron leídos en el primer while.

Conociendo esto, puedes construir dos variables distintas dentro de un único while y luego agregar cada variable en su tabla respectiva.

Por ejemplo:

<html>
    <body>
    <?php
    /*
        La mezcla de código PHP/HTML es poco flexible
        para casos como este no ayuda para nada
        vamos a trabajar las tablas con variables
        dentro de un único bloque PHP
        el código queda más claro y es más flexible
        Para ello creamos de entrada dos variables para cada tabla
    */          
    $tableOne=
    "<table>
        <tr>
            <td>IdUsuario</td>
            <td>[Cédula]</td>
            <td>[Nombre]</td>
            
        </tr>";
        
    $tableTwo=
    "<table>
        <tr>
            
            <td>[Apellido]</td>
            <td>[Teléfono]</td>
            <td>[Email]</td>
        </tr>";     
    if(!$res) {
        /*
            En ese caso $noData servirá para las dos tablas
        */
        $noData=
        "<tr>
             <td colspan="3">No hay datos para mostrar</td>
        </tr>";
        /*
            Agregamos $noData a ambas tablas y cerramos
        */
        $tableOne.="$noData</table>";
        $tableTwo.="$noData</table>";
        
    }
    else {
        /* Creamos dos variables para recoger las filas por separado*/
        $rowsOne="";
        $rowsTwo="";
        while($row=sqlsrv_fetch_array($res)) {
            /*
                Estamos concatenando entre comillas dobles
                por lo que es permitido en este caso referirse a los
                índices de arrays sin comillas
            */
            $rowsOne.="
            <tr>
                 <td>$row[idUsuario]</td>
                 <td>$row[Cedula]</td>
                 <td>$row[Nombre]</td>
            </tr>";
            $rowsTwo.="
            <tr>
                 <td>$row[Apellido]</td>
                 <td>$row[Telefono]</td>
                 <td>$row[Email]</td>
            </tr>";
        }
        /*
            Agregamos cada grupo de filas a su tabla y cerramos
        */
        $tableOne.="$rowsOne</table>";
        $tableTwo.="$rowsTwo</table>";
    }
    sqlsrv_close($con);
    /*
        Imprimimos ambas tablas
    */
    echo $tableOne;
    echo $tableTwo; 
    ?>
    </body>
</html>

Así debería funcionar, salvo otros errores en tu código.

Answered by A. Cedano on December 22, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP