Foros del Web » Programando para Internet » PHP »

Funciones no muestran el resultado

Estas en el tema de Funciones no muestran el resultado en el foro de PHP en Foros del Web. Hola tengo un problema algo difícil de explicar. Por lo visto una aplicación que tenía en php para gestionar imagenes de una página web ha ...
  #1 (permalink)  
Antiguo 04/03/2020, 09:38
 
Fecha de Ingreso: marzo-2013
Mensajes: 65
Antigüedad: 7 años
Puntos: 1
Funciones no muestran el resultado

Hola tengo un problema algo difícil de explicar.
Por lo visto una aplicación que tenía en php para gestionar imagenes de una página web ha dejado de funcionar, supongo que porque el php es viejo.

Haciendo pruebas me he dado cuenta de lo siguiente:
Tengo esta función que se supone que carga todas las categorías

funciones.php
Código PHP:
function cargar_menu ($idioma$padre=NULL){
    
$consulta =    ($padre===NULL)? mysqli_query($conexion"select * from categoria where categoria_padre is NULL order by orden"): mysqli_query($conexion"select * from categoria where categoria_padre=".$padre." order by orden");
    if (
mysqli_num_rows($consulta) == 0) return NULL;
    
$i=0;
    while (
$fila=mysqli_fetch_array($consultaMYSQLI_NUM)){
            
$menu[$i]=array("id_categoria"=>$fila[0], "nombre"=>$fila[1], "orden"=>$fila[5]);
            
$menu[$i]["hijos"]=cargar_menu ($idioma$fila[0]);
            
$i++;
    }
    return 
$menu;

Función que llamo en el php gest_menu.php
Código PHP:
default:
        
$tpl->loadTemplateFile("listar_menu.html");
        
$tpl->setVariable('active_web''class="active"');
        
cargar_cabecera($tpl);
       
$menu=cargar_menu('1');
            if (
$menu!=''){
            foreach (
$menu as $item){
            
mostrar_menu($tpl$item' ');
                
            }
        }
        else{
        
            
$tpl->setVariable('ver_lista''style="display:none;"');
            
$tpl->setVariable('mensaje''<h1>Aun no hay categorias subidas</h1>');
        } 
Si lo pongo así, me entra en el else y me dice que no hay categorías subidas, sin embargo si comento la llamada a la función y pruebo la función directamente talque así:

gest_menu.php
Código PHP:
default:
        
$tpl->loadTemplateFile("listar_menu.html");
        
$tpl->setVariable('active_web''class="active"');
        
cargar_cabecera($tpl);
       
// $menu=cargar_menu('1');
    
$consulta =    ($padre===NULL)? mysqli_query($conexion"select * from categoria where categoria_padre is NULL order by orden"): mysqli_query($conexion"select * from categoria where categoria_padre=".$padre." order by orden");
    if (
mysqli_num_rows($consulta) == 0) return NULL;
    
$i=0;
    while (
$fila=mysqli_fetch_array($consultaMYSQLI_NUM)){
            
$menu[$i]=array("id_categoria"=>$fila[0], "nombre"=>$fila[1], "orden"=>$fila[5]);
            
$menu[$i]["hijos"]=cargar_menu ($idioma$fila[0]);
            
$i++;
    }

        if (
$menu!=''){
            foreach (
$menu as $item){
            
mostrar_menu($tpl$item'&nbsp;');
                
            }
        }
        else{
        
            
$tpl->setVariable('ver_lista''style="display:none;"');
            
$tpl->setVariable('mensaje''<h1>Aun no hay categorias subidas</h1>');
        } 
Ahora me lista las categorías, de todas formas sigo sin ver los productos. Alguien sabe que está pasando?
  #2 (permalink)  
Antiguo 04/03/2020, 10:11
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.032
Antigüedad: 11 años, 7 meses
Puntos: 2206
Respuesta: Funciones no muestran el resultado

Anteriormente PHP te permitía agregar elementos a un array no definido, aparte de ser una pala prácita, ya no se permite y te debería generar algún error o advertencia, a menos que tengas configurado para omitirlos.

Intenta definir el array antes de ingresar al ciclo:

Código PHP:
Ver original
  1. $i = 0;
  2. $menu = []; // Si tu versión de PHP es menor a 5.4, entonces $menu = array();
  3.  
  4. while ($fila=mysqli_fetch_array($consulta, MYSQLI_NUM)) {
  5.     // Aquí ya puedes agregar elementos sin problema
  6.     $menu[$i]=array("id_categoria"=>$fila[0], "nombre"=>$fila[1], "orden"=>$fila[5]);
  7.     $menu[$i]["hijos"]=cargar_menu ($idioma, $fila[0]);
  8.     $i++;
  9.  }

Imagino que los productos no se muestran por algo similar a esto.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 04/03/2020, 10:27
 
Fecha de Ingreso: marzo-2013
Mensajes: 65
Antigüedad: 7 años
Puntos: 1
Respuesta: Funciones no muestran el resultado

Cita:
Iniciado por Triby Ver Mensaje
Anteriormente PHP te permitía agregar elementos a un array no definido, aparte de ser una pala prácita, ya no se permite y te debería generar algún error o advertencia, a menos que tengas configurado para omitirlos.

Intenta definir el array antes de ingresar al ciclo:
Gracias, lo he intentado, pero no da resultado, tendré en cuenta lo de definir los arrays, pero de todas formas si pego la función de funciones.php a gest_menu.php, el script funciona.
  #4 (permalink)  
Antiguo 21/03/2020, 09:44
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 400
Antigüedad: 12 años, 2 meses
Puntos: 11
Respuesta: Funciones no muestran el resultado

Pues me cuesta enter el codigo,
Por qué usa
Código PHP:
$padre===NULL 
cuando puede utilizar
Código PHP:
is_null o !is_null 
y tampoco se sabe que es la variable $padre, es int, string...

y tampoco se sabe que debe retornar la function.

es cuestion de diagramar mejor lo que desea hacer, a veces cuesta un poco pensar pero a la larga le ahorrará mucho dolores de cabeza.

observe que repite este codigo:

Código PHP:
Ver original
  1. consulta =    ($padre===NULL)? mysqli_query($conexion, "select * from categoria where categoria_padre is NULL order by orden"): mysqli_query($conexion, "select * from categoria where categoria_padre=".$padre." order by orden");

Una forma correcta es escribir una funcion que retorne la cosulta una sola vez y no repetir en cada archivo lo mismo.
en fin.
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -
  #5 (permalink)  
Antiguo 21/03/2020, 11:50
 
Fecha de Ingreso: abril-2006
Mensajes: 379
Antigüedad: 14 años
Puntos: 80
Respuesta: Funciones no muestran el resultado

Cita:
Iniciado por zerpico_01 Ver Mensaje
Pues me cuesta enter el codigo,
Por qué usa
Código PHP:
$padre===NULL 
cuando puede utilizar
Código PHP:
is_null o !is_null 
esto es casi una buena forma de programar usar el identico por que se definio una variable de funcion con un Valor por "DEFAULT"
Código PHP:
function cargar_menu ($idioma$padre=NULL){ 
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #6 (permalink)  
Antiguo 21/03/2020, 13:26
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 400
Antigüedad: 12 años, 2 meses
Puntos: 11
Respuesta: Funciones no muestran el resultado

Cita:
Iniciado por tuadmin Ver Mensaje
esto es casi una buena forma de programar usar el identico por que se definio una variable de funcion con un Valor por "DEFAULT"
Código PHP:
function cargar_menu ($idioma$padre=NULL){ 
Hola tuadmin;

Pues eso es lo único que se entiende (o entiendo), de todos modos, va en cada cual y la lógica seria para mi humilde entender, algo así:
Código PHP:
function cargar_menu ($idioma$padre null/** null no se usa en mayúsculas */
{
    if (!
is_null($padre)) {
        
/** aca si no es null algo */
    
}

Pero va en cada cual en mi caso no uso null y evito operadores de comparación innecesarios, por ejemplo:

$var1 == $var2 Igual TRUE si $var1 es igual a $var2 después de la manipulación de tipos.
$var1 === $var2 Idéntico TRUE si $var1 es igual a $var2, y son del mismo tipo. (ESTO CONSUME MAS RECURSOS)

sabiendo esto podemos hacerlo mucho mas funcional. y si se sabría que valor espera la variable $padre (es obvio que quizas id int pero no se entiende), se puede hacer
algo mas complejo, por ejemplo validar y ejecutar todo en una misma función.

son modos pero no me haga caso estoy aburridisimo!! con esto del corona :( no se puede salir :(

__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -

Última edición por zerpico_01; 21/03/2020 a las 13:46 Razón: ortografia
  #7 (permalink)  
Antiguo 21/03/2020, 21:28
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.032
Antigüedad: 11 años, 7 meses
Puntos: 2206
Respuesta: Funciones no muestran el resultado

Hola, zerpico_01, qué te hace pensar que la comparación por tipo consume más recursos que la función? De hecho, es todo lo contrario, is_null() es una función y... qué crees que hace internamente? Exacto, una comparación por tipo!

Por otra parte, es más consistente con otras comparaciones, como === false o === true y, a fin de cuentas, no representa solución al problema.
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 22/03/2020, 12:52
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 400
Antigüedad: 12 años, 2 meses
Puntos: 11
Respuesta: Funciones no muestran el resultado

Cita:
Iniciado por Triby Ver Mensaje
Hola, zerpico_01, qué te hace pensar que la comparación por tipo consume más recursos que la función? De hecho, es todo lo contrario, is_null() es una función y... qué crees que hace internamente? Exacto, una comparación por tipo!

Por otra parte, es más consistente con otras comparaciones, como === false o === true y, a fin de cuentas, no representa solución al problema.
Hola Triby!
Veamos, lo que he dicho es que no se sabe que es la variable $padre o que se espera que sea, es evidente que
es un entero.
La conversión de tipo no tiene lugar cuando la comparación es === o !== ya que esto involucra comparar el tipo así como el valor.

El problema del usuario es que '1' es un string mientras que 1 es un integer.
por ejemplo FALSE es un boolean mientras que si uso 'false' es un string.

Observe que en unas lineas del post dice que si comenta
Código PHP:
$menu=cargar_menu('1');
" Ahora me lista las categorías, de todas formas sigo sin ver los productos. Alguien sabe que está pasando? " 
No lo puedo ayudar por que esta colocando fragmentos de archivos y por ejemplo en el supuesto archivo gest_menu.php
ha puesto obj que evidentemente pertenecen a una classe o es lo que entiendo siendo $tpl una llamada a loadTemplateFile
de esa classe u de otra, hay funciones que no están en el post, por ende no entiendo.
Y por lo poco que he visto, hay funciones que pueden ser creadas en una sola, declarando las variables antes de usarlas e
incluso se puede hacer una re utilización de las mismas sin necesidad de repetir el código.

En cuanto al consumo de recursos veamos!

Código PHP:
function probandoIsNull($var$testeando null)
{
    if (
is_null($testeando)) {
        echo 
$var.' '.memory_get_usage();
    }
}

echo 
probandoIsNull('quiero ver que pasa te use esta memoria : '); 

Código PHP:
function probandoIsNull($var$testeando null)
{
    if (
$testeando === null) {
        echo 
$var.' '.memory_get_usage();
    }
}

echo 
probandoIsNull('quiero ver que pasa te use esta memoria : '); 
Código PHP:
is_null
consume mas recursos JODER!!

Pero como dije antes esta en cada cual y en la forma de usar los recursos. A mi no me gusta mezclar html con php y repetir lineas de códigos
Saludos
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -

Última edición por zerpico_01; 22/03/2020 a las 12:54 Razón: ortografia
  #9 (permalink)  
Antiguo 23/03/2020, 15:41
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.032
Antigüedad: 11 años, 7 meses
Puntos: 2206
Respuesta: Funciones no muestran el resultado

Consumo de memoria con is_null(): 413096
Consumo de memoria con === null: 413272

Diablos, me voy a cortar las venas!!!

Ahora, haciendo una prueba más creíble (PHP v7.2.14):
Código PHP:
Ver original
  1. $nuls = [];
  2. for($i = 0; $i < 1000000; $i++) {
  3.     $nuls[] = null;
  4. }
  5.  
  6. $count = 0;
  7. $start1 = microtime(true);
  8. foreach($nuls as $nl) {
  9.     if($nl === null) {
  10.         $count ++;
  11.     }
  12. }
  13. $fin1 = microtime(true) - $start1;
  14. echo 'Tiempo total === null: ' . number_format($fin1, 10) . '<br>';
  15.  
  16. $count = 0;
  17. $start2 = microtime(true);
  18. foreach($nuls as $nl) {
  19.     if(is_null($nl)) {
  20.         $count ++;
  21.     }
  22. }
  23. $fin2 = microtime(true) - $start2;
  24. echo 'Tiempo total is_null(): ' . number_format($fin2, 10);

Tiempo total === null: 0.2404739857
Tiempo total is_null(): 0.2686541080

Y vuelvo a mi último comentario: Esto no representa solución al problema, solo parece una discusión para ver quién sabe más y, créeme, eso no nos va a llevar a buen puerto porque no tiene utilidad más allá de una supuesta "satisfacción" personal... a mí no me sirve!
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 23/03/2020, 19:07
 
Fecha de Ingreso: abril-2006
Mensajes: 379
Antigüedad: 14 años
Puntos: 80
Respuesta: Funciones no muestran el resultado

y justo cuando se estaba poniento interesante , cada quien tiene su punto de vista en lo personal prefiero llamar las cosas como son

null===$variable

por que como yo trabajo con varios lenguajes de programacion, trato de normalizar mi codigo, is_null no existe en delphi ni c++
-------------------------------------------------

bueno Retomando al tema original del POST, no puedo decir que el problema viene por que cambio de versiones, por que estas usando MYSQLI lo cual me hace pensar que el problema esta en un Warning o Notice que esta bloqueando la vista, seria bueno que publiques mas de tu codigo, y descarta el tema del MYSQL, realiza el mismo Query pero desde el PHPMYADMIN o de tu gestor de base de datos favorita
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #11 (permalink)  
Antiguo 23/03/2020, 19:55
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 400
Antigüedad: 12 años, 2 meses
Puntos: 11
Respuesta: Funciones no muestran el resultado

Cita:
Iniciado por Triby Ver Mensaje
Consumo de memoria con is_null(): 413096
Consumo de memoria con === null: 413272

Diablos, me voy a cortar las venas!!!

Ahora, haciendo una prueba más creíble (PHP v7.2.14):
Código PHP:
Ver original
  1. $nuls = [];
  2. for($i = 0; $i < 1000000; $i++) {
  3.     $nuls[] = null;
  4. }
  5.  
  6. $count = 0;
  7. $start1 = microtime(true);
  8. foreach($nuls as $nl) {
  9.     if($nl === null) {
  10.         $count ++;
  11.     }
  12. }
  13. $fin1 = microtime(true) - $start1;
  14. echo 'Tiempo total === null: ' . number_format($fin1, 10) . '<br>';
  15.  
  16. $count = 0;
  17. $start2 = microtime(true);
  18. foreach($nuls as $nl) {
  19.     if(is_null($nl)) {
  20.         $count ++;
  21.     }
  22. }
  23. $fin2 = microtime(true) - $start2;
  24. echo 'Tiempo total is_null(): ' . number_format($fin2, 10);

Tiempo total === null: 0.2404739857
Tiempo total is_null(): 0.2686541080

Y vuelvo a mi último comentario: Esto no representa solución al problema, solo parece una discusión para ver quién sabe más y, créeme, eso no nos va a llevar a buen puerto porque no tiene utilidad más allá de una supuesta "satisfacción" personal... a mí no me sirve!
Si no aporta nada tienes razón!
recuerda que existe
yield / range() / xrange()

Pero ya esta los puntos de vistas son distintos y va en cada cual

que el usuario kidinshell especifique en detalle lo que hace su aplicación de imágenes y con gusto subo una contribución para tal fin.
estoy re aburrido.

saludos!!
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -



La zona horaria es GMT -6. Ahora son las 11:12.