Foros del Web » Programando para Internet » PHP »

llamar funcion dentro de otra no devuelve valor

Estas en el tema de llamar funcion dentro de otra no devuelve valor en el foro de PHP en Foros del Web. Hola, Tengo un gestor de paginas y al contruir un arbol con el voy llamando a dos funciones una y otra vez y una dentro ...
  #1 (permalink)  
Antiguo 04/06/2010, 02:52
 
Fecha de Ingreso: septiembre-2005
Mensajes: 99
Antigüedad: 18 años, 7 meses
Puntos: 0
llamar funcion dentro de otra no devuelve valor

Hola,

Tengo un gestor de paginas y al contruir un arbol con el voy llamando a dos funciones una y otra vez y una dentro de otra, el caso es que cuando yo hago un echo de el valor que tiene $con antes de devolverlo con un return en la funcion niveles el valor es correcto, pero en la funcion paginas que es la que llamo a niveles no recoge ningun valor, pongo el codigo para ver si alguien puede ayudarme, gracias.

function niveles($sub,$con){
include("includes/config.php");
$sqln="select id_sub from ".$prefijo."pag_lis where id_pag='$sub'";
$rn=mysql_db_query("$base",$sqln);
$vn=mysql_fetch_array($rn);
if($vn[id_sub]==0){
$con++;
echo $con; //CONTIENE POR EJ. UN 4
return $con;
}else{
$con++;
niveles($vn[id_sub],$con);
}
}
function paginas($pag){
include("includes/config.php");
$sqlp="select * from ".$prefijo."pag_lis where id_sub='$pag'";
$rp=mysql_db_query("$base",$sqlp);
if(mysql_num_rows($rp)>0){
while($vp=mysql_fetch_array($rp)){
$niv=niveles($vp[id_sub],2);
echo $niv; //ESTA VACIO
echo '<div id="sitemap_sub'.$niv.'"><a alt="'.$vp[titulo].'" title="'.$vp[titulo].'" href="'.$vp[url].'">'.$vp[titulo].'</a>';
paginas($vp[id_pag]);
echo '</div>';
}
}
}
$sqls="select * from ".$prefijo."pag_lis where id_cat='$vc[id_cat]' and id_sub='0'";
$rs=mysql_db_query("$base",$sqls);
while($vs=mysql_fetch_array($rs)){
echo '<div id="sitemap_sub'.niveles($vp[id_sub],1).'"><a alt="'.$vs[titulo].'" title="'.$vs[titulo].'" href="'.$vs[url].'">'.$vs[titulo].'</a></div>';
paginas($vs[id_pag]);
}
  #2 (permalink)  
Antiguo 04/06/2010, 03:27
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: llamar funcion dentro de otra no devuelve valor

Mira hice un ejemplo basandome en tu codigo:
Código PHP:
<table><tr><td><?php echo paginas(); ?></td></tr></table>
<?


