Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-11-2007
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Menú dinámico con JavaScript y PHP

Hola comunidad,

Les comento que tengo implementado un menú dinámico hecho mediante javascript y php y que en mi PC funciona correctamente tanto en Firefox y IE6, debo decir además que en mi PC yo configure el PHP, MySQL y Apache 2.0.

Por otra parte he instalado en mi notebook el AppServ y fue en realidad por flojera (es mas rápido...) y carge mis páginas, pero al momento de cargar el menú dinámico este no aparece simplemente.

Les dejo el código que cree para implementar este menu tipo "arbolito"

Código PHP:
var TREE_NODES={
 format:{
  left:0,
  top:86,
  width:220,
  height:600,
  e_image:"../../images/fo_p.gif",
  c_image:"../../images/fc_p.gif",
  i_image:"../../images/i_p.gif",
  b_image:'../../images/b.gif',
  bgcolor:"#d4d0c8",
  back_bgcolor:"#d4d0c8",
  animation:0,
  padding:2,
  level_ident:10,
  dont_resize_back:1
 },
 sub:[
  {html:'Sistema Cabo V 1.0',
   sub:[
   <?php
   session_start
();
   
$link mysql_connect("localhost","root","160783");
   
mysql_select_db("cabo");
   
$idPerfil $_SESSION['idPerfil'];
   
$resultPadre mysql_query("select distinct m.grupo
                                     from perfiles p
                                     inner join
                                       perfiles_menus mp on p.idperfil = mp.idperfil
                                     inner join menus m on mp.idmenu = m.idmenu
                                     where p.idperfil = 
$idPerfil",$link);
              
$totalFilasPadre mysql_num_rows($resultPadre);
              
$contPadre 1;
              while(
$rowPadre mysql_fetch_array($resultPadre,MYSQL_NUM)){
                
$rowGrupo $rowPadre[0];
                echo 
"{html:'$rowPadre[0]',";
                echo 
"sub:[";
                  
$resultHijo mysql_query("select m.*
                                             from perfiles_menus pm
                                               inner join menus m on pm.idmenu = m.idmenu
                                             where pm.idperfil = 
$idPerfil
                                               and m.grupo = '
$rowGrupo'",$link);
                  
$totalFilas mysql_num_rows($resultHijo);
                  
$cont 1;
                  while(
$rowHijo mysql_fetch_array($resultHijo,MYSQL_NUM)) {
                   if (
$cont $totalFilas)
                   echo 
" {html:'$rowHijo[1]', url:'$rowHijo[2]'},";
                   else
                    echo 
" {html:'$rowHijo[1]', url:'$rowHijo[2]'}";
                   
$cont++;
                  }
                  echo 
"]";
                  if (
$contPadre $totalFilasPadre)
                    echo 
'},';
                  else {
                    echo 
'}';
                  }
                  
$contPadre++;
          }
   echo 
']';
 
  echo 
'}';
 echo 
']';
echo 
'}';
?>
Este código funciona bien en mi pc pero no en mi notebook.... y el firefox de mi notebook dice el siguiente error:

invalid falg after regular expression (Linea 22)
TREE_NODES is not defined (Linea 39)

Mi pregunta es: ¿Existe alguna configuración especial en el archivo ini para las expresiones regulares?, ¿Es posible?

Esperando la respuesta de todos los maestros.........realmente la necesito, me tiene desconcertado este error.

Gracias

Hasta Luego .-
__________________
No todo es como parece ser...
Responder Con Cita
  #2  
Antiguo 24-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A ver si podemos ayudar en algo. Digo yo que, ¿el error que te aparece lo imprime PHP, o, según entiendo, es el navegador (acaso la extensión FireBug) la que te muestra el mensaje de error? Porque la variable "TREE_NODES" es una variable de JavaScript, ¿no?

Por otro lado, en el código no veo que hagas uso de ninguna expresión regular... y, si seguimos los mensajes de error y miramos en la línea 22 y 39 del código que muestras, pareciera que ahí no hay ningún error, o que las líneas no coinciden, vaya...

La cosa es que te funciona en un sitio y en otro no... ¿se trata de la misma versión de PHP? ¿Qué extensión tiene el Script problemático? A ver si va a ser un archivo ".js" y, en el sistema en que obtienes el error, este tipo de archivos no es procesado como PHP, como por otro lado es lo normal...

No sé... a ver si damos con la tecla entre todos.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 24-11-2007
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Primero que nada gracias por responder compañero Dec.

Cita:
Empezado por dec
es el navegador (acaso la extensión FireBug) la que te muestra el mensaje de error? Porque la variable "TREE_NODES" es una variable de JavaScript, ¿no?
Así es, el error lo notifica Javascript mediante la consola de error del FireFox (no Firebug), y "TREE_NODES" es una variable JS.

Cita:
Empezado por dec
La cosa es que te funciona en un sitio y en otro no... ¿se trata de la misma versión de PHP?
No se trata de la misma versión de PHP, en mi PC yo hice la instalación de PHP 5.2.0, Apache 2.0.52 por separado, y en mi notebook instale el AppServ con Php 5.2.3 y Apache 2.2.4

Cita:
Empezado por dec
¿Qué extensión tiene el Script problemático?
Extensión PHP, ahí coloco texto que en el PC lo interpreta correctamente como javascript y también texto de PHP como se ve en el primer mensaje de este hilo, pero que con AppServ y en la otra máquina no funka...

ese archivo php lo gatillo de la siguiente forma.

Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<
html>
<
head>
<
link rel="stylesheet" href="../../css/conf_tree.css" type="text/css">
<
link rel="stylesheet" href="../../css/conf_principal.css" type="text/css">
<
script language="JavaScript" src="../../jscripts/sdtree.js" type="text/javascript"></script>
<script language="JavaScript" src="../../jscripts/structure_tree.php" type="text/javascript"></script>
<script language="JavaScript" src="../../jscripts/conf_tree.js" type="text/javascript"></script>
</head>
<body style="margin: 0px"> 
<table border="0" width="99%" cellpadding="0" cellspacing="0" class="headerBackground">
<tr><!-- width="1017" -->
<td height="60" valign="bottom" align="center" class="letraHeader">Sistema de Embalaje Cabo</td>
</tr>
<tr>
<td height="23" align="right" valign="top" class="headerLogin">&nbsp;
Usuario conectado: {$nomUsuario} | Perfil: {$nomPerfil} </td>
</tr>
</table>
</body>
</html> 
allí se puede ver como la página carga el archivo
../../jscripts/structure_tree.php y que es el archivo encargado de generar el arbolito dinámico mediante Javascript y PHP en un archivo con extensión PHP.

Dec, espero haber aclarado tus dudas y que tengas mas información para ver el problema que tengo, gracias nuevamente.

Hasta Luego .-
__________________
No todo es como parece ser...
Responder Con Cita
  #4  
Antiguo 24-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. La expresión regular debe ponerla por su parte el Script que usas para crear el "treeview". Se me ocurren varias cosas, pero, te preguntaría si las pruebas las haces con la misma base de datos, con los mismos datos.

Haces una cosa que acaso sea problemática y que tiene que ver con esto último. "Imprimes" los datos que traes de la base de datos "tal cual", cuando, a lo mejor es preciso "escaparlos", para evitar problemas. Más aún si estos datos van a ir dentro de "comillas", por ejemplo.

Personalmente uso esta función cuando tengo que imprimir un dato procedente de la base de datos en HTML, para evitar problemas:

Código PHP:
  static public function Str2Htm($input,$charset='utf-8'){
    return 
htmlentities(strip_tags(
     
stripslashes($input)),ENT_QUOTES,$charset);
  } 
Esto viene a cuento de que, por ejemplo, si recibes de la base de datos algo como "O'connor", es posible que la "comilla simple" rompa el Script en que estás insertando el dato en cuestión. O si recibes otros símbolos como "\", es posible que esto rompa el Script, expresiones regulares, etc. Es posible que me equivoque, pero, yo miraría por ahí... para empezar, por lo menos.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 24-11-2007
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Cita:
Empezado por dec Ver Mensaje
Código PHP:
  static public function Str2Htm($input,$charset='utf-8'){
    return 
htmlentities(strip_tags(
     
stripslashes($input)),ENT_QUOTES,$charset);
  } 
Esto viene a cuento de que, por ejemplo, si recibes de la base de datos algo como "O'connor", es posible que la "comilla simple" rompa el Script en que estás insertando el dato en cuestión. O si recibes otros símbolos como "\", es posible que esto rompa el Script, expresiones regulares, etc. Es posible que me equivoque, pero, yo miraría por ahí... para empezar, por lo menos.
Entonces a cada Echo que haga en mi script debo mandarle esta función, esa función recibe dos parametros, que se supone que le mando al segundo parámetro ?

¿Podrías darme un ejemplo?

Gracias.

Hasta Luego .-
__________________
No todo es como parece ser...
Responder Con Cita
  #6  
Antiguo 24-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Hombre, a cada "echo"... pero sí tienes que hacerlo "a discrección". El segundo parámetro es para indicárselo a la función en que es preciso y tiene que ver con el "charset" que estés utilizando, tanto en la página Web como en la base de datos. Yo tengo por defecto "utf-8", puesto que el "charset" que procuro usar.

Respecto del ejemplo. Ahí va uno más bien sencillo, porque, te advierto que yo en esto tampoco me llego a aclarar del todo, si bien es cierto que, efectivamente, intuyo que por ahí pueden ir los tiros en este caso... lo mismo hasta en esto estoy equivocado.

Código PHP:
<?php

$value 
"Pedrolopez\\";

//$value = Str2Htm($value);

?>

<p onclick="alert('<?php echo $value ?>')">
Un párrafo sobre el que se puede hacer clic
</p>
Si ejecutas el código anterior verás que el "alert" no funciona. Sé que es algo forzado, que acaso no encuentres nunca un registro en la base de datos que contenga esa "barra invertida", pero, piensa que esto se hace también para evitar el que pueda insertarse un registro así... adrede.

Ahora, si "descomentas" la instrucción en que se hace pasar el "valor" por la función "Str2Htm()" verás que el "alert" de JavaScript funciona como se espera, porque, no se corta la cadena que se supone ha de mostrar.

Sin embargo, no nos vamos a engañar, yo esperaba que algo así también funcionase:

Código PHP:
$value = "Jhon O'Connor";

$value = GbValidate::Str2Htm($value);

?>

<p onclick="alert('<?php echo $value ?>')">
Un párrafo sobre el que se puede hacer clic
</p>
Pero, no lo hace. Porque, aunque la comilla "simple" del valor se convierte a su correspondiente "entidad", lo cierto es que JavaScript "reconoce" dicha entidad, la toma como la comilla simple que es y, ¡zas!, el "alert" no funciona como se espera...

No sé. Prueba por ese camino. Sobre esto del escapar cadenas hay que llevar cierto cuidado. Por ejemplo, si la cadena va a mostrarse dentro de un "input" o "textarea" yo, por lo pronto, no las escapo. Si ha de mostrarse en otro lugar sí que lo hago.

Y, a la contra pasa lo mismo, me refiero a que cuando guardas valores en la base de datos estos han de ser previamente escapados, pero, no con la función que antes copié aquí. Yo, para estos menesteres, uso esta otra función, que me recomendó un conocido hace bastante tiempo:

Código PHP:
  public function Escape($input){
    if(
get_magic_quotes_gpc()){
      
$input stripslashes($input);
    }
    return @
mysql_real_escape_string(
     
$input$this->dbConnection);
  } 
Se trata de escapar con esa función cualquier cadena que vaya a formar parte de una consulta SQL. Y sirve, entre otras cosas, para evitar el "SQL injection" ese de que tanto se habla, o de que tan poco se habla...

Puede parecer "pesado" tener que hacer algo así cuando insertas registros, por un lado, y cuando los muestras, por otro, pero, no queda otra. A no ser que controles absolutamente a los usuarios de la aplicación y estos no vayan a pretender nunca "meter la pata", pero, aún así...

Por ejemplo, si vas a imprimir un determinado valor dentro de HTML, como poco, es menester escapar las posibles etiquetas HTML que dicho valor contenga, como, por ejemplo, < script >... que puede estar ahí con mala idea...

No sé si te estoy ayudando en algo o no Lúcas, pero, en fin, como he dicho más arriba, a ver si entre todos sacamos algo en claro.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Combo o menu desplegable dinamico Andrea Martinez PHP 5 25-02-2007 00:38:28
menú dinámico con eventos dinámicos mguixot OOP 4 04-07-2006 16:05:05
¿Como crear menu dinamico. JXJ Varios 3 10-09-2005 04:50:09
Main Menu Dinamico cahosoft Varios 2 30-06-2005 09:45:56
Menu dinamico xxxFALKORxxx OOP 1 23-03-2005 18:06:51


La franja horaria es GMT +2. Ahora son las 06:54:41.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi