martes, 29 de septiembre de 2015

Only variable references should be returned by reference on CodeIgniter 3.0

Esta mañana me tope con que varios de mis sitios mostraban el siguiente error:

A PHP Error was encountered
Severity: Notice
Message: Only variable references should be returned by reference
Filename: core/Common.php
Line Number: 257
Tenemos que realizar esta pequeña modificación al archivo Common.php para corregirlo:

Antes
return $_config[0] =& $config;
Después
$_config[0] =& $config; return $_config[0];

Y listo solucionamos el error, el problema es que en PHP cuando asignamos expresiones siempre se regresa el valor asignado, pero no la variable en sí, sino una copia de su valor y cuando se regresa una referencia a un valor temporal este no puede ser usado completamente.

jueves, 24 de septiembre de 2015

Facebook SDK returned an error: Cross-site request forgery validation failed. The “state” param from the URL and session do not match.

Hoy al estar haciendo pruebas con Facebook Login me tope con el siguiente error:

Facebook SDK returned an error: Cross-site request forgery validation failed. The “state” param from the URL and session do not match.

Y buscando en Google encontré una solución que me solucionó mi problema y fue esta:

Después de llamar a la función para obtener el enlace de la dirección para conectarnos a Facebook debemos escribir el siguiente código.

/** Función para obtener el enlace para conectarnos a Facebook **/
$uri=$helper->getLoginUrl($uri, $permissions);

/** Código para solventar el error **/
foreach ($_SESSION as $k=>$v) {
    if(strpos($k, "FBRLH_")!==FALSE) {
        if(!setcookie($k, $v)) {
        } else {
            $_COOKIE[$k]=$v;
        }
    }
}
Y en nuestra página de login-callback.php antes de cualquier otro código escribirmos el siguiente:

foreach ($_COOKIE as $k=>$v) {
    if(strpos($k, "FBRLH_")!==FALSE) {
        $_SESSION[$k]=$v;
    }
}
Por último no hay que olvidarnos del código de sesión

if(!session_id()) {
    session_start();
}
...
...
...
...
<?php session_write_close() ?>

miércoles, 23 de septiembre de 2015

CodeIgniter | Obtener automáticamente la base_url

Sólo debes reemplazar

$config['base_url'] = "http://misitio.com";

con las siguientes lineas:

$config['base_url'] = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http");
$config['base_url'] .= "://".$_SERVER['HTTP_HOST'];
$config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);

martes, 22 de septiembre de 2015

Limpiar un formulario con jQuery

Muchas veces después de enviar un formulario a través de AJAX con jQuery necesitamos "limpiar el formulario" y para lograrlo debemos escribir el siguiente código:

$('form')[0].reset();

lunes, 21 de septiembre de 2015

Evitar el envío de un form con jQuery

1. Usando el método preventDefault
$('#formulario').submit(function(event) {
    event.preventDefault();
});

2. Regresando el valor booleano 'false'
$('#formulario').submit(function() {
    return false;
});