Bonsoir

Je tourne en rond depuis un moment sans comprendre....
Le code permet d'activer un compte après avoir cliqué sur le lien envoyé par email.
En cliquant sur le lien, il y a 2 mises a jour qui sont faites. activate prend 1 et id_societe prend la valeur de l'id.
Si "activate" est déjà à 1 ou si le token ou session est différent de celui de la BDD, alors je fais apparaître un message d'erreur.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
if (isset($_GET['id']) AND isset($_GET['session']) AND isset($_GET['token'])) {
 
$id = $_GET["id"] ;
$session = $_GET["session"] ;
$token = $_GET["token"] ;
$activate0 = 0;
$activate1 = 1;
 
	$req = Cnx::connectCnx()->prepare("SELECT count(*) FROM equipe WHERE id=:id AND session=:session AND token=:token AND activate=:activate");
	$req -> bindParam(':id', $id, PDO::PARAM_INT, 11);
	$req -> bindParam(':session', $session);
	$req -> bindParam(':token', $token);
	$req -> bindParam(':activate', $activate0);
	$req -> execute();
	$result = $req->fetchColumn(); 
	if($result == 1){//si existe,
			$req1 = Cnx::connectCnx()->prepare("UPDATE equipe SET activate=:activate, id_societe=:id WHERE id=:id AND session=:session AND token=:token") ;
			$req1 -> bindParam(':id', $id, PDO::PARAM_INT, 11);
			$req1 -> bindParam(':session', $session);
			$req1 -> bindParam(':token', $token);
			$req1 -> bindParam(':activate', $activate1);
			$req1 -> execute(); 
			//header ("Refresh: 3;URL=login.php");
			echo "Votre compte est désormais activé. Redirection en cours... ";
		}
		else{//pas de résultat	
			//header ("Refresh: 0;URL=index.php");
			echo "Compte déjà activé ou inexistant";
		}
}
else{ 
	echo "erreur";
}
Mon soucis, c'est que la mise à jour est réalisée 1 fois sur 3 même si le token ou session sont faux.
2eme problème, lorsque je remplace le echo par une redirection, alors la mise à jour est faite systématiquement sans tenir compte des conditions.

Quelqu'un a une idée?