Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Dudoso error de sintaxis de 1 línea PHP

Estas en el tema de Dudoso error de sintaxis de 1 línea PHP en el foro de PHP en Foros del Web. Hola amigos. Creo que la línea 4 tiene algún error de sintaxis: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original function menu ( $id_padre , $menu ) ...
  #1 (permalink)  
Antiguo 09/10/2014, 14:16
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Dudoso error de sintaxis de 1 línea PHP

Hola amigos. Creo que la línea 4 tiene algún error de sintaxis:

Código PHP:
Ver original
  1. function menu($id_padre, $menu) {
  2.     $html = "<ul>\n";
  3.     foreach($menu[$id_padre] as $id_menu) {
  4.          $html .= "<li><a href=\"pagina.php?opcion=$id_menu\">{$menu[$id_menu]['menu_nombre']}</a>";
  5.          // Este menú tiene hijos?
  6.          if(isset($menu[$id_menu])) {
  7.               $html .= menu($id_menu, $menu);
  8.          }
  9.          $html .= "</li>\n";
  10.     }
  11.     $html .= "</ul>\n";
  12. }

Lo intenté hasta aquí:
Código PHP:
Ver original
  1. $html .= "<li><a href=\"pagina.php?.opcion=".$id_menu."\">".'$aqui_falta_completar_correctamente'."</a>";
  #2 (permalink)  
Antiguo 09/10/2014, 14:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Pues no, en dicho código no hay error alguno.

Lo acabo de copiar y pegar, luego aplique el linter de PHP:
Cita:
No syntax errors detected in sample.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 09/10/2014, 14:23
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Y cual es el error que te proporciona php ???
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #4 (permalink)  
Antiguo 09/10/2014, 14:37
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Que gusto Pateketrueke que me hayas respondido... Muchas gracias (en otros temas creía que te había saturado porque me cuesta entender este mundo maravilloso de la programación). También quiero saludar: "Hola Hss".

Este es el asunto:

Estoy tratando de hacer una conexión a mi BD con una función recursiva de un menú-categorías, escrita en un antiguo Post del amigo colaborador Triby:


Mensaje de error:

Código HTML:
Ver original
  1. Notice: Undefined index: productos_nombre in C:\xampp\htdocs\usuarios\administrador\content\menu_url2.php on line 43
  2.  
  3. Notice: Undefined offset: 2 in C:\xampp\htdocs\usuarios\administrador\content\menu_url2.php on line 43
  4.  
  5. Notice: Undefined offset: 4 in C:\xampp\htdocs\usuarios\administrador\content\menu_url2.php on line 43
  6.  
  7. Notice: Undefined index: productos_nombre in C:\xampp\htdocs\usuarios\administrador\content\menu_url2.php on line 43
  8.  
  9. Notice: Undefined offset: 3 in C:\xampp\htdocs\usuarios\administrador\content\menu_url2.php on line 43
  10.  
  11. Notice: Undefined index: productos_nombre in C:\xampp\htdocs\usuarios\administrador\content\menu_url2.php on line 43
  12.  
  13. Notice: Undefined offset: 7 in C:\xampp\htdocs\usuarios\administrador\content\menu_url2.php on line 43




DATOS DE LA PÁGINA "MENU_URL2.PHP":

Código PHP:
Ver original
  1. <?php  
  2.     function crearConexion(){
  3.         //Datos para la conexión con el servidor
  4.         $servidor   = "localhost";
  5.         $nombreBD   = "mi_base";
  6.         $usuario    = "root";
  7.         $contrasena = "";
  8.         //Creando la conexión, nuevo objeto mysqli
  9.         $conexion = new mysqli($servidor,$usuario,$contrasena,$nombreBD);
  10.         //Si sucede algún error la función muere e imprimir el error
  11.         if($conexion->connect_error){
  12.             die("Error en la conexion : ".$conexion->connect_errno.
  13.                                       "-".$conexion->connect_error);
  14.         }
  15.         //Si nada sucede retornamos la conexión
  16.         return $conexion;
  17.     }
  18.        
  19.        // Cargamos opciones del menú
  20. function cargaMenu($mysqli) {
  21.     $menu = array('todos' => array());
  22.     // Falta una columna que permita seleccionar orden
  23.     // Ahora se muestran como fueron dados de alta
  24.     $sql = "SELECT * FROM productos";
  25.     $res = $mysqli->query($sql);
  26.     while($row = $res->fetch_assoc()) {
  27.         $id_padre = $row['productos_parent_id'];
  28.         // Verificamos si existe el menú padre o lo creamos
  29.         (!isset($menu[$id_padre]) && $menu[$id_padre] = array());
  30.         // Agregamos ID del elemento actual al padre
  31.         $menu[$id_padre][] = $row['productos_id'];
  32.         // Agregamos el elemento actual al arreglo 'todos'
  33.         $menu['todos'][$row['productos_id']] = $row;
  34.     }
  35.     return $menu;
  36. }
  37.  
  38. // Mostramos menú
  39. function menu($id_padre, $menu) {
  40.     $html = "<ul>\n";
  41.     foreach($menu[$id_padre] as $id_menu) {
  42.        
  43.         $html .= "<li><a href=\"pagina.php?opcion=$id_menu\">{$menu[$id_menu]['productos_nombre']}</a>";    
  44.          
  45.          // Este menú tiene hijos?
  46.          if(isset($menu[$id_menu])) {
  47.               $html .= menu($id_menu, $menu);
  48.          }
  49.          $html .= "</li>\n";
  50.     }
  51.     $html .= "</ul>\n";
  52. }
  53. // Lo hacemos funcionar
  54. $mysqli = crearConexion();
  55. $menu = cargaMenu($mysqli);
  56.    
  57. // Mostramos menú, padre=0 para menú principal
  58. echo menu(0, $menu);
  59.      
  60. ?>

Estructura básica de la tabla:

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `productos` (
  2.   `productos_id` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `productos_parent_id` INT(11) NOT NULL,
  4.   `productos_nombre` VARCHAR(30) COLLATE utf8_spanish_ci DEFAULT NULL,
  5.   PRIMARY KEY (`productos_id`)
  6. )
  7.  
  8.  
  9. INSERT INTO `productos` (`productos_id`, `productos_parent_id`, `productos_nombre`) VALUES
  10. (1, 0, 'Inicio'),
  11. (2, 1, 'Categoria 1'),
  12. (3, 5, 'Categoria 3-1'),
  13. (4, 1, 'Categoria 2'),
  14. (5, 1, 'Categoria 3'),
  15. (6, 5, 'Categoria 3-1'),
  16. (7, 6, 'Categoria 3-1-1');

DUDAS:

*Creo que la "funcion menu" tendría que retornar en algo
*Me llama la atención esa línea 43 que tiene prácticamente un solo color, a diferencia de otras líneas:




Ayuda, por favor

Última edición por mikehove; 10/10/2014 a las 23:19
  #5 (permalink)  
Antiguo 11/10/2014, 14:58
 
Fecha de Ingreso: mayo-2014
Mensajes: 20
Antigüedad: 10 años
Puntos: 3
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Lo he revisado superficialmente, pero creo que tienes un punto antes de la variable opción que no debería ir

$html .= "<li><a href=\"pagina.php?.opcion=".$id_menu."\">".'$aqui_falta_completar_correctam ente'."</a>";
  #6 (permalink)  
Antiguo 11/10/2014, 15:29
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Hola Gpuon.
Gracias por responder pero eso no es...
Esa líneaaaa me está volviendo loco jeje...
  #7 (permalink)  
Antiguo 11/10/2014, 16:00
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Hola, no hay error, es solo un warining.
el unico problema es que algunos indices no estas definidos:
Código PHP:
Ver original
  1. <?
  2. $aqui_falta_completar_correctamente = (isset($menu[$id_menu]['menu_nombre'])) ? $menu[$id_menu]['menu_nombre'] : "";
  3.  
  4. $html .= "<li><a href=\"pagina.php?.opcion=".$id_menu."\">".'$aqui_falta_completar_correctamente'."</a>";
  5.  
  6. ?>
  #8 (permalink)  
