Título: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 28 Septiembre 2014, 05:20 am Hola, estoy teniendo un molesto problema a la hora de incluir paginas en php. El problema que tengo es causado al poner el mismo include en dos paginas y una de las paginas es incluida en la otra.
Paso a explicarlo mejor: Tengo un index.php (.htaccess redirecciona todo aqui) Código
/themes/default/views/layouts/main.php Código
y una de las paginas a incluir, pero ocurre con otras paginas con el mismo include y la misma funcion. /views/site/login.php Código
Este es el error que da: Citar Notice: Undefined variable: mysqli in C:\xampp\htdocs\views\site\login.php on line 7 Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\includes\functions.php on line 151 La variable $mysqli esta creada en db_connect.php que esta incluido en functions.php y en un principio funciona perfectamente.... db_connect.php Código
Y el otro error tambien me lo ha dado muchas otras veces con varias funciones mysqli (como execute() o get_result()) y aun no lo he arreglado, simplemente han desaparecido y aparecido en disitintas paginas, al crear un prepared statement. Esto es lo que me ha podido decir un amigo respecto a este error: Citar You get the call to member function on non-object error, when you try to call a function in $this-> scope when the object hasn't been instantiated. Entonces, ¿como hago eso de estanciar el objeto? if ($stmt = $mysqli->prepare("SQL")) Lo curioso es que no da ningún error si quito el include de main.php, pero entonces tengo que comentar las funciones que llamo... Si en lugar de include_once utilizo include en login.php me da el siguiente error: Citar Fatal error: Cannot redeclare sec_session_start() (previously declared in C:\xampp\htdocs\includes\functions.php:6) in C:\xampp\htdocs\includes\functions.php on line 26 Este es el codigo del error: Código
¿Alguna idea de como arreglar esto? ¡Llevo horas intentando arreglarlo pero no consigo nada! Gracias! Título: Re: paginas incluidas no funcionan correctamente Publicado por: MinusFour en 29 Septiembre 2014, 22:37 pm La ruta que has puesto no es relativa, es absoluta y lo más probable es que la ruta no exista. Si el script se ejecuta desde /var/www por ejemplo y quieres incluir un archivo de /var/www/html/index.php tienes que usar:
Código: ./html/index.php o Código: html/index.php Aunque es mejor de la primera forma, en caso de que el . no este en el include path de tu php.ini Título: Re: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 30 Septiembre 2014, 05:29 am Gracias por responder, era el típico fallo, como casi siempre pasa... un molesto fallo que es imposible de ver :)
El problema estaba en la manera de incluir los archivos, depues de googlear pude ver las 4 distintas maneras de incluir archivos archivos en php: Citar
great for templates referencing variables from the current scope or something
Según tengo entendido require_once es la manera "por defecto" y así he hecho. Pero claro no es tan facil: Para incluir un archivo de contenido html/php uso include normal. index.php Código
Para las funciones uso el require_once main.php Código
Lo mismo para los archivos de contenido html/php "views": login.php Código
No hay ningún problema por usar $_SERVER['DOCUMENT_ROOT'], verdad? Es que ya he tenido bastantes problemas con las rutas al ser archivos incluidos... Sobre el problema del principio, me sigue pareciendo extraño que el include de functions.php a db_connect no funcione para los archivos que incluyan functions.php Una pregunta a parte, sabes que es mejor, si usar mysqli tal y como hago ahora? o usar mysql pdo?? Gracias! Título: Re: paginas incluidas no funcionan correctamente Publicado por: MinusFour en 30 Septiembre 2014, 06:12 am No debería darte problemas, en cuanto al include o require:
Funcionan de la misma forma, la única diferencia es que el require produce un error y detiene la ejecución del script mientras que el include produce un warning si llegase a fallar. Por ejemplo, en tu caso, al incluir incorrectamente el archivo de base de datos no se cargan la conexion SQL y el programa continua ejecutandose a pesar de que tu script requiere la conexion. Si tu script hubiese usado require, al momento de no encontrar el archivo de base de datos, el script muere. include_once y require_once sirve para evitar multiples inclusiones de un archivo (conservan las mismas diferencias que require e include). Título: Re: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 30 Septiembre 2014, 06:53 am Pero si no incluyo mal el archivo...
Si no incluyo ni en login ni en main.php db_connect y si en functions.php cambio de require_once a require db_connect, y solo un require_once a functions.php no funciona el db_connect o esque no le da la gana de incluirlo... main.php Código
login.php Código
functions.php Código
No funciona de ninguna de las maneras, pero debería de funcionar no???? Pues da el mensajito de siempre.... Citar Notice: Undefined variable: mysqli in C:\xampp\htdocs\views\site\login.php on line 8 Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\includes\functions.php on line 151 Y en internet explorar solo da el primer error. Edito: Necesito arreglar esto como sea, acaba de salir asi por que si un problema en otra pagina. Los mismos require que login.php, require_once y include para db_connect y ahora si no es error es no hacer una funcion bien.... Para que no se pueda acceder a una pagina sin loguear tengo un if. Bien, pues si no da el error, me pasa la funcion como si no fuera true.... Código
Y esto logueado... pero me lleva al echo, incluso si pongo: Código
Me muestra el nombre de usuario con el que estoy logueado... y la función funciona bien, de hecho en la página login.php funciona... En serio, voy a acabar loco... Por cierto, estoy usando este script que encontre, aunque ya lo haya customizado y añadido muchas cosas, las funciones basicas como sec_session_start() no las he tocado y siguen igual: http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL Alomejor hay un problema y no lo he visto... Gracias! Título: Re: paginas incluidas no funcionan correctamente Publicado por: MinusFour en 30 Septiembre 2014, 17:01 pm Tu functions.php:
Código
Estas rutas pueden estar mal, recuerda que como lo tienes ahora está checando en el root de tu sistema de archivos por db_connect.php. Título: Re: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 30 Septiembre 2014, 19:57 pm Vale, si / lleva al root (htdocs) entonces estaba mal. Estan en /includes/db_connect.php y functions.php
Pero de igual manera, acaba de probar: Código
Y nada, ahora solo me sale el primer error, de variable definida. El otro de non-object se ha "ocultado"... seguro que despues trasteando nuevas cosas vuelve a salir a recordarme que ahí esta :) Para problarlo he dejado presionado F5 un rato por si hay algun problema con la cache o esas cosas. Por cierto, estoy trabajando en windows con xampp, por si funciona diferente que en linux. Título: Re: paginas incluidas no funcionan correctamente Publicado por: MinusFour en 30 Septiembre 2014, 20:36 pm Vale, si / lleva al root (htdocs) entonces estaba mal. Estan en /includes/db_connect.php y functions.php Pero de igual manera, acaba de probar: Código
Y nada, ahora solo me sale el primer error, de variable definida. El otro de non-object se ha "ocultado"... seguro que despues trasteando nuevas cosas vuelve a salir a recordarme que ahí esta :) Para problarlo he dejado presionado F5 un rato por si hay algun problema con la cache o esas cosas. Por cierto, estoy trabajando en windows con xampp, por si funciona diferente que en linux. No se si estás usando require, require_once, include o include_once. Por ahora quedate con require_once.... Si usas require_once y no puede cargar el archivo porque la ruta está mal entonces te debería devolver un error de PHP asociado a la carga de ese archivo. Si el archivo se carga correctamente, entonces bien puede ser un problema de visibilidad. ¿Como tienes tu db_connect.php? Título: Re: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 30 Septiembre 2014, 21:58 pm Me referia, desde un principio, que los habia usado todos pero de uno en uno en functions.php, pero al final he dejado require_once tal y como me has dicho.
Asi tengo db_connect.php Código
Y al final sigue dando los dos errores si solo incluyo functions con require_once, en login.php. Si además agrego include db_connect.php dejan de salir los errores. login.php Código
Título: Re: paginas incluidas no funcionan correctamente Publicado por: MinusFour en 30 Septiembre 2014, 22:41 pm Porque no muestras tu jerarquia de archivos. Si tienes un require_once al db_connect.php y no resulta en un error de compilación entonces si se está incluyendo el archivo. ¿Estás seguro que estás guardando los archivos en sus lugares correspondientes? ¿No estás modificando un archivo que no es?
Cuando un require_once falla este es el error que sale: Código: Fatal error: require_once(): Failed opening required 'archivo' Título: Re: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 30 Septiembre 2014, 23:37 pm Si te refieres a listar los archivos y con sus rustas completas, aqui va:
/ includes -> config.php -> db_connect.php -> functions.php / themes/default/views/layouts -> main.php / views/site -> login.php Si, los archivos estan en su sitio y los nombres estan bien. Ese error me lo dio antes cuando cambie la ruta a './db_connect.php' pero era mas largo el mensaje o creo que era el segundo que mostraba, ya no me acuerdo. Título: Re: paginas incluidas no funcionan correctamente Publicado por: MinusFour en 1 Octubre 2014, 00:03 am Agrega:
Código
Al final de db_connect.php, correlo y pega el output. Mueve ese mismo código después a functions.php justo despues del require_once a db_connect.php, correlo y pega el output. Título: Re: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 1 Octubre 2014, 01:01 am el de db_connect.php:
Código
el de functions.php: Código
Eso es con el include($_SERVER['DOCUMENT_ROOT'] . '/includes/db_connect.php'); en login.php y en main.php junto con el require_once a functions.php Título: Re: paginas incluidas no funcionan correctamente Publicado por: MinusFour en 1 Octubre 2014, 01:18 am el de db_connect.php: Código
el de functions.php: Código
Eso es con el include($_SERVER['DOCUMENT_ROOT'] . '/includes/db_connect.php'); en login.php y en main.php junto con el require_once a functions.php No hagas el include desde login.php... el propósito es encontrar porque no funciona al importar solamente functions.php... Título: Re: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 1 Octubre 2014, 01:30 am solo con el include en main.php
Código
Código
Sin el include en main.php solo aparecen los dos errores de siempre. Título: Re: paginas incluidas no funcionan correctamente Publicado por: MinusFour en 1 Octubre 2014, 01:47 am Debe ser un problema de visibilidad por la función showContent()...
¿Porque no pones más código para ver todo? Siento que en un lugar estás encapsulando código y otras partes del script no ven las variables. Sobre todo por la manera tan extraña en la que estás llamando a una funcion que no ha sido declarada en ese archivo. Título: Re: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 1 Octubre 2014, 02:02 am Claro, las funciones las declaro en functions.php para no tenerlas en los archivos de contenido visual.
La función showContent() de index.php ya sabes cual es, haciendo un include() normal al archivo y mostrandolo dentro de main.php que es incluido dentro de index.php, pero eso ya lo sabes. main.php es un archivo de estructura html5 con etiquetas <?php ?> para llamar funciones o scripts para el menu de navegación, etc. Por ejemplo, el primer error de antes en main.php:45 Esto es lo que hay: Código
Y esto es lo que hay de las lineas de error de functions.php:28 y 29 Código
Las dos ultimas lineas son las del error de antes. Y la famosa función login_check del non-object error: Código
Aqui el prepare() es el que da ese error, que tambien lo uso en otras paginas y tambien da errores... No sé donde puede estar el problema, conoces la estructura basica de como funciona todo y las funciones son de la web esa que puse antes. Si necesitas ver algo en especifico dimelo. Gracias! Título: Re: paginas incluidas no funcionan correctamente Publicado por: MinusFour en 1 Octubre 2014, 02:08 am La función showContent() de index.php ya sabes cual es, haciendo un include() normal al archivo y mostrandolo dentro de main.php que es incluido dentro de index.php, pero eso ya lo sabes. Aquí no veo nada de showContent(), solo se que la declaras en index.php Código
Fuera que dices que showContent hace un include, no se que tenga.... Título: Re: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 1 Octubre 2014, 02:13 am Si, en main.php dentro de un div y article (que es el cuerpo del contenido de la pagina incluida):
Código
No se, tantos includes y no puede haber algun error o problema que encapsule parte del codigo y no lo interprete bien? Título: Re: paginas incluidas no funcionan correctamente Publicado por: MinusFour en 1 Octubre 2014, 02:17 am Aún no se que haga esa funcion de showContent()...
De hecho, toda tu lógica la tienes que revisar muy bien. Es horrible los laberintos inecesarios que estás haciendo. ¿Cual es el proposito de hacer un include al archivo que rutea? Título: Re: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 1 Octubre 2014, 02:23 am funcion showContent() en index.php:
Código
Si no incluyo el archivo donde se encuentra la función, ¿como voy a llamar una función que no existe? No se que tiene de laberintico eso :( EDITO: Vale la funcion se crea despues de incluir main.php entonces no se necesario incluirla. Acabo de quitar el include y sigue funcionando :P Lo siento un despiste :( He quitado el require_once functions de main y lo he puesto en index.php. El problema puede deberse por incluir/requerir un archivo dentro de otro que a su vez esta siendo incluido??? Aunque de igual modo, los archivos incluidos por la función hacen eso... Ahora que lo pienso... si eso funciona asi, ¿por que es necesario hacer requires a functions.php en todas las paginas si ya se hace en index.php? Si los quito, da error... y no debería, no?? Título: Re: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 1 Octubre 2014, 03:23 am Era la cache del navegador, pasándole el ccleaner se arregla. Pero siguen habiendo errores:
A partir de aquí solo hay un require_once('includes/functions.php'); al principio de index.php y en ningún archivo más. Recien pasado el ccleaner, sin iniciar sesión: Código
Y se muestra el formulario y todo el codigo html. Esto cuando inicias sesión, y no se muestra el resto del codigo html. Código
La linea 76 de main.php es la etiqueta php que abro para llamar la funcion showContent() Título: Re: paginas incluidas no funcionan correctamente Publicado por: MinusFour en 1 Octubre 2014, 03:32 am No necesitas cargarlos en cada parte, puedes incluir functions.php desde el indice...
El problema esta en la visibilidad. Código
Código
$test no existe en la funcion hey... Ahora si le pones: Código
Si imprime archivo.php... En lo personal, yo no encapsularia el ruteador en una función... No creo que vayas a necesitarlo en otra parte. Y tu session_start() se suele poner al principio del script para evitar problemas como este, de headers already sent (al imprimir algo, ya se envian las cabeceras). Título: Re: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 1 Octubre 2014, 03:40 am ¿Te refieres a que lo haga sin función? Y que en main.php haga un echo a $content???
Si, llamo a sec_session_start(); en todas las paginas, ese puede ser el problema? Entonces tambien lo tengo que llamar en index.php no?? Título: Re: paginas incluidas no funcionan correctamente Publicado por: MinusFour en 1 Octubre 2014, 03:53 am Parte del problema es porque se imprime HTML antes de usar session_start(); la otra parte es porque la funcion showContent() no tiene visiblidad sobre las variables traidas desde fuera de la funcion. Si el ruteador estuviera fuera de la funcion vería las variables importadas desde el main.php. El require_once no carga las variables de functions.php porque ya fueron importadas desde el main.php y no son importadas dentro de la función.
Título: Re: paginas incluidas no funcionan correctamente Publicado por: gAb1 en 1 Octubre 2014, 04:04 am Si, lo de sec_session_start(); ya esta arreglado, lo he puesto solo en index.php despues del require_once y han dejado de salir esos errores.
Vale, si quito la función, lo que pasa es que se ejecuta el return $content; y lo muestra al final del archivo y no donde deberia ir, entonces necesito alguna manera de que se incluya donde antes, en el div y realmente no se como hacer eso :( Pero si, ya no hay ningún error :) Se me olvido quitar del logout.php y del process_login el session start y he tenido algunos problemas, ya estan solucionados. Pero en el process_login.php si quito el include_once functions me da error funcion login() no definida. login.php lo llama en el form action="includes/process_login.php" entonces tiene que requerirlo, le he dejado require normal, ya que process_login no se incluye en ningún sitio. Pero ese no es el problema, process_login necesita sec_session_start(); o no "inicia sesion"... Código
Entonces al cerrar sesión salen estos errores: Código
Dejo tambien el logout.php: Código
¿Como puedo solucionar este problema? :huh: Gracias! |