Ir al contenido



Foto

ibase_fetch_assoc para varios registros


  • Por favor identifícate para responder
3 respuestas en este tema

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.013 mensajes
  • LocationSanto Domingo

Escrito 23 junio 2019 - 06:50

hola como estan?

 

el siguiente codigo me funciona con un registro:


php
  1. <?php
  2. include_once 'fdb.php';
  3.  
  4. $query="select csid,clientes,direccion,dircom,notacom,telefono,rutacob,rutaserv from acmsub where csid='$cliente'";
  5. $result=ibase_query($conn,$query);
  6. if (!$result) {
  7. echo "no se puede mostrar datos desde la consulta: $query!";
  8. }
  9.  
  10. $arreglo= array();
  11.  
  12. while ($row = ibase_fetch_assoc($result)){
  13. $arreglo["items"] = array(
  14. 'CSID'=> $row['CSID'],
  15. 'CLIENTES'=> $row['CLIENTES'],
  16. 'DIRECCION'=> $row['DIRECCION'],
  17. 'DIRCOM'=> $row['DIRCOM'],
  18. 'NOTACOM'=> $row['NOTACOM'],
  19. 'TELEFONO'=> $row['TELEFONO'],
  20. 'RUTACOB'=> $row['RUTACOB'],
  21. 'RUTASERV'=> $row['RUTASERV']
  22. );
  23. }
  24. echo json_encode($arreglo);
  25. ?>

esto me devuelve esto:


javascript
  1. {"items":{"CSID":"0125","CLIENTES":"MULTIMAGEN DIAGNOSTICO","DIRECCION":"C\/FRANK FELIZ MIRANDA #56","DIRCOM":"CASI ESQ.TIRADENTES AL LADO DE LA REPOSTERIA NENE","NOTACOM":"18.470256%10-69.924075","TELEFONO":"809-338-0415","RUTACOB":"5","RUTASERV":"5"}}

como puedo hacerlo para una consulta de todos los registros y que me los devuelva dentro de items?

 

gracias de antemano

 

 

 

 

 

 

 


  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.257 mensajes
  • LocationArgentina

Escrito 25 junio 2019 - 10:49

Déjame ver si te entiendo.

¿Lo que deseas conseguir es algo como esto?

 

items: { {registro-1}, {registro-2}, ..., {registro-N} }

 

De ser asi, creo, no lo he probado, que necesitas hacer un array de array. Tu lo que estas haciendo es sobrescribir en la posición que ocupa "items". Deberías tener algo como:


php
  1. $items[$i] = array(
  2. 'campo-1'=> $row['campo-1'];
  3. ...
  4. 'campo-M'=> $row['campo-M'];
  5. );

Luego si ya puedes aplicar el json_encode(). Yo te sugeriría que busques una estructura así:


php
  1. $salida['cantidad'] = $cantidad_registros;
  2. $salida['items'] = $items;

Y apliques el json_encode() sobre $salida. De esta manera al leer el JSON tienes no sólo la lista de items con sus campos, sino que además sabes la cantidad de registros.

 

Espero que se entienda.

 

Saludos,


  • 0

#3 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.013 mensajes
  • LocationSanto Domingo

Escrito 07 julio 2019 - 04:45

Pues he tratado de ubicar lo que me dices, en el codigo de arriba, pero no tecibo nada diferente.

 

Me gustaria que ubicaras tu idea, dentro del codigo, para hacer las pruebas.


  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.257 mensajes
  • LocationArgentina

Escrito 07 julio 2019 - 06:47

He realizado un código de prueba, con un proyecto en el que estoy trabajando, como para que te hagas una idea. Disculpa que sea con mysqli en lugar de iinterbase pero es que no tengo habilitada por el momento esa extensión. Pero la idea es la misma.

 

Archivo: prueba_JSON.php

Se encarga de devolver un JSON con una estructura estilo:

 

{cantidad: nro,

items: {campo1: valor, ... campoN: valor}, .. , {campo1: valor, ..., campoN: valor}

}