Antiguo 11/10/2014, 17:41
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Hola Patriarka.
Gracias por responderme...

Disculpame pero la línea original es así:
Código PHP:
Ver original
  1. $html .= "<li><a href=\"pagina.php?opcion=$id_menu\">{$menu[$id_menu]['productos_nombre']}</a>";

El amigo Gpuon, ahora me dí cuenta, tomó un ejemplo que faltaba completar con las llaves "{}". Traté de adaptar tu código con las llaves pero creo que no lo estoy haciendo bien:

Código PHP:
Ver original
  1. $codigo_completo = (isset($menu[$id_menu]['productos_nombre'])) ? $menu[$id_menu]['productos_nombre'] : "";
  2. $html .= "<li><a href=\"pagina.php?opcion=$id_menu\">{$codigo_completo}</a>";

Me llama la atención que la función "menu()" no retorne en nada.

Alguien puede probar este menú? para saber cual es el error preciso, por favor.

Hice la tabla, la conexion a ella, todo bien... creo que lo único que falla es esa función.

Última edición por mikehove; 11/10/2014 a las 17:50
  #9 (permalink)  
Antiguo 11/10/2014, 17:57
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: Dudoso error de sintaxis de 1 línea PHP

y cual es el error ahora?
si no hay error y no muestra nada es por que no nada que mostrar
  #10 (permalink)  
Antiguo 11/10/2014, 18:10
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Respuesta: Dudoso error de sintaxis de 1 línea PHP

No se por qué no muestra todo el menú
  #11 (permalink)  
Antiguo 11/10/2014, 18:17
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Y que muestra???
  #12 (permalink)  
Antiguo 11/10/2014, 18:20
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Respuesta: Dudoso error de sintaxis de 1 línea PHP

No muestra nada en pantalla y tendría que mostrar el menú completo.
Esta es una idea del amigo Triby, aquí está el link, hice la tabla y la conexión y no me funciona:
http://www.forosdelweb.com/f18/aport...3/#post4284145
  #13 (permalink)  
Antiguo 11/10/2014, 18:37
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: Dudoso error de sintaxis de 1 línea PHP

es menu recursivo, y por qué no usas el mismo que el del ejemplo???
  #14 (permalink)  
Antiguo 11/10/2014, 21:59
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Es lo que intento amigo. Los codigos son de la funcion recursiva. Hice toda la conexion y todoa la la tabla y la conexion. No se que mas hacer para que funcione
  #15 (permalink)  
Antiguo 11/10/2014, 22:03
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Dónde está el return $html; ?

Código PHP:
Ver original
  1. // Mostramos menú
  2. function menu($id_padre, $menu) {
  3.     $html = "<ul>\n";
  4.     foreach($menu[$id_padre] as $id_menu) {
  5.        
  6.         $html .= "<li><a href=\"pagina.php?opcion=$id_menu\">{$menu[$id_menu]['productos_nombre']}</a>";    
  7.          
  8.          // Este menú tiene hijos?
  9.          if(isset($menu[$id_menu])) {
  10.               $html .= menu($id_menu, $menu);
  11.          }
  12.          $html .= "</li>\n";
  13.     }
  14.     $html .= "</ul>\n";
  15.     // Aquí deberías devolver el valor
  16. }
  17. // Lo hacemos funcionar
  18. $mysqli = crearConexion();
  19. $menu = cargaMenu($mysqli);
  20.    
  21. // Mostramos menú, padre=0 para menú principal
  22. echo menu(0, $menu);

Por cierto, tu editor muestra todas las cadenas en color rojo, la línea 43, aunque contiene variables que serán interpretadas, es una simple cadena, por eso no hay cambio en los colores.
__________________
- León, Guanajuato
- GV-Foto
  #16 (permalink)  
Antiguo 12/10/2014, 20:48
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Hola Triby. Un gusto que me respondas, sos el autor de este magnífico menú.
Añadí el código que me aconsejaste y solo me muestra la cantidad correcta de ítems del menú sin los nombres y esto en pantalla:





