WHERE子句中的空格



我正在为我的新项目编写一个帐户验证系统。当前注册/连接页面可以!只有账户验证页面不起作用。确认邮件通过注册页面中的电子邮件发送。

您可以在这里注册:http://protect.you-test.ch/inscription.php

您可以在此处连接:http://protect.you-test.ch/connexion.php

问题是当用户名有空间时,这个请求不起作用:

$sql = "SELECT user_key,verified_user FROM users WHERE login='".$login."'";

但当没有空间时,它会起作用!

编辑:问题随机出现。有时它不起作用(有空格)。

此问题只出现在此页面上,而不出现在连接页面上!

当前代码:

<?php
include("mysql_connect.php");
$login = base64url_decode($_GET['login']);
$login = trim($login);
$login = mysql_real_escape_string($login);
echo '</br>'.$login.'</br>';
echo '</br>'.$user_key.'</br>';
$sql = "SELECT user_key,verified_user FROM users WHERE login='".$login."'";
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);
if ($data['0'] == 0) {
$clebdd = $data['user_key'];
$actif = $data['verified_user'];
if($actif == '1') {
    echo "Votre compte est déjà actif !";
} else {
    if($user_key == $clebdd) {        
        $sql = 'UPDATE users SET verified_user = 1 WHERE login="'.$login.'"';
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
        echo "Votre compte a bien été activé !";    
    } else {
        echo "Erreur ! Votre compte ne peut être activé ...1";
    }
}   
} else {
 echo "Erreur ! Votre compte ne peut être activé ...2";
}
function base64url_encode($data) { 
   return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); 
} 
function base64url_decode($data) { 
   return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=',  STR_PAD_RIGHT)); 
} 
?>

是的,空格将抛出字符串比较:

 'username'
 ' username'
 'username '

是三个完全不同的字符串,当通过常规的相等测试时,即使人类会将它们解释为相同。

你可以试试

 $login = trim($login);

在将字符串填充到查询中之前,从字符串两侧去除空白。

在php脚本中的$login变量上添加TRIM。例如:trim($login)

最新更新