javascript
  1. <?
  2. session_start();
  3. include('../conf/conf.inc.php');
  4. include('../conf/conf_db.inc.php');
  5. include("acceso.inc.php");
  6. include("validacion_usuario_admin.inc.php");
  7. include("fun.inc.php");
  8.  
  9. $recinst="SELECT
  10. institucion_id,
  11. institucion_codigo,
  12. institucion_nombre,
  13. tipo_responsable_id,
  14. tipo_doc_id,
  15. institucion_documento,
  16. provincia_id,
  17. ciudad_id,
  18. institucion_domicilio,
  19. institucion_cp,
  20. institucion_tel1,
  21. institucion_tel2,
  22. institucion_cel1,
  23. institucion_cel2,
  24. institucion_email1,
  25. institucion_email2,
  26. institucion_descripcion,
  27. institucion_estado,
  28. institucion_alta,
  29. institucion_usuario_alta,
  30. DATE_FORMAT(instituciones.institucion_alta,'%d/%m/%Y') AS f_alta
  31. FROM instituciones
  32. WHERE institucion_estado = '1'";
  33.  
  34. $qrecinst = $conn->query($recinst) or die(mostrar_error_consulta($conn). ' Error: recuperar.instituciones. SQL: '.$recinst);
  35.  
  36. if ($qrecinst->num_rows > 0){
  37. $salida['cantidad'] = $qrecinst->num_rows;
  38.  
  39. $items = [];
  40. $indice = -1;
  41. while ($row = $qrecinst->fetch_assoc()){
  42. $indice += 1;
  43.  
  44. $registro = array(
  45. 'id'=>$row['institucion_id'],
  46. 'cod'=>utf8_encode(strtoupper($row['institucion_codigo'])),
  47. 'nombre'=>utf8_encode(strtoupper($row['institucion_nombre'])),
  48. );
  49.  
  50. $items[$indice] = $registro;
  51. }
  52.  
  53. $salida['items'] = $items;
  54. } else {
  55. $salida['cantidad'] = 0;
  56. }
  57.  
  58. echo json_encode($salida);
  59. ?>

archivo: prueba_listar.php:

archivo php que consume el JSON.


php
  1. <?php
  2.  
  3. require_once('conf/conf.inc.php');
  4. require_once('conf/conf_db.inc.php');
  5. require_once('admin/acceso.inc.php');
  6. require_once('admin/validacion_usuario_admin.inc.php');
  7. require_once('admin/fun.inc.php');
  8. require_once('conf/vars.inc.php');
  9. ae_nocache();
  10.  
  11. ?><!DOCTYPE html>
  12. <html>
  13. <head>
  14. <meta charset="utf-8">
  15. <meta content="IE=edge" http-equiv="X-UA-Compatible">
  16. <title><?php echo$_paramSIS['html_header_title_nombre'];?></title>
  17. <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"><!-- Bootstrap 3.3.7 -->
  18. <link href="bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"><!-- Font Awesome -->
  19. <link href="bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet"><!-- Ionicons -->
  20. <link href="bower_components/Ionicons/css/ionicons.min.css" rel="stylesheet"><!-- Theme style -->
  21. <link href="dist/css/AdminLTE.min.css" rel="stylesheet"><!-- AdminLTE Skins. Choose a skin from the css/skins folder instead of downloading all of them to reduce the load. -->
  22. <link href="dist/css/skins/skin-blue.css" rel="stylesheet">
  23. <link href="dist/css/skins/custom.css" rel="stylesheet">
  24. <!-- Morris chart -->
  25. <link href="bower_components/morris.js/morris.css" rel="stylesheet"><!-- jvectormap -->
  26. <link href="bower_components/jvectormap/jquery-jvectormap.css" rel="stylesheet"><!-- Date Picker -->
  27.  
  28. <!-- 2019-06-18 Marcelo: estaban descomentadas -->
  29. <!-- <link href="bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css" rel="stylesheet"> --> <!-- Daterange picker -->
  30. <!-- <link href="bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker3.min.css" rel="stylesheet"> --> <!-- Daterange picker -->
  31.  
  32.  
  33. <!-- <link href="bower_components/bootstrap-daterangepicker/daterangepicker.css" rel="stylesheet"> --> <!-- bootstrap wysihtml5 - text editor -->
  34. <!--<link href="plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css" rel="stylesheet">--><!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
  35. <!-- DataTables -->
  36. <link rel="stylesheet" href="bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">
  37. <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
  38. <!--[if lt IE 9]>
  39. <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
  40. <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
  41. <![endif]-->
  42. <!-- Google Font -->
  43. <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic" rel="stylesheet">
  44. <link rel="icon" href="https://www.mater-salta.com/wp-content/themes/mater/favicon.png">
  45.  
  46. <!-- Estilo Tomografo -->
  47. <link rel="stylesheet" href="css/tablaconscroll.css">
  48.  
  49. <!-- jQuery 3 -->
  50. <script src="bower_components/jquery/dist/jquery.js"></script>
  51. <!--<script src="bower_components/jquery/dist/jquery-2.2.0.js"></script>-->
  52. <!-- jQuery UI 1.11.4 -->
  53. <script src="bower_components/jquery-ui/jquery-ui.js"></script>
  54. <link href="bower_components/jquery-ui/themes/base/jquery-ui.css" rel="stylesheet">
  55. <!-- Resolve conflict in jQuery UI tooltip with Bootstrap tooltip -->
  56. <script>
  57. $.widget.bridge('uibutton', $.ui.button);
  58. </script> <!-- Bootstrap 3.3.7 -->
  59. <script src="bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <!-- Morris.js charts -->
  60. <script src="bower_components/raphael/raphael.min.js"></script>
  61. <!--<script src="bower_components/morris.js/morris.min.js"></script>--> <!-- Sparkline -->
  62. <script src="bower_components/jquery-sparkline/dist/jquery.sparkline.min.js"></script> <!-- jvectormap -->
  63. <script src="plugins/jvectormap/jquery-jvectormap-1.2.2.min.js"></script>
  64. <script src="plugins/jvectormap/jquery-jvectormap-world-mill-en.js"></script> <!-- jQuery Knob Chart -->
  65. <script src="bower_components/jquery-knob/dist/jquery.knob.min.js"></script> <!-- daterangepicker -->
  66. <script src="bower_components/moment/min/moment.min.js"></script>
  67.  
  68. <!-- 2019-06-18 rangepicker estaba descomentado -->
  69. <!-- <script src="bower_components/bootstrap-daterangepicker/daterangepicker.js"></script> --> <!-- datepicker -->
  70. <!-- <script src="bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js"></script> --> <!-- Bootstrap WYSIHTML5 -->
  71. <!-- <script src="bower_components/bootstrap-datepicker/dist/locales/bootstrap-datepicker.es.min.js"></script> -->
  72.  
  73. <!-- DataTables -->
  74.  
  75. <!-- <script src="bower_components/datatables.net/js/jquery.dataTables.min.js"></script> -->
  76. <!-- <script src="bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script> -->
  77.  
  78. <!--<script src="plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js"></script>--> <!-- Slimscroll -->
  79. <script src="bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script> <!-- FastClick -->
  80. <script src="bower_components/fastclick/lib/fastclick.js"></script> <!-- AdminLTE App -->
  81. <script src="dist/js/adminlte.min.js"></script> <!-- AdminLTE dashboard demo (This is only for demo purposes) -->
  82. <!--<script src="dist/js/pages/dashboard.js"></script>--> <!-- AdminLTE for demo purposes -->
  83. <!--<script src="dist/js/demo.js"></script>-->
  84. <script src="js/commtool.js" type="text/javascript"></script>
  85. <script src="js/jquery/jquery.validate.js" type="text/javascript"></script>
  86. <script src="js/jquery/additional-methods.js" type="text/javascript"></script>
  87. <script src="js/jquery/jquery.bootpag.min.js" type="text/javascript"></script>
  88. <!-- <script src="js/jquery/jquery.turnos2.js" type="text/javascript"></script> -->
  89.  
  90. <!-- <link href="bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css" rel="stylesheet"> --> <!-- Daterange picker -->
  91. <!-- <link href="bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker3.min.css" rel="stylesheet"> --> <!-- Daterange picker -->
  92.  
  93. <script type="text/javascript">
  94. $(document).ready(function(){
  95. function listar(){
  96. $.ajax({
  97. type: 'GET',
  98. url: 'admin/prueba_JSON.php',
  99. dataType: "html",
  100. cache: false,
  101. beforeSend: function(){},
  102. complete: function(){},
  103. success: function(data){
  104. alert(data);
  105. var lista = $.parseJSON(data);
  106. if (lista.cantidad > 0){
  107. var i = 0;
  108. var lineas = '';
  109. for (i = 0; i < lista.cantidad; i++){
  110. lineas += '<p>' + lista.items[i]['nombre'] + '</p>';
  111. }
  112. $('#elementos').append(lineas);
  113. }
  114. }
  115. });
  116. }
  117.  
  118. $('#btn_listar').click(function(){
  119. listar();
  120. });
  121. });
  122. </script>
  123. </head>
  124. <body>
  125. <button name="btn_listar" id="btn_listar">Listar</button>
  126. <div name="elementos" id="elementos"></div>
  127. </body>
  128. </html>

Observa que se devuelve el JSON y lo decodifica. Luego se lee item a item con doble corchetes: [][] para acceder a cada campo.

La lista completa se presenta dentro de etiquetas párrafos, dentro de un div. Una vez que ya tienes tu JSON lo que hagas con el dependerá de tus necesidades.

 

Si bien yo hice uso de la semántica:


php
  1. $items[$indice] = $registro;

Debería ser legal incluso la construcción:


php
  1. $items[] = $registro;

Sin necesidad de tener que pasar indices. Es decir:


php
  1. while ($row = $consulta->fetch_assoc()){
  2. $registro = array(...);
  3. $items[] = $registro;
  4. }

Y hasta se podría prescindir de la variable $registro y directamente mandar el array() a  $items[].

 

Pero tengo que admitir que no he probado esa alternativa.

 

Espero que se entienda. El código de arriba funciona perfectamente, lo que tu deberías hacer es simplemente llevarlo a tus necesidades y empleando la extensión de interbase. Notarás que puse un alert() para comprobar que me devuelve el JSON, y que la estructura sea la esperada.

 

Saludos,


  • 0