Question

Je suis en train de coder un système de validation de compte pour mon nouveau projet.Actuellement, les pages d'inscription / connexion sont correctes!Seule la page de vérification de compte hte ne fonctionne pas.Le mail de confirmation est envoyé par e-mail sur la page d'inscription.

vous pouvez vous inscrire ici: http://protect.you-test.ch/inscription.php

vous pouvez vous connecter ici: http://protect.you-test.ch/connexion.php

Le problème est que lorsque le nom d'utilisateur a de l'espace, cette demande ne fonctionne pas:

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

mais quand il n'y a pas d'espace, ça marche!

EDIT: Le problème se produit au hasard.Parfois ça marche parfois pas (avec des espaces).

Ce problème se produit uniquement sur cette page et pas sur la page de connexion!

Code actuel:

<?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)); 
} 

?>
Était-ce utile?

La solution

add TRIM on $login variable in your php script. ex: trim($login)

Autres conseils

Yes, spaces will throw off a string comparison:

 'username'
 ' username'
 'username '

are three completely different strings when put through a regular equality test, even though a human would intepret them as the same.

You could try

 $login = trim($login);

to strip whitespace from both sides of the string before stuffing it into your query.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top