Duda en PHP que me trae loco...

Hola gente. Os vengo a postear una duda que ya no se como solucionarla. Se trata de un registro simple en php. La cosa está tal que así:

Este es el archivo config.php
<?
$base ="nombreBD"; //nombre base de datos
$usuario="root"; //usuario de la db
$passwd="";  //contraseña del user

?>


Y este es el registro.php que lo llama otra funcion prueba.php (mediante POST en un formulario html)

<?php
if (!(dirname(__FILE__)."/config.php") )
   die ("¡ERROR! El archivo de configuración no está cargado. Consulta con el Webmaster");
else
   require(dirname(__FILE__)."/config.php");
   
//Capturamos las variables del formulario de registro
$user = $_POST['..............'];
$pais = $_POST['.........'];
$email = $_POST[......'];

....

$conexion = mysql_connect("localhost", $usuario, $passwd);

...


La risa es que están en el mismo directorio todos los archivos. Es decir, config.php, registro.php y prueba.php están en la raíz de mi server (estoy trabajando con Wamp) y cuando hago un registro nuevo me salta con que las variables pertenecientes a usuario y password de la bd no están definidas y por lo tanto el connect() peta.

Notice: Undefined variable: usuario in C:\wamp\www\registro.php on line 36

Notice: Undefined variable: passwd in C:\wamp\www\registro.php on line 36

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\registro.php on line 36
No hay conexion con MYSQL!!!


En serio, agradecería toda la ayuda posible. Porque lo peor es que esto ya lo he hecho otras veces y no tuve problema en agregar el archivo config.php y cogerme dichas variables. Ahora no entiendo absolutamente nada de porqué sucede esto.

ByEs [buenazo]
Aunque estén en la misma carpeta no hay ninguna referencia en prueba.php para que cargue las variables de config.php.

Mírate este enlace:
http://es2.php.net/manual/es/function.include-once.php

Al realizar una petición a prueba.php sólo se ejecuta el código que haya escrito en ese fichero, no en los demás.

Un saludo.
Si, ya lo he probado con require_once e include_once pero nada. La secuencia es aprox esta:

prueba.php
---------------------------------------------
formulario id="formiulario" action="registro.php"

....variables que se envían por POST
---------------------------------------------


registro.php
---------------------------------------------
Capturo las variables enviadas por POST y hago un require del archivo de configuración (con rutas relativas y todo eso, como aproximadamente viene en el enlace que me diste)
---------------------------------------------


config.php
---------------------------------------------
archivo que contiene las variables que necesito. XXXXX y este es el archivo que no reconoce.
----------------------------------------------

Lo gracioso de todo, es que poniendo el siguiente código (en registro.php):

$config = dirname(__FILE__).'\config.php';
$array = pathinfo("$config");
$path = $array['dirname'];
$aconfig = $path."\config.php";
$size = filesize("$config");
echo "El archivo "  . "$aconfig tiene por tamano (bits) :$size";
if (!file_exists("$aconfig") )
   die ("¡ERROR! El archivo de configuración no está cargado o no existe. Consulta con el Webmaster");
else
   include_once("$aconfig");


Y me aparece lo siguiente:

El archivo C:\Archivos de programa\EasyPHP 3.0\www\config.php tiene por tamano (bits) :384
Notice: Undefined variable: usuario in C:\Archivos de programa\EasyPHP 3.0\www\registro.php on line 43

Notice: Undefined variable: passwd in C:\Archivos de programa\EasyPHP 3.0\www\registro.php on line 43

Warning: mysql_connect() [function.mysql-connect]: Acceso negado para usuario: 'ODBC'@'localhost' (Usando clave: NO) in C:\Archivos de programa\EasyPHP 3.0\www\registro.php on line 43
No hay conexion con MYSQL!!!


Es decir, verlo lo ve porque efectivamente tiene esos bits y mediante el uso del dirname y todo eso funciona porque sino, no daría el tamaño correcto, pero, ¿por qué no hace uso de el?

No lo entiendo, en serio...:S

Gracias por tu ayuda igualmente,

ByEs [buenazo]
No sé si voy a poner ayudarte, pero mysql_xxxx es antiguo, usa mysqli_xxx

Vamos lo mismo que ahora pero mysqli.
Hombre, podría probarlo. Pero la gracia es que antes de ejecutar el mysql-connect () hago un echo de las variables de las que va a hacer uso (usuario y passwd) y me dice que no las conoce, que si me fumao algo. Así que, aunque probara no creo que funcionase.

Y de todas formas, para lo que necesito creo que va bien como va, que es muy sencillito eh? una tabla con 4 campos locos y punto.

Gracias aun así.

ByEs [buenazo]
Prueba con:

include_once($aconfig);


sin comillas.

Un saludo.
Gracias. También lo he intentado y nada. Me sigue apareciendo igual.

Por cierto, no lo he comentado, pero, ¿Hay que tocar las opciones del server? Como register_globals ON o algo?

ByEs [buenazo]
A ver, vamos a hacer una prueba rápida:

- Crea dos ficheros en el directorio padre del servidor web:

a.php
<?php
$variable = 'variable';
?>


b.php

<?php
include_once('a.php');

echo ($variable);
?>


y comprueba http://localhost/b.php
Ok, esto si funciona (ya me estoy empezando a mosquear...)

ByEs [buenazo]
Vamos ahora con otra:

config.php

<?php
$db = 'db';
$user = 'user';
$passwd = 'passwd';
?>



b.php
<?php
$config_dir = './'; /* Cambialo por la carpeta donde esté */
$path = $config_dir . 'config.php';

echo $path; /* Comprueba que esté la ruta bien formada*/
include_once($path); /* Sin comillas */

$connection = mysql_connect('localhost', $user, $passwd);
if (!$connection) {
  echo 'No se ha conectado.';
  exit();
}

if (!mysql_select_db($db)) {
  echo 'La base de datos no existe.';
  mysql_close($connection);
  exit();
}

mysql_close($connection);

?>


Un saludo.
Hombre, pues creo que algo hemos avanzado. Ahora me dice al menos que no está permitido el acceso a root@localhost.

./config.php
Warning: mysql_connect() [function.mysql-connect]: Acceso negado para usuario: 'root'@'localhost' (Usando clave: NO) in C:\Archivos de programa\EasyPHP 3.0\www\b.php on line 8
No se ha conectado.


Pero creo que ya se donde estaba el problema. Las variables que hacen uso de require estaban dentro de otra función dentro de ese archivo. Ahora lo único que me dice es eso del error de conexión, pero captura las variables bien [ok]

ByEs [buenazo]
Buenas,

Para utilizar otros ficheros php yo utilizo la funcion: include ("otro.php");

Y si lo tienes en la carpeta anterior por ejemplo pones: include ("../otro.php");

Saludos.
Ya está arreglado. Muchas gracias. El problema se ve que estaba en que hacía un uso indebido en un sitio y me hacían falta en otro. Por eso no las detectaba.

Arreglé un problemilla en los querys y ya inserta correctamente en la tabla de la BD con password y todo.

Si es que sois unos fieras, [+risas]

ByEs [buenazo]
12 respuestas