<?php
declare(strict_types=0);
// graphemica.com
// php 8.0 inicializar variables
if(!array_key_exists("oscreen",$_SESSION)){$_SESSION['oscreen']='';}



function get_childs($ztabla, $parent, $domd_g, $element, $nivel) 
{
     if($nivel<=0){return;}
     if(empty($link_data)){$link_data=$_SESSION['link_data'];}
     if(empty($parent)){return;}
     $ztabla0=$ztabla.'0';
     
     $sql_list='';
     $sql_list.='select * from '.$ztabla0.' ';
     $sql_list.='where '.$ztabla.'_referx ="'.$parent.'" ';
     $sql_list.='order by '.$ztabla.'_referx, '.$ztabla.'_codigo ';
     $res_list=msql_query($sql_list,$link_data);
     
     if(msql_num_rows($res_list)>0)
     {
          $ulist=$element->appendChild($domd_g->createElement("ul",''));   
          while($aso_list=msql_fetch_assoc($res_list))
          {
               $list=$ulist->appendChild($domd_g->createElement("li",$aso_list[$ztabla.'_codigo'].' - '.$aso_list[$ztabla.'_descri']));   
               get_childs($ztabla, $aso_list[$ztabla.'_codigo'], $domd_g, $list, ($nivel-1));               
          }
     }
}

$inputtag='input';
if(empty($ztabla)){$ztabla='user';};
if(empty($znivel)){$znivel=2;}

$ztabla0=$ztabla.'0';

$domd_g = new DOMDocument();
     $domd_g->encoding = 'utf-8';
     $domd_g->xmlVersion = '1.0';
     $domd_g->formatOutput = true;
$elem_g=$domd_g;

if(!empty($zdom)){$domd_g=$zdom;}
if(!empty($zele)){$elem_g=$zele;}



if($ztcell>=2 and $zobj>=2 and $zobj<=3)
{
     $element=$elem_g->appendChild($domd_g->createElement("td"," "));
     $element->setAttribute("valign","top");
}
else
{
     $element=$elem_g->appendChild($domd_g->createElement("span"," "));
}

$label=$element->appendChild($domd_g->createElement("label",($zlabel)));   
$ulist=$element->appendChild($domd_g->createElement("ul",($zlabel)));   

$sql_list='';
// $sql_list.='create temporary table nivel0 ';
$sql_list.='select * from '.$ztabla0.' where '.$ztabla.'_codigo="'.$zcodigo.'" ';
$res_list=msql_query($sql_list,$link_data);
while($aso_list=msql_fetch_assoc($res_list))
{
     $list=$ulist->appendChild($domd_g->createElement("li",$aso_list[$ztabla.'_codigo'].' - '.$aso_list[$ztabla.'_descri']));   
     get_childs($ztabla, $aso_list[$ztabla.'_codigo'], $domd_g, $list, $znivel);     
}

if(empty($zdom))
{
     if($zxml==1){$zxml=$domd_g->saveHTML();}
     else{echo $domd_g->saveHTML();}
}     


// if(empty($znoreset))
{include ('ele_reset.php');}


return;


$sql_list='';
$sql_list.='create temporary table nivel0 ';
$sql_list.='select * from '.$ztabla0.' where '.$ztabla.'_codigo="'.$zcodigo.'" ';
$res_list=msql_query($sql_list,$link_data);
$res_list0=$res_list;


// $sql_list='select * from nivel0';
// $res_list=msql_query($sql_list,$link_data);

//      echo '<br>';
//      echo '==>'.$idx;
//      echo '==>'.$sql_list;
//      echo '==>'.msql_num_rows($res_list);

   
   
for($idx=1; $idx<=$znivel; $idx++)
{
     $sql_list='';
     $sql_list.='create temporary table nivel'.$idx.' ';
     $sql_list.='select * from '.$ztabla0.' ';
     $sql_list.='where '.$ztabla.'_referx in(select '.$ztabla.'_codigo from nivel'.($idx-1).') ';
     $sql_list.='order by '.$ztabla.'_referx, '.$ztabla.'_codigo ';
     $res_list=msql_query($sql_list,$link_data);
//      ${$res_list.strval($idx)}=$res_list;
     
// $sql_list='select * from nivel'.$idx;
// $res_list=msql_query($sql_list,$link_data);
     
//      echo '<br>';
//      echo '==>'.$idx;
//      echo '==>'.$sql_list;
//      echo '==>'.msql_num_rows($res_list);
}










// Conexión a la base de datos
$host = 'localhost';
$db = 'nombre_base_datos';
$user = 'usuario';
$pass = 'contraseña';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Función para obtener los datos recursivamente
    function obtenerHijos($padre, $pdo) {
        $stmt = $pdo->prepare("SELECT codigo, nombre FROM tabla WHERE padre = :padre");
        $stmt->execute(['padre' => $padre]);
        $resultados = $stmt->fetchAll(PDO::FETCH_ASSOC);

        if (count($resultados) > 0) {
            echo "<ul>";
            foreach ($resultados as $row) {
                echo "<li>" . htmlspecialchars($row['nombre']);
                obtenerHijos($row['codigo'], $pdo);
                echo "</li>";
            }
            echo "</ul>";
        }
    }

    // Iniciar el árbol desde los elementos raíz (padre = 0 o NULL)
    echo "<ul>";
    $stmt = $pdo->query("SELECT codigo, nombre FROM tabla WHERE padre IS NULL OR padre = 0");
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo "<li>" . htmlspecialchars($row['nombre']);
        obtenerHijos($row['codigo'], $pdo);
        echo "</li>";
    }
    echo "</ul>";
} catch (PDOException $e) {
    echo "Error de conexión: " . $e->getMessage();
}























// if(empty($zdom) and empty($zdomX))



?>