Foros del Web » Programando para Internet » PHP »

Problema menu dinamico php mysql

Estas en el tema de Problema menu dinamico php mysql en el foro de PHP en Foros del Web. Buenas tardes, Este es mi problema: Código: $menu = $bd->Query("SELECT * FROM menu"); while($rmenu = $bd->Farray($menu)) { echo "<li> <a href='". $rmenu['href'] ."'>". $rmenu['titulo'] ."</a> ...
  #1 (permalink)  
Antiguo 09/08/2014, 12:34
Avatar de pacomercon  
Fecha de Ingreso: agosto-2014
Mensajes: 15
Antigüedad: 9 años, 8 meses
Puntos: 2
Exclamación Problema menu dinamico php mysql

Buenas tardes,

Este es mi problema:

Código:
			$menu = $bd->Query("SELECT * FROM menu");

			while($rmenu = $bd->Farray($menu)) {
				echo "<li>
				<a href='". $rmenu['href'] ."'>". $rmenu['titulo'] ."</a>
				<ul>";
					$smenu = $bd->Query("SELECT * FROM submenu where idmenu = ".$rmenu['id']."");
					while($rsmenu = $bd->Farray($smenu)) {
						echo "<li><a href='".$rsmenu['hrefsub']."'>".$rsmenu['titulosub']."</a></li>";
					}
				echo "</ul></li>";
			}
El problema resulta que está en la query multiple que no es posible... es decir, este código a dia de hoy funciona, pero solo muestra el 1º menu y submenu.

Es decir, mi menu tiene 3 items y solo muestra el 1º junto con sus subitems...ya que al cargar la 2º query la anterior se pierde.

Un saludo y gracias
  #2 (permalink)  
Antiguo 10/08/2014, 10:03
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Problema menu dinamico php mysql

hola,
priba con clonar el objeto, quizas se estan pisando:

Código PHP:
Ver original
  1. <?
  2. $menu = $bd->Query("SELECT * FROM menu");
  3.  
  4.             while($rmenu = $bd->Farray($menu)) {
  5.                 echo "<li>
  6.                 <a href='". $rmenu['href'] ."'>". $rmenu['titulo'] ."</a>
  7.                 <ul>";
  8. $bd_clone = clone $bd;
  9.                     $smenu = $bd_clone->Query("SELECT * FROM submenu where idmenu = ".$rmenu['id']."");
  10.                     while($rsmenu = $bd_clone->Farray($smenu)) {
  11.                         echo "<li><a href='".$rsmenu['hrefsub']."'>".$rsmenu['titulosub']."</a></li>";
  12.                     }
  13.                 echo "</ul></li>";
  14.             }
  15. ?>
  #3 (permalink)  
Antiguo 10/08/2014, 11:30
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Problema menu dinamico php mysql

$bd que es? Que base de datos estas usando?
Suponiendo que estes usando mysql mediante mysqli, te comento un detalle que debes tener en cuenta, sobre todo con sentencias preparadas.

Si PHP esta usando el driver mysqlnd, puedes mantener a varias consultas en simultaneo con la base de datos sin problemas, pero si no esta usando ese driver (porque es una version vieja y esta compilado con el driver que provee mysql) no puedes tener "vivas" al mismo tiempo dos consultas a la base de datos en la misma conexion.
No importa si es en objetos diferentes, en script diferentes o lo que sea, la conexion es unica.

La unica solucion para esto, es que hagas una consulta, te guardes los resultados en un array, y luego realices otra. (Siempre puedes actualizarte a una version de php con mysqlnd, por supuesto)
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 12/08/2014, 03:56
Avatar de pacomercon  
Fecha de Ingreso: agosto-2014
Mensajes: 15
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Problema menu dinamico php mysql

Buenas a todos...

Uso Mysql si, aquí adjunto la clase a la cual he echo referencia en el ejplo anterior... para que tengaís más información...

Por cierto, Patriarka he probado tu código y me da el mismo problema solo me general el 1º item y sus subitems pero los demas items no aparecen...


Código:
class Conectar {

    private $sql;

    /** SE CONECTA A LA BD Y COMPRUEBA QUE NO HAYA ERRORES **/
    function __construct()    {

        global $link;

        require_once(URLBASE . 'configuracion.php');

        $link = mysqli_connect(SERVIDOR, USER, PASS, BD);
        //$base = @mysqli_select_db ($link,BD);

        try {
            if (!$link) {
                //die('ERROR DE CONEXIÓN (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
                throw new Exception('ERROR DE CONEXIÓN',0);
            }

            // if (! $base){
                //die ("ERROR AL CONECTAR CON LA BASE DE DATOS: ".mysqli_connect_error() );
                // throw new Exception('ERROR AL CONECTAR CON LA BASE DE DATOS', 1);
            // }

            if (!mysqli_set_charset($link, "utf8")) {
                //printf("Error cargando el conjunto de caracteres utf8: %s\n", mysqli_error($link));
                throw new Exception('ERROR CARGANDO EL CONJUNTO DE CARACTERES', 2);
            }
        } catch(Exception $e) {
            echo $e->getMessage() . '('. $e->getCode() . ')';
        }

        //echo 'Éxito... ' . mysqli_get_host_info($link) . "\n";
    }

    /** DEVUELVE LA CONSULTA DE LA BD, PARA TRATARLA CON FArray o Nrows **/
    public function Query($sql) {

        global $link;
        global $res;

        $this->sql = $sql;

        $res = mysqli_query($link,$sql);
        if (!$res) die('Error en la query: ' . mysqli_error($link));

        return $res;

    }

    /** DEVUELVE EL ÚLTIMO ID GENERADO **/
    public function UltId() {

        global $link;

        return mysqli_insert_id($link);
    }

    /** DEVUELVE LOS DATOS EN NOMBRE **/
    public function FArray($consulta) {

        global $res;

        return mysqli_fetch_array($res, MYSQLI_ASSOC);
    }

    /** DEVUELVE LOS DATOS EN NUMEROS **/
    public function Nrows($consulta) {

        global $res;

        return mysqli_num_rows($consulta);

    }

    /** CIERRA LA CONEXIÓN A LA BD Y LIMPIA LA MEMORIA **/
    function Cerrar() {

        global $link;

        mysqli_close($link);
    }

}
Un saludo y gracias!!!

Última edición por pacomercon; 12/08/2014 a las 04:06

Etiquetas: dinamico, mysql, select
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 07:33.