Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - gAb1

#461
funcion showContent() en index.php:
Código (php) [Seleccionar]
function showContent() {
$includes = 'includes/';
$views = 'views/';
$site = $views . 'site/';
$user = $views . 'user/';

$includes = array(
'/home' => $views . 'home.php',
'/error' => $views . 'error.php',
'/login' => $site . 'login.php',
'/logout' => $site . 'logout.php',
'/contact' => $site . 'contact.php',
'/about' => $site . 'about.php',
'/register' => $site . 'register.php',
'/register_success' => $site . 'register_success.php',
'/profile' => $user . 'profile.php',
'/update' => $user . 'update.php'
);

if ($_SERVER['REQUEST_URI'] == '/')
$_SERVER['REQUEST_URI'] = '/home';

preg_match('/^([\w\/]+)/', $_SERVER['REQUEST_URI'], $matches);
$matches[1] = isset($matches[1]) ? $matches[1] : null;

if(array_key_exists($matches[1], $includes)) {
$content = include($includes[$matches[1]]);
} else $content = include('views/error.php');
return $content;
}


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??
#462
Si, en main.php dentro de un div y article (que es el cuerpo del contenido de la pagina incluida):

Código (php) [Seleccionar]
<?php
include_once($_SERVER['DOCUMENT_ROOT'] . '/index.php');
showContent();
?>


No se, tantos includes y no puede haber algun error o problema que encapsule parte del codigo y no lo interprete bien?
#463
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 (php) [Seleccionar]
<?php if (isset($_SESSION['username'])) {
    
// muestra opciones del menu
} else {
       
// muestra otras opciones del menu
}
?>


Y esto es lo que hay de las lineas de error de functions.php:28 y 29
Código (php) [Seleccionar]
function sec_session_start() {
    $session_name = 'sec_session_id';   // Set a custom session name
    $secure = SECURE;
    // This stops javascript being able to access the session id.
    $httponly = true;
    // Forces sessions to only use cookies.
    if (ini_set('session.use_only_cookies', 1) === FALSE) {
        header("Location: /error?err=Could not initiate a safe session (ini_set)");
        exit();
    }
    // Gets current cookies params.
    $cookieParams = session_get_cookie_params();
    session_set_cookie_params($cookieParams["lifetime"],
        $cookieParams["path"],
        $cookieParams["domain"],
        $secure,
        $httponly);
    // Sets the session name to the one set above.
    session_name($session_name);
    session_start();            // Start the PHP session  LINEA 28
    session_regenerate_id();    // regenerated the session, delete the old one. 29
}


Las dos ultimas lineas son las del error de antes.

Y la famosa función login_check del non-object error:
Código (php) [Seleccionar]
function login_check($mysqli) {
    // Check if all session variables are set
    if (isset($_SESSION['user_id'],
                        $_SESSION['username'],
                        $_SESSION['login_string'])) {

        $user_id = $_SESSION['user_id'];
        $login_string = $_SESSION['login_string'];
        $username = $_SESSION['username'];

        // Get the user-agent string of the user.
        $user_browser = $_SERVER['HTTP_USER_AGENT'];

        if ($stmt = $mysqli->prepare("SELECT password  // ESTA ES LA LINEA 155
                                      FROM members
                                      WHERE id = ? LIMIT 1")) {
            // Bind "$user_id" to parameter.
            $stmt->bind_param('i', $user_id);
            $stmt->execute();   // Execute the prepared query.
            $stmt->store_result();

            if ($stmt->num_rows == 1) {
                // If the user exists get variables from result.
                $stmt->bind_result($password);
                $stmt->fetch();
                $login_check = hash('sha512', $password . $user_browser);

                if ($login_check == $login_string) {
                    // Logged In!!!!
                    return true;
                } else {
                    // Not logged in
                    return false;
                }
            } else {
                // Not logged in
                return false;
            }
        } else {
            // Not logged in
            return false;
        }
    } else {
        // Not logged in
        return false;
    }
}


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!
#464
solo con el include en main.php

Código (php) [Seleccionar]
object(mysqli)#1 (19) { ["affected_rows"]=> int(0) ["client_info"]=> string(79) "mysqlnd 5.0.11-dev - 20120503 - $Id: bf9ad53b11c9a57efdb1057292d73b928b8c5c77 $" ["client_version"]=> int(50011) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(6) "5.6.20" ["server_version"]=> int(50620) ["stat"]=> string(135) "Uptime: 24111 Threads: 1 Questions: 1985 Slow queries: 0 Opens: 71 Flush tables: 1 Open tables: 64 Queries per second avg: 0.082" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(1057) ["warning_count"]=> int(0) } object(mysqli)#1 (19) { ["affected_rows"]=> int(-1) ["client_info"]=> string(79) "mysqlnd 5.0.11-dev - 20120503 - $Id: bf9ad53b11c9a57efdb1057292d73b928b8c5c77 $" ["client_version"]=> int(50011) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(6) "5.6.20" ["server_version"]=> int(50620) ["stat"]=> string(135) "Uptime: 24111 Threads: 1 Questions: 1986 Slow queries: 0 Opens: 71 Flush tables: 1 Open tables: 64 Queries per second avg: 0.082" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(1057) ["warning_count"]=> int(0) } object(mysqli)#2 (19) { ["affected_rows"]=> int(0) ["client_info"]=> string(79) "mysqlnd 5.0.11-dev - 20120503 - $Id: bf9ad53b11c9a57efdb1057292d73b928b8c5c77 $" ["client_version"]=> int(50011) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(6) "5.6.20" ["server_version"]=> int(50620) ["stat"]=> string(135) "Uptime: 24111 Threads: 2 Questions: 1988 Slow queries: 0 Opens: 71 Flush tables: 1 Open tables: 64 Queries per second avg: 0.082" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(1058) ["warning_count"]=> int(0) }

Código (php) [Seleccionar]
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\themes\default\views\layouts\main.php:45) in C:\xampp\htdocs\includes\functions.php on line 28

Warning: session_regenerate_id(): Cannot regenerate session id - headers already sent in C:\xampp\htdocs\includes\functions.php on line 29

Notice: Undefined variable: mysqli in C:\xampp\htdocs\views\site\login.php on line 6

Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\includes\functions.php on line 155


Sin el include en main.php solo aparecen los dos errores de siempre.
#465
el de db_connect.php:
Código (php) [Seleccionar]
object(mysqli)#1 (19) { ["affected_rows"]=> int(0) ["client_info"]=> string(79) "mysqlnd 5.0.11-dev - 20120503 - $Id: bf9ad53b11c9a57efdb1057292d73b928b8c5c77 $" ["client_version"]=> int(50011) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(6) "5.6.20" ["server_version"]=> int(50620) ["stat"]=> string(134) "Uptime: 22348 Threads: 1 Questions: 657 Slow queries: 0 Opens: 71 Flush tables: 1 Open tables: 64 Queries per second avg: 0.029" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(554) ["warning_count"]=> int(0) }

el de functions.php:
Código (php) [Seleccionar]
string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(555) ["warning_count"]=> int(0) } object(mysqli)#1 (19) { ["affected_rows"]=> int(-1) ["client_info"]=> string(79) "mysqlnd 5.0.11-dev - 20120503 - $Id: bf9ad53b11c9a57efdb1057292d73b928b8c5c77 $" ["client_version"]=> int(50011) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(6) "5.6.20" ["server_version"]=> int(50620) ["stat"]=> string(134) "Uptime: 22459 Threads: 1 Questions: 660 Slow queries: 0 Opens: 71 Flush tables: 1 Open tables: 64 Queries per second avg: 0.029" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(555) ["warning_count"]=> int(0) }

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
#466
PHP / Re: paginas incluidas no funcionan correctamente
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.
#467
PHP / Re: paginas incluidas no funcionan correctamente
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 (php) [Seleccionar]
<?php

require_once('config.php');

$mysqli = new mysqli(HOSTUSERPASSWORDDATABASE);
?>


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 (php) [Seleccionar]
// asi da error
require_once($_SERVER['DOCUMENT_ROOT'] . '/includes/functions.php');
//include($_SERVER['DOCUMENT_ROOT'] . '/includes/db_connect.php');

// asi no da error
require_once($_SERVER['DOCUMENT_ROOT'] . '/includes/functions.php');
include($_SERVER['DOCUMENT_ROOT'] . '/includes/db_connect.php');


#468
PHP / Re: paginas incluidas no funcionan correctamente
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 (php) [Seleccionar]
   require_once('db_connect.php');
   // or
   require('db_connect.php');
   // or
   include('db_connect.php');
   // or
   include_once('db_connect.php');


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.
#469
PHP / Re: paginas incluidas no funcionan correctamente
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 (php) [Seleccionar]
require_once($_SERVER['DOCUMENT_ROOT'] . '/includes/functions.php');
//include($_SERVER['DOCUMENT_ROOT'] . '/includes/db_connect.php');


login.php
Código (php) [Seleccionar]
require_once($_SERVER['DOCUMENT_ROOT'] . '/includes/functions.php');
//include($_SERVER['DOCUMENT_ROOT'] . '/includes/db_connect.php');


functions.php
Código (php) [Seleccionar]
require_once('/db_connect.php');
// or
require('/db_connect.php');
// or
include('/db_connect.php');
// or
include_once('/db_connect.php');


No funciona de ninguna de las maneras, pero debería de funcionar no???? Pues da el mensajito de siempre....

CitarNotice: 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 (php) [Seleccionar]
if (login_check($mysqli) == true) {
   //do something
} else echo 'Por favor, inicia sesion.';


Y esto logueado... pero me lleva al echo, incluso si pongo:

Código (php) [Seleccionar]
else echo 'Por favor, inicia sesion.', $_SESSION['username'];

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!
#470
PHP / Re: query-update
30 Septiembre 2014, 06:28 AM
Exacto, las sentencias preparadas no deberían hacerse asi directamente. Esta es la manera correcta:

(Y no es necesario crear una variable que contenga la sentencia.)

Código (php) [Seleccionar]
if ($insert_stmt = $mysqli->prepare("UPDATE TB_CLIENTE SET NOMBRE_CLIENTE = ?,
APELLIDO_CLIENTE = ?,
DIRECCION_CLIENTE = ?
WHERE ID_CLIENTE = ?")) {

$insert_stmt->bind_param('sssi', $name, $apellido, $direccion, $ident);

// Execute the prepared query.
if (! $insert_stmt->execute()) {
//header('Location: /dir/to/error.php?err=Some error message');
//printf("Error: %s.\n", $insert_stmt->error);
}
}


Tambien lo puedes hacer sin el if, los quitas y listo :)