Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Diabliyo en 8 Noviembre 2007, 04:35 am



Título: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 8 Noviembre 2007, 04:35 am
Hola:

De un tiempo buen tiempo aca casi todos los hosting que ofrecen soporte de PHP poseen la configuracion de register_globals=off, por lo cual varias aplicaciones que he realizado en PHP he tenido que modificarlas para que funcionen :( !!...

Pero me he topado con un PROBLEMON :(, el cual va asi:

En una aplicacion que realize es indispensable tener a la mano un conjunto de variables para conectarme a la base de datos (mysql), en donde dichas variables las tenia dentro de un archivo *.php, asi que, cuando el usuario cambia sus PASSWORDS (ya sea del PANEL DE CONTROL o BASE DE DATOS) antes lo unico que hacia era abrir el archivo (fopen) config.php y escribia la informacion, de tal manera que el archivo quedaba asi (NOTA: es solo un ejemplo):

Código:
//Archivo: config.php

<?php
$user= "usuario";
$pass= "password";
$user_db= "userdb";
$pass_dv="passdb";
$server= "nombre";
$base_dd= "nombre_base_de_datos";
?>

Y pues actualmente este archivo de configuracion NO funciona :(, debido a la configuracion de 'register_globals=off'... 'Uso de Variables GLOBALES desactivado'....

Ahora he tenido que realizar la carga de variables de esta forma:

Código:
//Nuevo archivo: config.php

<?php
define( USER, "" );
define( PASS, "" );
//etc, etc...
?>

Mi problema es que: no enccuentro la forma para que de cierta manera el usuario al momento de instalar la aplicacion, escribir la informacion en dichas variables SIN necesidad de realizar la apertura de archivo directamente (fopen)...

Alguien podria decirme alguna forma que pueda realizar la escritura en dicho archivo config.php ???...

Otra cosa, es conveninete el uso de variables definidas de esa forma ??

Gracias por su atencion !!

bye bye


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Universal SAC en 8 Noviembre 2007, 04:54 am
De verdad que no entiendo el problema... considero que es más facil dejar el archivo de configuración tal cual, pero modificar el archivo que recoge los datos para insertarlos (en config.php). Tan solo definir si vienen de forma POST (u otros, dependiendo tu aplicación).

Además te evitas que tengas problemas nuevamente al cambiar de configuración el php.
Saludos.


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 8 Noviembre 2007, 05:33 am
De verdad que no entiendo el problema... considero que es más facil dejar el archivo de configuración tal cual, pero modificar el archivo que recoge los datos para insertarlos (en config.php). Tan solo definir si vienen de forma POST (u otros, dependiendo tu aplicación).

Además te evitas que tengas problemas nuevamente al cambiar de configuración el php.
Saludos.

No companero, no entiendes el problema....

El problema es que las variables GLOBALES no pueden ser utilizadas en PHP... pondre un ejemplo de variables GLOBALES.

Código:
//Este era el config.php

//Archivo: config.php

<?php
$user= "usuario";
$pass= "password";
$user_db= "userdb";
$pass_dv="passdb";
$server= "nombre";
$base_dd= "nombre_base_de_datos";
?>

Código:
//pagina que utilizaba el archivo config.php

<?php
incluse( "config.php" ); //incluimos las variables para utilizarlas en todas partes
incluse( "funciones_bbb.php" ); //aqui estaran las funciones que utilizaran variables globales
?>

<html>
<head>
<title>PAGINA</title>
</head>

<body>
<?php
if( ($link= conectar()) == "ERROR" )
     echo "Problemas para conectar..";
else
     echo "Conexion exitosa...";
?>
</body>
</html>

En ese codigo... imprimira la pagina: "Problemas para conectar..."... Ya que las variables establecidas en el archivo config.php no se pueden utilizar, ya que son GLOBALES !!...

La solucion para que las variables puedan ser utilizadas, se soluciona modificando las variables como DEFINIDAS, asi...

Código:
//nuevo config.php

define( user, "usuario" );
define( pass, "password" );
define( user_db, "userdb" );
define( pass_db,"passdb" );
define( server, "nombre" );
define( base_dd, "nombre_base_de_datos" );

La solucion es FACIL, el problema es en si: Como seria mas conveniente modificar el archivo config.php sin necesidad de realizar la apertura normal (fopen) para modificacion (osea, modificacion es CUANDO EL USUARIO desea cambiar sus passwords)...

Espero y entiendan como va el asunto !!

bye bye


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: alone-in-the-chat en 8 Noviembre 2007, 06:07 am
me parece que si deseas abrirla con fopen directamente debes de poseer permisos de escritura sobre el archivo y tener un config.php con permisos de escritura es peligroso

hace tiempo hice un cms (que hasta ahora uso  ;D ) la particularidad de el era que creaba los archivos html (por que es mas rapido que se carguen cuando ya estan creados en vez de generarlos en base a los datos de la bd ) en donde le indicases , pero ninguna carpeta tenia permisos de escritura lo que hacia era crear el archivo en temporal luego me conectaba x ftp y lo subia
(se que es un poco exagerado , pero me parece mas seguro  :-\ )

Saludos


Edito

Eso de conectarse x ftp y subirlo ......
lo hacia el sistema :xD
puede que pareciese que hiciese el proceso manualmente
 



Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Universal SAC en 8 Noviembre 2007, 06:20 am
Ahh, ya entendí cual es el problema. El problema es que no sabes lo que hace el valor "register_globals". No se trata de evitar las variables globales en los codigos, sino de evitar que las variables globales fueran tomadas (y registradas) desde cualquier forma de entrada de datos.

Osea que si alguien enviaba la variable OK como post, o como get, o como cookie... modificaría el valor de la variable $ok de tu codigo. (eso es con register_globals activado). Y ahora con register_globals desactivado, las variables globales vienen con una sintaxis más completa y estricta, si envian OK por get, el valor estará en $_GET['ok'] y será diferente a una variable global $ok que tengas en el código.

Por lo que el último ejemplo que colocaste, se soluciona agregando en la función conectar() (que deduzco se encuentra en "funciones_bbb.php") una linea de este tipo:

global $user, pass, $user_db; //y todas las que quieras
Quedando así:

//en funciones_bbb.php
function conectar(){
global $user_db,$pass_dv,$server,$base_dd;
$con=mysql_connect($server,$user_db,$pass_dv);
$link=mysql_select_db($base_dd,$con);
return $link
}
Saludos

EDITO: Si es necesario, también hay que declarar las variables como globales en config.php. En mi caso, no fue necesario...


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 8 Noviembre 2007, 06:40 am
Ahh, ya entendí cual es el problema. El problema es que no sabes lo que hace el valor "register_globals". No se trata de evitar las variables globales en los codigos, sino de evitar que las variables globales fueran tomadas (y registradas) desde cualquier forma de entrada de datos.

Osea que si alguien enviaba la variable OK como post, o como get, o como cookie... modificaría el valor de la variable $ok de tu codigo. (eso es con register_globals activado). Y ahora con register_globals desactivado, las variables globales vienen con una sintaxis más completa y estricta, si envian OK por get, el valor estará en $_GET['ok'] y será diferente a una variable global $ok que tengas en el código.

Por lo que el último ejemplo que colocaste, se soluciona agregando en la función conectar() (que deduzco se encuentra en "funciones_bbb.php") una linea de este tipo:

global $user, pass, $user_db; //y todas las que quieras
Quedando así:

//en funciones_bbb.php
function conectar(){
global $user_db,$pass_dv,$server,$base_dd;
$con=mysql_connect($server,$user_db,$pass_dv);
$link=mysql_select_db($base_dd,$con);
return $link
}
Saludos

EDITO: Si es necesario, también hay que declarar las variables como globales en config.php. En mi caso, no fue necesario...

Nop....

La unica diferencia que existe al tener register_globals activado o desactivado, es que:

register_globals= on
Las variables que se transportan de una pagina hacia otra (ejemplo: un formulario), pueden ser consultadas directamente: echo $variable; y estaran disponibles en las funciones que invoques...

register_globals= off
Las variables que se transportan de una pagina hacia otra (ejemplo: un formulario), podran ser consultadas siempre y cuando el formulario este en method=POST, y seran accesibles por $_POST["variable"], posteriormente las variables invocadas desde un enlace (<a href="variable=X">), seran tratadas con $_GET["variable"] y estas NO trascenderan hacia las otras hojas.

Por lo que, si creas un archivo .php el cual INCLUYES despues, las variables que tengas en dicho ARCHIVO PHP (config.php) no estaran disponibles dentro de las FUNCIONES !!...

Nose si me entiendas o sabes un poco de variables GLOBALES y NO GLOBALES....

Una variable global esta disponible en TODAS partes (siempre y cuando este incluida al inicio)....

Una variable no global solo estara disponible dentro del pedazo de codigo en donde se invoco la variable, y si accedes a una FUNCION, las variables no existiran debido a que son solo LOCALES.

En conclusion, declarar:

Código:
global $user, pass, $user_db;

Es un poco anti etico, debido a que las variables GLOBALES son PELIGROSAS en cuestiones de INYECCION/EXTRACCIO DE CODIGO... En cambio, una variable DEIFNIDA es como una varable ESTATICA, la cual se diferencia poque no tiene el simbolo de $ al inicio...


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Universal SAC en 8 Noviembre 2007, 07:03 am
Confiezo que soy novatón y que seguramente eres más habilidoso que yo para programar en php... pero en este caso específico creo que la solución que te ofresco es buena y correcta.

De hecho, he probado (hace unos segundos) la inyección de código o el reemplazo del valor de una variable global teniendo register_globals en ambas modalidades. Únicamente lo logré estando ON, probé con GET, POST, COOKIES y un formulario sin específicar método. Por lo que:

Citar
Es un poco anti etico, debido a que las variables GLOBALES son PELIGROSAS en cuestiones de INYECCION/EXTRACCIO DE CODIGO...

...me atrevo a decir que esto no es posible mientras register_globals=off.

Sostengo que la solucíón que di anteriormente, es la más facil y no hay problemas de seguridad con register_globals desactivado.

Como último argumento, puedes dejar las variables de config.php como NO GLOBALES (sí, entiendo lo que es global y lo que no, jojo) y pasar su valor como parámetros de la función "conectar".

Espero sirva te sirva de algo lo que respondo. Saludos.


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Hans el Topo en 8 Noviembre 2007, 14:20 pm
en parte es como dice SAC

si tienes en off php no te construye variables con los valores de $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $REQUEST y $_SESSION
si lo tienes a on si lo hace

... no tiene más misterio, lo otro es igual en ambos casos porque no tiene nada que ver


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 8 Noviembre 2007, 15:33 pm
en parte es como dice SAC

si tienes en off php no te construye variables con los valores de $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $REQUEST y $_SESSION
si lo tienes a on si lo hace

... no tiene más misterio, lo otro es igual en ambos casos porque no tiene nada que ver


Si tiene mucho que ver, porke las variables se vuelven LOCALES y para transportarlas a una funcion se deben incluir como argumento.

Como último argumento, puedes dejar las variables de config.php como NO GLOBALES (sí, entiendo lo que es global y lo que no, jojo) y pasar su valor como parámetros de la función "conectar".

Acabas de dar con la RAZON principal mi amigo jejejej.... De echo, como al inicio del post dije, la aplicacion en donde utilizo dicho config.php ya es bastantito GRANDE, de echo creo que serian MUCHAS LAS FUNCIONES que tendria que MODIFICAR (agregarles argumentos) para que tomen los valores de las variables...


La solucion al problema seria de dos formas:

FORMA 1 (como tu lo planteaste)
Utilizando la definicion "global $user, pass, $user_db;", de esta forma las funciones reconoceran los valores.

FORMA 2 (modificandolas como define())
Quedarian cada una asi: define( user, "username" );, y habria que modificar el contenido de las funciones, en donde antes era: $user y ahora seria: user.

Pero bueno, intentare la forma que me mencions, ya que de echo tengo un algoritmo especial para leer y escribir dentro de los archivos config.php, el cual pues estaba pensando desechar debido a la adopcion de las variables mediante define().

Ahorita les podre code....

bye bye


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 8 Noviembre 2007, 17:27 pm
Hola:

Estoy detectando que si declaramos: global $var, $var2;, debe ser DENTRO del archivo config.php, por lo cual no es recomendable ya que el SOFTWARE utiliza el archivo config.php para escribir o actualizar la informacion cuando el usuario modifique sus passwords.

Osea que, no lo veo UTIL...

bye bye


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 8 Noviembre 2007, 17:38 pm
Este es el codigo de mi software...

Código:
<?php
/*
OneFloor-PHP :: Sistema Base para iniciar tus proyectos en PHP

Codigo Fuente del sistema case para iniciar tus proyectos en PHP, con la finalidad de ser el primer
esclaron en la creacion de proyectos basados en el lenguaje de programacion web PHP. Este codigo queda
reservado a los Derechos del Autor con su respectiva Licencia Copyright. De modo que, cualquier alteracion, uso ilegal o publicacion debe ser tal cual esta, conservando los derechos del mismo.

Autor: Angel Cantu Jauregui
Nick: Diabliyo
Web: http://www.sie-group.net/
Blog: http://elite-mexicana.blogspot.com/
Foro: http://foro.sie-group.net/
MSN: darkdiabliyo@hotmail.com
E-Mail: darkdiabliyo@gmail.com
*/

include( "modulos/modulos.php" ); //este modulo llama a todos los modules existentes
?>
<html>
<head>
<title>Espacio Web Diabliyo</title>
<link href="templates/uat-rural/css/estilo.css" type="text/css" rel="stylesheet">
<style rel="stylesheet" type="text/css">
.letras
{
font-family:verdana;font-size:12px;color:black;
}
.letras a
{
font-family:verdana;font-size:12px;color:black;font-decoration:none;
}
.letra a:visited
{
font-family:verdana;font-size:12px;color:black;font-decoration:none;
}
</style>
</head>

<body>
<?php
echo "<table cellspacing=\"0\" cellpadding=\"0\" align=\"center\" id=\"tabla_general\">";

if( $base_user && $base_pass && $base ) //si las variables tienen un VALOR accede
$link= conectar();
else //si las variables estan VACIAS entonces accede AQUI
$link="INSTALL";

if( $link=="INSTALL" )
include( "install.php" ); //instalar el software

else if( $link ) //mostrar pagina segun el tema existente
{
include( "templates/uat-rural/cuerpo/logos.php" );
include( "templates/uat-rural/cuerpo/menus.php" );
include( "templates/uat-rural/cuerpo/noticias.php" );
include( "templates/uat-rural/cuerpo/extras.php" );
include( "templates/uat-rural/cuerpo/firma.php" );
}

mysql_close( $link );

echo "</table>";
?>
</body>
</html>

Esto es un poco de codigo del archivo modulos.php

Código:
<?php
include( "admin/config.php" ); //aqui estan las VARIABLES
include( "base.php" ); //funciones para base de datos
include( "noticias.php" ); //modulo para noticias
..... //mas modulos
?>

El problema como se puede detectar es que despues de instalarse la aplicacion, JAMAS muestra la pagina, SIEMPRE pone el formulario de instalar aplicacion (install.php) debido a que 'register_globals=Off', de modo que las variables contenidas en config.php no pueden ser utilizadas en las FUNCIONES para conectar a la Base de Datos :( !!....

He intentado hacer lo que dice Universal SAC, y segun quedo asi el archivo 'modules.php':

Código:
<?php
global $user_db, $pass_db, $server, $base; //esas son las variables contenidas en el archivo config.php

include( "admin/config.php" ); //aqui estan las VARIABLES
include( "base.php" ); //funciones para base de datos
include( "noticias.php" ); //modulo para noticias
..... //mas modulos
?>

Que me sugieren hacer ???.....

Ya que el archivo config.php debe tener esta notacion:

Código:
<?php
$base_user="diabliyo";
$base_pass="angelsrln";
$server="localhost";
$base="prueba";
?>


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: alone-in-the-chat en 8 Noviembre 2007, 18:00 pm
Podria usar variables de session mete tus variables en variables de Session y despues con un extract()
encima de cada script te evitas estar modificando una x una todas las funciones que llaman a esas variables

Saludos


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 8 Noviembre 2007, 18:15 pm
Hola:

Gracias por tu aportacion, pero si las metiece en variables de sesion, tendria al final que crear siempre 5 variables de sesion :S... 4 variables de sesion que son las necesarias para consultar la BDD y 1 variable para la sesion dle usuario...

Nop... no lo creo conveniente..

Me gustaria mejor utilizar variables definidas...

Alguien sabe algun comando para INVOCAR las variables EXISTENTES o creadas por mi ??... a su ves el VALOR de dichas variables ??

NOTA: me refieron avariables creadas de este tipo: define( var, "dato" );

bye bye


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: alone-in-the-chat en 8 Noviembre 2007, 18:35 pm
Bueno cada uno usa lo que le parezca ams conveniente  :D

A tu pregunta

a lo mejor esta funcion es lo que deseas

http://www.php.net/manual/en/function.get-defined-constants.php

fijate en la parte de la matriz que contiene las constantes definidas x el usuario

Saludos


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 8 Noviembre 2007, 19:03 pm
Hola:

Realize la invocacion de la funcion que me indicaste de esta manera print_r( get_defined_constants() );, y me envia un monton de variables definidas con sus valores, y solamente HASTA EL FINAL aparecen las MIAS, pero no encuentro la manera de aceder a ellas :( !!... Aqui te dejo lo que me mostro (no todo... solo lo ultimo)

Código:
[MYSQL_CLIENT_IGNORE_SPACE] => 256
[base_user] => diabliyo
[base_pass] => 1234
[server] => localhost
[base] => prueba )

No encuentro la manera de acceder a los valores ni a los nombres... alguien que me pueda ayudar ??

Gracias de antemano alone-in-the-chat...

bye bye


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: alone-in-the-chat en 8 Noviembre 2007, 19:08 pm
kreo que asi iria la cosa

Código
  1. $DatosConexion = $Matriz['user'];
  2. $base_user = $DatosConexion['base_user'];
  3. $base_pass = $DatosConexion['base_pass'];
  4. $base = $DatosConexion['base'];
  5. $server = $DatosConexion['server'];
  6.  

No lo eh probado pero debe de funcionarte


Saludos


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 8 Noviembre 2007, 19:16 pm
kreo que asi iria la cosa

Código
  1. $DatosConexion = $Matriz['user'];
  2. $base_user = $DatosConexion['base_user'];
  3. $base_pass = $DatosConexion['base_pass'];
  4. $base = $DatosConexion['base'];
  5. $server = $DatosConexion['server'];
  6.  

No lo eh probado pero debe de funcionarte


Saludos


Sip, asi como lo dices SI funciona y me parece bien (de echo ya lo hice asi jejeje).. pero en este ejemplo que PLANTEAS, de antemano sabes CUALES SON LAS VARIABLES, en caso que se agregen nuevas variables DEFINIDAS habria que modificar el codigo fuente y sera complicado hacer eso a cada rato que se actualize la aplicacion...

Existe alguna forma de tomar el puro NOMBRE de las variables definidas ??, esto con el fin de saber CUANTAS VARIABLES definidas existen por el usuario y creadas por mi ??

Gracias de antemano :D !!

bye bye


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: alone-in-the-chat en 8 Noviembre 2007, 19:29 pm
usa foreach para recorrer el array $DatosConexion


Saludos


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 8 Noviembre 2007, 22:34 pm
Hola:

Listo, nome gusto mucho pero finalmente deje asi la funcion que crea el archivo config.php.

Código:
function crear_config()
{
$raiz= getcwd(); //tomamos directorio actual

chdir( "admin/" ); //nos movemos al directorio 'admin/'

$buf_salida=""; //variable buffer

if( !($fp= fopen( "config.php", "w" )) ) //abrimos archivo en modo escritura
{
chdir( $raiz );
echo "<span id=\"letras_error\">Error 06: Problema para Crear Archivo de Configuracion. (2)</span><br>";
return 0;
}

else //en caso de exito de la apertura
{
$var_post[0]= $_POST["install_mysqlusername"];
$var_post[1]= $_POST["install_mysqlpassword"];
$var_post[2]= $_POST["install_dominio"];
$var_post[3]= $_POST["install_bd"];

$buf_salida= "<?php\n"; //inicializamos etiqueta

$buf_salida .= "define( base_user, \"". $var_post[0]. "\" );\n";
$buf_salida .= "define( base_pass, \"". $var_post[1]. "\" );\n";
$buf_salida .= "define( server, \"". $var_post[2]. "\" );\n";
$buf_salida .= "define( base, \"". $var_post[3]. "\" );\n";
$buf_salida .= "?>"; //finalizamos etiqueta

if( fwrite( $fp, $buf_salida )== FALSE ) //escribimos la variable directo y completa en el archivo
{
echo "<span id=\"letras_error\">Error 08: Problema para Escribir informacion al Archivo de Configuracion.</span><br>";
fclose( $fp );
chdir( $raiz );
return 0;
}

else //en caso de exito en la escritura
{
unset($buf_salida);
chdir( $raiz );
fclose( $fp );
return 1;
}
}
}


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: alone-in-the-chat en 8 Noviembre 2007, 23:21 pm
Las Constantes van en mayusculas  ;D   :xD 
 :P

Saludos


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 8 Noviembre 2007, 23:51 pm
Hola:

Asi es, ya las modifique a mayusculas...

Ya todo rula perfecto, excepto que veo un inconveniente el cual nose porque NO puedo acceder a las variables DEFINIDAS :S... El problema va asi:

1- accedo al sitio y me logeo... Al logearme creo la SESSION y consulto en la Base de Datos si existe el USER y PASSWORD, posteriormente al ser validos los datos muestro el panel de control del usuario, todo esto funciona PERFECTO...

2- Como YO tengo mi login de ADMINISTRADOR, me muestro una opcion que dice: Panel de Control, al dar CLICK en dicho link accedo a OTRA index.php ubicada en: http://localhost/admin/index.php (ya que tengo PHP y Apache en mi propio PC)...

Esto es un poco de codigo del admin/index.php

Código:
<?php
include( "../modulos/modulos.php" );
?>

<html>
<head>
<title>Panel de Control -- Administracion del Sitio</title>
<link type="text/css" rel="stylesheet" href="css/estiloadmin.css">
</head>

<body>
<?php
echo "<table cellspacing=\"0\" cellpadding=\"0\" align=\"center\" id=\"tabla_general\">";

//si las SESSIONEs existen, entonces esta logeado.
if( $_SESSION["log_usr"] && $_SESSION["log_pwd"] )
{
//concatenamos
$var= "nick=";
$var .= "'". $_SESSION["log_usr"]. "'";
$var .= ":password=";
$var .= "'". $_SESSION["log_pwd"]. "'";

$cons= consultar_con( "USUARIOS", $var ); //consultamos los datos de la session

if( $cons=="ERROR" ) //error, entonces la SESSION es falsa
echo "<td colspan=\"2\">Login Incorrecto.<p>Base User: ". SERVER. "</td><tr>";

else if( mysql_num_rows( $cons )==0 ) //entonces la SESSION es FALSA
echo "<th>En Construccion</th><tr>";

else //la SESSION es correcta y mostramos PANEL y mas Cosas del Usuario
{
$datos= mysql_fetch_array( $cons );

if( $datos["TIPO_USR"]=="Administrador" )
{
include( "push_modulos.php" );
include( "area_work.php" );
}
else
echo "<td>Acceso Restringido a solo Colaboradores/Administradores</td>";
}
unset( $cons );
unset( $datos );
unset( $var );
}
else
echo "<td>Acceso Restringido a solo Colaboradores/Administradores</td>";

echo "</table>";
?>
</body>
</html>

Y este es el codigo de modulos.php

Código:
<?php
session_start(); //tomamos la session o creamos

include( "admin/config.php" ); //variables
include( "base.php" ); //funciones BDD
include( "noticias.php" ); //funciones
?>

Codigo de la funcion conectar()

Código:
function conectar()
{
if( !($link= mysql_connect( "". SERVER. "", "". BASE_USER. "", "". BASE_PASS. "" )) )
{
echo "<span id=\"letras_error\">Error 01: Error para Conectarse a MySQL.<br>";
echo "Error en Usuario y/o Contrase&ntilde;a.<br>";
echo mysql_error($link). "</span>";
$link= "INSTALL";
}
else if( !mysql_select_db( "". BASE. "", $link ) )
{
echo "<span id=\"letras_error\">Error 02: Problemas para Tomar la Base de Datos.<br>";
echo "No se Encuentra la Base de Datos.<br>";
echo mysql_error($link). "</span>";
$link= "INSTALL";
}
return $link;
}

EL PROBLEMA
Es que NO puedo realizar consultas ni conectarme a la Base de Datos, nose porke :S...  posteriormente trato de imrpimir los valores de las variables de config.php y no puedo acceder a ellas !!

Porque sera ??

bye bye


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Hans el Topo en 9 Noviembre 2007, 00:19 am
en parte es como dice SAC

si tienes en off php no te construye variables con los valores de $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $REQUEST y $_SESSION
si lo tienes a on si lo hace

... no tiene más misterio, lo otro es igual en ambos casos porque no tiene nada que ver


Si tiene mucho que ver, porke las variables se vuelven LOCALES y para transportarlas a una funcion se deben incluir como argumento.

no se vuelven locales porque siempre las tienes disponibles ya sea via $_POST["variable"]


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: alone-in-the-chat en 9 Noviembre 2007, 00:19 am
Me parece que estas colocando las constantes como cadenas

Código
  1. if( !($link= mysql_connect( "". SERVER. "", "". BASE_USER. "", "". BASE_PASS. "" )) )
  2.  


Creo que deberia ser asi

Código
  1. if( !($link= mysql_connect( SERVER,  BASE_USER,  BASE_PASS )) )
  2.  

Je no lo eh probado pero sospecho que seria asi


Saludos


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Universal SAC en 9 Noviembre 2007, 04:13 am
Espero no interrumpir.

Citar
El problema como se puede detectar es que despues de instalarse la aplicacion, JAMAS muestra la pagina, SIEMPRE pone el formulario de instalar aplicacion (install.php) debido a que 'register_globals=Off', de modo que las variables contenidas en config.php no pueden ser utilizadas en las FUNCIONES para conectar a la Base de Datos sad !!....

He intentado hacer lo que dice Universal SAC, y segun quedo asi el archivo 'modules.php':

Código:

<?php
global $user_db, $pass_db, $server, $base; //esas son las variables contenidas en el archivo config.php

include( "admin/config.php" ); //aqui estan las VARIABLES
include( "base.php" ); //funciones para base de datos
include( "noticias.php" ); //modulo para noticias
..... //mas modulos
?>

Entiendo que ya estás utilizando otro método, pero no veo "de más" el dejar ese tema. El problema ahí, fue que la declaración GLOBAL no se realizó en el lugar adecuado... hay que agregarlo DENTRO de cada función! Si en base.php tienes la función CONECTAR (u otras) tienes que agregar global $user_db,$pass_db; //blabla ADENTRO de la función... quedando así:

function conectar(){
     global $user_db,$pass_db,$server,$base;
     $link=mysql_con...............................................
     .............................
     return $link;

Si en otro archivo tienes otra función, pues hay que hacer la misma declaración de global a las variables que desees utilizar. De hecho, si index.php incluye a config.php, no es necesario que modules.php (que también es incluido por index) contenga la declaración global $user_db,$pass_db; //blabla...

Entonces, faltaba hacer la declaración de globales en cada función de cada archivo que utilizase las variables.

Saludos.


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 9 Noviembre 2007, 22:59 pm
Espero no interrumpir.

Citar
El problema como se puede detectar es que despues de instalarse la aplicacion, JAMAS muestra la pagina, SIEMPRE pone el formulario de instalar aplicacion (install.php) debido a que 'register_globals=Off', de modo que las variables contenidas en config.php no pueden ser utilizadas en las FUNCIONES para conectar a la Base de Datos sad !!....

He intentado hacer lo que dice Universal SAC, y segun quedo asi el archivo 'modules.php':

Código:

<?php
global $user_db, $pass_db, $server, $base; //esas son las variables contenidas en el archivo config.php

include( "admin/config.php" ); //aqui estan las VARIABLES
include( "base.php" ); //funciones para base de datos
include( "noticias.php" ); //modulo para noticias
..... //mas modulos
?>

Entiendo que ya estás utilizando otro método, pero no veo "de más" el dejar ese tema. El problema ahí, fue que la declaración GLOBAL no se realizó en el lugar adecuado... hay que agregarlo DENTRO de cada función! Si en base.php tienes la función CONECTAR (u otras) tienes que agregar global $user_db,$pass_db; //blabla ADENTRO de la función... quedando así:

function conectar(){
     global $user_db,$pass_db,$server,$base;
     $link=mysql_con...............................................
     .............................
     return $link;

Si en otro archivo tienes otra función, pues hay que hacer la misma declaración de global a las variables que desees utilizar. De hecho, si index.php incluye a config.php, no es necesario que modules.php (que también es incluido por index) contenga la declaración global $user_db,$pass_db; //blabla...

Entonces, faltaba hacer la declaración de globales en cada función de cada archivo que utilizase las variables.

Saludos.

Ok... tu opcion es valida y funcional, pero yo lo que quiero es evitar el echo de estar declarando lo que tu mencionas, ya que son muchas funciones y bstantitos archivo .php :D !!...

En fin, al parecer va todo bien con CONSTANTES !!


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 9 Noviembre 2007, 23:00 pm
en parte es como dice SAC

si tienes en off php no te construye variables con los valores de $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $REQUEST y $_SESSION
si lo tienes a on si lo hace

... no tiene más misterio, lo otro es igual en ambos casos porque no tiene nada que ver


Si tiene mucho que ver, porke las variables se vuelven LOCALES y para transportarlas a una funcion se deben incluir como argumento.

no se vuelven locales porque siempre las tienes disponibles ya sea via $_POST["variable"]

Creo que no sabes de variables globales y no globales... Las variables no pueden estar disponibles por $_POST[], porke no trascienden hacia las fucniones.... pruebalo tu mismo, instalate Apache+PHP y desactiva register_globals !!

bye bye


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 9 Noviembre 2007, 23:03 pm
Me parece que estas colocando las constantes como cadenas

Código
  1. if( !($link= mysql_connect( "". SERVER. "", "". BASE_USER. "", "". BASE_PASS. "" )) )
  2.  


Creo que deberia ser asi

Código
  1. if( !($link= mysql_connect( SERVER,  BASE_USER,  BASE_PASS )) )
  2.  

Je no lo eh probado pero sospecho que seria asi


Saludos

No creo que tenga eso que ver, porke desde que INSTALO la aplicacion, utilizo esa misma funcion de conectar() durante la instalacion y para coprobar los USERNAME al momento de logearme al software.. El problema es en el panel del administrador (admin/index.php), no puede conectarse :S !!....

Seguire buscando, si tengo respuesta pues publicare el resultado !!

Gracias de antemano !!

bye bye


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Hans el Topo en 10 Noviembre 2007, 00:32 am
en parte es como dice SAC

si tienes en off php no te construye variables con los valores de $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $REQUEST y $_SESSION
si lo tienes a on si lo hace

... no tiene más misterio, lo otro es igual en ambos casos porque no tiene nada que ver


Si tiene mucho que ver, porke las variables se vuelven LOCALES y para transportarlas a una funcion se deben incluir como argumento.

no se vuelven locales porque siempre las tienes disponibles ya sea via $_POST["variable"]

Creo que no sabes de variables globales y no globales... Las variables no pueden estar disponibles por $_POST[], porke no trascienden hacia las fucniones.... pruebalo tu mismo, instalate Apache+PHP y desactiva register_globals !!

bye bye

lo que tu digas jajaja


Título: Re: Duda para manejar variables cuando 'register_globals=off' !!
Publicado por: Diabliyo en 13 Noviembre 2007, 16:15 pm
Hola:

Listo, problema resuelto...

El problema era la posicion en la que me encontraba para despues INCLUIR el archivo config.php, debido a que anteriormente estaba en la direccion raiz del sitio / he incluia directamente el archivo ( include( "admin/config.php" ); ), y posteriormente NO podia LEER las constantes debido a que accedia al directorio admin/ y realizaba erroneamente la inclucion del config.php ( include( "admin/config.php" ); )....

El error lo solucione posicionandome SIEMPRE en el directorio RAIZ del sitio /, debido a como TODOS los archivos importantes y de configuracion son cargados por un modulo UNICO ubicado en: modulos/modulos.php.

Gracias de antemano... Si tengo cualquier otro problemilla, les comento !!

bye bye