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>
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
}
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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP