elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  problema al pasar indexes de json a la vista con foreach
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema al pasar indexes de json a la vista con foreach  (Leído 3,914 veces)
geshiro

Desconectado Desconectado

Mensajes: 178


Ver Perfil
problema al pasar indexes de json a la vista con foreach
« en: 15 Agosto 2016, 18:27 pm »

bueno mi error es que me da  invalid argument supplied for foreach() y no me esta accediento bien al índice del arreglo, estoy usando codeigniter pero como pudiera arreglar ese error mi json del la función del controlador es
Código
  1. [{"id":"1","sección":"Inventario","data":[{"id":"11","icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/items.png","value":"Productos","seccion_id":"1","url":"http:\/\/localhost\/storeLTE\/inventario\/product"},{"id":"14","icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/employees.png","value":"Provedores","seccion_id":"1","url":"http:\/\/localhost\/storeLTE\/provedor\/provedor"}]},{"id":"2","sección":"Compras","data":[{"id":"22","icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/suppliers.png","value":"Compras","seccion_id":"2","url":"http:\/\/localhost\/storeLTE\/compras\/compras"}]}]

controller

Código
  1.  
  2. public function getModules($id_module){
  3.    if($this->session->userdata('log')){
  4.        $data = $this->session->userdata('log');
  5.        $menu = array();
  6.        $seccions = $this->module->get_rows();
  7.        foreach ($seccions as $index => $sección){
  8.            $modules = $this->module->query("SELECT CONCAT('".$sección['id']."',storelte_modulo.id) AS id,CONCAT('".base_url('assets/img/sidebar')."','/',storelte_modulo.icon) as icon, storelte_modulo.modulo AS value,storelte_modulo.seccion_id,CONCAT('".base_url()."',storelte_modulo.url) AS  url FROM storelte_modulo INNER JOIN storelte_modulo_perfil ON  storelte_modulo_perfil.modulo_id = storelte_modulo.id WHERE seccion_id = $sección[id] AND storelte_modulo_perfil.perfiles_id = $data[id] AND storelte_modulo_perfil.STATUS = 1");
  9.            $seccions[$index]['data']= $modules;
  10.            if (!count($seccions[$index]['data']))
  11.                unset($seccions[$index]);
  12.        }
  13.        foreach ($seccions as $item)
  14.            array_push($menu,$item);
  15.  
  16.        $this->json($menu);
  17.    }
  18. }
  19.  

model

Código
  1. public function get_rows(){
  2.        $this->db->select('id,sección');
  3.        $this->db->from('storelte_seccion');
  4.        return $this->db->get()->result_array();
  5.    }
  6.  
  7.    public function query($query){
  8.        return
  9.  

Código
  1. <div class="row">
  2. <h3 class="text-center">Welcome to storeLTE, click a module below to get started!</h3>
  3. <div class="home_module_list">
  4.    <div class="module_item">
  5.        <?php foreach ($seccions as $session) { ?>
  6.          <div class="module_item" title="<?= $session['value'];?>">
  7.            <a href="<?= $session['url']; ?>"><img src="<?= $session['icon']; ?>"/></a>
  8.            <a href="<?= $session['url']; ?>"><?= $session['value']?></a>
  9.        </div>
  10.        <?php } ?>
  11.    </div>
  12. </div>
  13. </div>
  14.  


En línea

zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: problema al pasar indexes de json a la vista con foreach
« Respuesta #1 en: 15 Agosto 2016, 19:11 pm »

Hola.
¿Estás intentando usar un JSON en conjunto con un foreach?

Según entiendo, la respuesta JSON es solo una cadena, y lo más normal es que el foreach no lo admita como válido.


En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
geshiro

Desconectado Desconectado

Mensajes: 178


Ver Perfil
Re: problema al pasar indexes de json a la vista con foreach
« Respuesta #2 en: 15 Agosto 2016, 20:30 pm »

y como pudiera modificar mi json para poder usarlo en el foreach ya sea por como [data:{}] etc
En línea

zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: problema al pasar indexes de json a la vista con foreach
« Respuesta #3 en: 15 Agosto 2016, 21:06 pm »

La verdad es que solo 1 vez usé codeigniter y fue hace mucho.

Deberías enviar la variable a la vista como lo haces normalmente, sin convertirlo en json.

¿No puedes usar otro método en el controlador que devuelva la vista con los datos en vez de responder json? (Para que no reemplaces el método que ya tienes, por si lo estás usando)

Código
  1. $this->load->view('results_view', $data);
En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Re: problema al pasar indexes de json a la vista con foreach
« Respuesta #4 en: 16 Agosto 2016, 14:57 pm »

Como te dicen, para PHP el recurso JSON no es un objeto, solo es un string. Para pasarlo a un arreglo de PHP tenes que usar la funcion json_decode

Codigo ilustrativo de ejemplo:
Código
  1. <?php
  2. $json = '[{"id":"1","sección":"Inventario","data":[{"id":"11","icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/items.png","value":"Productos","seccion_id":"1","url":"http:\/\/localhost\/storeLTE\/inventario\/product"},{"id":"14","icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/employees.png","value":"Provedores","seccion_id":"1","url":"http:\/\/localhost\/storeLTE\/provedor\/provedor"}]},{"id":"2","sección":"Compras","data":[{"id":"22","icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/suppliers.png","value":"Compras","seccion_id":"2","url":"http:\/\/localhost\/storeLTE\/compras\/compras"}]}]';
  3.  
  4. $json_procesado = json_decode($json);
  5. print_r($json_procesado) ;
  6.  
  7. ?>

En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
geshiro

Desconectado Desconectado

Mensajes: 178


Ver Perfil
Re: problema al pasar indexes de json a la vista con foreach
« Respuesta #5 en: 19 Agosto 2016, 17:16 pm »

como pudiera hacerlo?
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.606


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: problema al pasar indexes de json a la vista con foreach
« Respuesta #6 en: 22 Agosto 2016, 02:59 am »

Hola, no estas trabajando con datos jSon, tu estas trabajando con arrays, el resultado lo estas enviando por json pero el procesamiento de datos va por arrays.

El problema que veo es que no estan llegando los valores al foreach y por eso te esta arrojando el error, yo pienso que el problema se encuentra en tu consulta sql a traves del active record.

En tu código antes del foreach ponle una condicional para controlar si vienen los datos o no y con eso debiera bastar para darte cuenta que simplemente los datos no vienen.

Código:
if($this->session->userdata('log')){
    $data = $this->session->userdata('log');
    $menu = array();
    $seccions = $this->module->get_rows();
    if($seccions){
        foreach ($seccions as $index => $sección){
            $menu[] = $sección;
            $modules = $this->module->query("SELECT CONCAT('".$sección['id']."',storelte_modulo.id) AS
id,CONCAT('".base_url('assets/img/sidebar')."','/',storelte_modulo.icon) as icon, storelte_modulo.modulo AS value,storelte_modulo.seccion_id,CONCAT('".base_url()."',storelte_modulo.url) AS
 url FROM storelte_modulo INNER JOIN storelte_modulo_perfil ON
  storelte_modulo_perfil.modulo_id = storelte_modulo.id WHERE seccion_id =
$sección[id] AND storelte_modulo_perfil.perfiles_id =
$data[id] AND storelte_modulo_perfil.STATUS = 1");
            $seccions[$index]['data']= $modules;
            if (!count($seccions[$index]['data']))
                unset($seccions[$index]);
        }
        $this->json($menu);
    }
}

Además no necesitas dos foreach, basta con el primero y ahi incluyes el push del array. También puedes reemplazar array_push por $var[] = ... , eso agrega un item al final del stack.

Revisa tu consulta SQl porque me huele que ahi esta tu problema. Lanza un echo a tu consulta sql y pegalo en tu servidor mysql y vee que error te arroja o ejecuta print_f($this->db).

Estás usando codeigniter no?

Saludos.
« Última modificación: 22 Agosto 2016, 03:02 am por WHK » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Resuelto] problema con foreach en php para hacer insert
PHP
tecasoft 3 2,899 Último mensaje 19 Octubre 2015, 23:55 pm
por tecasoft
problema con los indexes en foreach en codeigniter
PHP
geshiro 0 2,153 Último mensaje 15 Agosto 2016, 18:39 pm
por geshiro
se puede pasar contenido de txt a .json?
Desarrollo Web
bengy 1 4,296 Último mensaje 17 Octubre 2016, 05:43 am
por engel lex
PHP: pasar de Object a JSON
PHP
JonaLamper 2 2,595 Último mensaje 3 Abril 2017, 18:14 pm
por engel lex
Problema en PHP, Foreach (Numeros del 1 al 100)
PHP
Ali Baba 4 7,603 Último mensaje 13 Junio 2017, 06:17 am
por #!drvy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines