向下滚动以帮助我解决问题。如何在准备好的语句中使用sql函数CONCAT
问题几乎解决!
我试图使用cookie进行自动登录脚本,我碰到一个很有趣的教程来了:http://blog.monstruosor.com/2013/05/18/php-auto-connexion-par-cookie/
这里是他提出的代码:我感兴趣
function autologin() {
$key = $_COOKIE['autologin'];
$ip = $_SERVER['REMOTE_ADDR'];
$query = "SELECT * FROM users WHERE SHA1(CONCAT('SEL1-df546', `name`, `id`, 'SEL2-sd55fd', `last_connection`, $ip))=$key";
$infos = $users->exec($query);
if(!is_array($infos) || empty($infos)) {
// Mauvais cookie !
return false;
}
$_SESSION['user'] = $infos; // Mise en SESSION
return true;
主线是这一个:
$query = "SELECT * FROM users WHERE SHA1(CONCAT('SEL1-df546', `name`, `id`, 'SEL2-sd55fd', `last_connection`, $ip))=$key";
$infos = $users->exec($query);
然而,它是不安全的。我想知道如何使用在这一行上准备的应用程序。 我试过,但它不工作:
$req = $this->_db->prepare("SELECT * FROM Members WHERE SHA1(CONCAT(HASH1-1dg9sf', `id`, `first_name`, 'HASH2-dt5w1q', `last_name`, ip = :ip)) = :key");
$req->execute(array(
'ip' => htmlspecialchars($ip),
'key' => htmlspecialchars($key)));
的$this->_db
是从我的阶级和写得很好不用担心。问题来自这里:
$req = $this->_db->prepare("SELECT * FROM Members WHERE SHA1(CONCAT(HASH1-1dg9sf', `id`, `first_name`, 'HASH2-dt5w1q', `last_name`, ip = :ip)) = :key");
希望有人有一个解决方案。
下面是详细信息:
我的index.php页面包含:
$ip = $_SERVER['REMOTE_ADDR'];
$key = $_COOKIE['auto_login'];
$mg->autoLogin($ip, $key);
,并从我的课堂我自动登录方法:
public function autoLogin($ip, $key)
{
$req = $this->_db->prepare("SELECT * FROM Members WHERE SHA1(CONCAT(HASH1-1dg9sf', `id`, `first_name`, 'HASH2-dt5w1q', `last_name`, :ip)) = :key");
$req->execute(array(
'ip' => htmlspecialchars($ip),
'key' => htmlspecialchars($key)));
$donnee = $req->fetch();
$req->closeCursor();
if(!is_array($donnee) || empty($donnee))
{
return false;
}
else
{
$_SESSION['user'] = $donnee;
return true;
}
}
如果你还需要更多的信息,只要问我,我会再次更新我的问题!
这里的最后一个问题
感谢pala_谁几乎解决它
我知道问题出在哪里。 在我的数据库中,我试图登录的成员存储的IP是“:: 1”。但是当我在这里生成“echo $ ip”时:“$ ip = $ _SERVER ['REMOTE_ADDR'];”,我有“127.0.0.1”!当我进行验证时,这不是IP,所以问题可能在这里!任何想法如何解决这个问题?
问题在这里,因为如果我做“$ ip =':: 1';”,这是工作。任何想法??
它不工作,我会更新我的问题带来更多细节 –
hm。你从使用'用户表'到'成员表'。这是什么? –
成员之一,用户来自我找到的网站中的tutoriel,但不错的主意 –