function niveles($sub,$con){    
    if(
$sub==0){
        
$con++;
        echo 
$con//CONTIENE POR EJ. UN 4
        
return $con;    
    }else{
        
$con++;
        
niveles(0,$con);
    }
}
function 
paginas(){
    
$niv=niveles(0,2);
    echo 
$niv."<br>"//ESTA VACIO
    
return $niv;

?>
Me funciona a la perfeccion, es decir me devuelve el valor correctamente. Asi que te sugeriria que miraras atentamente a lo que te devuelven las tablas, porque si alguna te devuelve nada es posible que sea lo que haga que te devuelva 0.

Tabmien ten en cuenta que mysql_db_query esta obsoleto: http://php.net/manual/es/function.mysql-db-query.php

Utiliza mysql_query: http://php.net/manual/es/function.mysql-query.php
  #3 (permalink)  
Antiguo 04/06/2010, 04:18
 
Fecha de Ingreso: septiembre-2005
Mensajes: 99
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: llamar funcion dentro de otra no devuelve valor

Valor si que tiene porque justo antes de devolverlo saco un eco que en mi caso me dice que es un 4, lo cual es correcto, es lo que me tiene que devolver pero cuando lo recojo en la funcion paginas no tiene nada.
Quiza deberia detallar algo mas, la funcion paginas se llama a si misma y cada vez que entra en la funcion paginas llama a la otra que tambien se puede llamar varias veces a si misma, pues bien, la primera vez que entra en la funcion paginas y llama a niveles si recoje bien el valor que devuelve pero las siguientes veces ya no.
  #4 (permalink)  
Antiguo 04/06/2010, 05:03
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: llamar funcion dentro de otra no devuelve valor

Aqui te dejo el codigo tuyo un poco retocado. Pegalo en tu sitio y dime que imprimen lo echos.
He cambiado tus mysql_db_query() por los mysql_query(). Espero que $base sea el identificador o link a la bd. Si no es asi cambialo por el que sea.
Código PHP:
<?php
function niveles($sub,$con){    
    include(
"includes/config.php");
    
$sqln="select id_sub from ".$prefijo."pag_lis where id_pag='$sub'";
    
$rn=mysql_query($sqln,$base);    
    
$vn=mysql_fetch_array($rn);
    echo 
$vn['id_sub']; ////HAZME ESTE ECHO Y DIME QUE TE DEVUELVE
    
$con++;
    if(
$vn['id_sub']==0){
        echo 
$con;
        return 
$con;    
    }else{
        
niveles($vn['id_sub'],$con);
    }
}
function 
paginas($pag){
    include(
"includes/config.php");
    
$sqlp="select * from ".$prefijo."pag_lis where id_sub='$pag'";
    
$rp=mysql_query($sqlp,$base);
    if(
mysql_num_rows($rp)>0){
        while(
$vp=mysql_fetch_array($rp)){
            echo 
$vp['id_sub'//HAZME ESTE ECHO Y DIME QUE TE DEVUELVE
            
echo niveles($vp['id_sub'],2); //HAZME ESTE ECHO Y DIME QUE TE DEVUELVE
            
echo '<div id="sitemap_sub'.niveles($vp['id_sub'],2).'"><a alt="'.$vp['titulo'].'" title="'.$vp['titulo'].'" href="'.$vp['url'].'">'.$vp['titulo'].'</a>';
            
paginas($vp['id_pag']);
            echo 
'</div>';
        }
    }

$sqls="select * from ".$prefijo."pag_lis where id_cat='".$vc['id_cat']."' and id_sub='0'";
$rs=mysql_query($sqls,$base);
while(
$vs=mysql_fetch_array($rs)){
    echo 
'<div id="sitemap_sub'.niveles($vp['id_sub'],1).'"><a alt="'.$vs['titulo'].'" title="'.$vs['titulo'].'" href="'.$vs['url'].'">'.$vs['titulo'].'</a></div>';
    echo 
$vs['id_pag']; //HAZ ESTE ECHO Y DIME QUE TE DEVUELVE
    
paginas($vs['id_pag']);
}
?>

Última edición por Vallu; 04/06/2010 a las 05:15
  #5 (permalink)  
Antiguo 04/06/2010, 05:47
 
Fecha de Ingreso: septiembre-2005
Mensajes: 99
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: llamar funcion dentro de otra no devuelve valor

No es tan sencillo porque salen muchos resultados. Te pongo lo que quiero hacer.

Pongamos que tengo un arbol de paginas. El identificador de mis paginas es id_pag. La tabla tiene otro campo que es id_sub que es el identificador del que depende la pagina y el resultado tiene que ser algo asi.

a1
a11
a12
a121
a122
a1221
a1222
a1223
a123
a2
a3

La primera vez que se llama a "paginas" esta escribe
a1 luego se llama una y otra vez si misma para escribir las paginas y hay dentro de cada una, y cada vez que va a escribir una pagina llama a niveles para ver cuantas paginas tiene por encima lo que me da el numero de nivel al que esta.
El arbol de paginas lo construye correctamente pero lo que no hace bien es poner el nivel al que esta, lo que deberia estar asi
a122
a1221
lo deja
a122
a1221
Hasta el segundo nivel lo hace bien pero a partir de ese ya no recoge el valor, ¿porque si las veces anteriores que es llamado lo hace bien?

Gracias por tu ayuda

Etiquetas: funcion, llamar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:45.