¿Habrá alguna forma de corregirlo, amigo, por favor?

Última edición por mikehove; 12/10/2014 a las 20:57
  #17 (permalink)  
Antiguo 13/10/2014, 12:33
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Creo que al elemento del menú le falta el ['todos']

Este tipo de errores deberías resolverlos con:
- var_dump() para saber el contenido de una variable (o más)
- Ver el código fuente del navegador
- Analizar si las variables usadas son las correctas
__________________
- León, Guanajuato
- GV-Foto
  #18 (permalink)  
Antiguo 13/10/2014, 14:26
 
Fecha de Ingreso: marzo-2003
Ubicación: Gandia, Valencia, España
Mensajes: 55
Antigüedad: 21 años, 1 mes
Puntos: 3
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Hola,

creo que para empezar podrías simplificar el código y la legibilidad utilizando combinación de comillas simples y dobles

Código PHP:
         $html .= '<li><a href="pagina.php?opcion='.$id_menu.'">'.$menu[$id_menu]['menu_nombre'].'</a>'
Creo que lo que tratas de mostrar es un árbol de categorías, si buscas información sobre esto, será mucho más sencillo que encuentres ejemplos que te puedan hacer entender mejor.

Código PHP:
function cargaMenu($mysqli) {
    
$sql "SELECT * FROM productos";
    
$res $mysqli->query($sql);
    while(
$row $res->fetch_assoc()) {
      
$menu['nombres'][$row['productos_id']] = $row['productos_nombre'];
      
$menu['padres'][$row['productos_parent_id']] = $row['productos_parent_id'];
    }

    return 
$menu;
}

//--

function menu($id_padre$menu) {

    
$html "<ul>\n";
    foreach(
$menu['nombres'][$id_padre] as $productos_id => $productos_nombre) {
        
$html .= '<li><a href="pagina.php?opcion='.$productos_id .'">'.$productos_nombre.'</a>';
        if (isset(
$menu['padres'][$productos_id ])) { $html .= menu($productos_id$menu); }
        
$html .= "</li>\n";
    }

    
$html .= "</ul>\n";

    return 
$html;


He separado el array en dos para no tener índices de texto y numéricos juntos, de esta forma tienes por un lado los nombres y por el otro las que tienen padres. De este modo el array de los nombres además te permite recorrerlo mucho más sencillamente.

P.D. No lo he verificado en un editor de código.

Suerte
__________________
Sueño luego existo
  #19 (permalink)  
Antiguo 14/10/2014, 00:09
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Respuesta: Dudoso error de sintaxis de 1 línea PHP

Muchas gracias Triby y Macius. Muy buenos sus consejos e ideas!
Funciona!! Son unos Genios.

Ahora lo que le agregué es la opción de ver o no los hijos con este código:

Código PHP:
Ver original
  1. function menu($id_padre, $hijos, $menu) {
  2.     $html = "<ul>\n";
  3.       foreach($menu[$id_padre] as $id_menu) {  
  4.           $html .= '<li><a href="pagina.php?opcion='.$id_menu.'">'.$menu['todos'][$id_menu]['productos_nombre'].'</a>';
  5.          // Este menú tiene hijos?
  6.          if(isset($menu[$id_menu])) {      
  7.             //Si quiero ver los hijos
  8.             if($hijos=="ver_hijos") {                
  9.               $html .= menu($id_menu, $hijos, $menu );
  10.             }
  11.             //o no verlos  
  12.             if($hijos=="ocultar_hijos "){                  
  13.             }          
  14.          }       
  15.          $html .= "</li>\n";
  16.     }
  17.     $html .= "</ul>\n";
  18.     // Aquí deberías devolver el valor
  19.     return $html;  
  20. }
  21. echo menu(1,  "ocultar_hijos", $menu);

Ahora necesito sumar los hijos, para seguir desarrollando este buenísimo Menú.
Abro un nuevo tema:

http://www.forosdelweb.com/f18/sumar...orias-1111028/

Etiquetas: html, sintaxis
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 15:54.