colonne inconnue

Eléphant du PHP | 84 Messages

16 juin 2014, 17:01

Bonjour,

Voici mon code:
if (isset($_GET['id']) AND isset($_GET['session']) AND isset($_GET['token'])) {

$id = $_GET["id"] ;
$session = $_GET["session"] ;
$token = $_GET["token"] ;

	$req = Cnx::connectCnx()->prepare("SELECT * FROM equipe WHERE id=$id AND session=$session AND token=$token "); //ligne 13 ou se trouve l'erreur
	$req->execute(array($id, $session, $token)); 
	$res = $req->rowCount();
	//si résultat,
	if($res == 1) {
			$req = Cnx::connectCnx()->prepare("UPDATE equipe SET activate=1 WHERE id=$id AND session=$session AND token=$token") ;
			$req -> bindParam(':id', $_POST['id'], PDO::PARAM_INT, 11);
                        $req -> bindParam(':activate', $_POST['activate']);
                        $req -> bindParam(':session', $_POST['session']);
                        $req -> bindParam(':token', $_POST['token']);
			$req -> execute(); 

			echo "Votre compte est désormais activé. Redirection en cours... ";
			header ("Refresh: 3;URL=login.php");
			exit();
			
		}
	//pas de résultat	
	else {
			header ("Refresh: 0;URL=index.php");
			exit();
		}

}
else { echo "erreur";}
et j'obtiens l'erreur
Warning: PDOStatement::execute(): SQLSTATE[42S22]: Column not found: 1054 Unknown column '74a73h6mg771ebdeke087aido7' in 'where clause' in C:\wamp\www\activate.php on line 13
Si je supprime "AND session=$session AND token=$token" ça fonctionne.
Donc je comprend plus rien.

Quelqu'un a une idée svp?

Mammouth du PHP | 2278 Messages

16 juin 2014, 17:14

Peut-on faire:
var_dump($req) ?
de façon utile?
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 84 Messages

16 juin 2014, 17:33

le var_dump me donne ceci:
object(PDOStatement)[3]
public 'queryString' => string 'SELECT * FROM equipe WHERE id=78 AND session=74a73h6mg771ebdeke087aido7 AND token=6796f075be48ddfbb8398350f33688f86f08d12e ' (length=123)

J'ai testé cette requete dans phpmyadmin et il me sort la même erreur.
Par contre si je met les ' ' autour de $session et $token ca fonctionne.
Mais ce que je ne comprend pas c'est que je n'utilise pas les quotes de tout mon site et tout fonctionne nikel....

Eléphant du PHP | 422 Messages

16 juin 2014, 17:38

hello
        $req = Cnx::connectCnx()->prepare("SELECT * FROM equipe WHERE id=$id AND session=$session AND token=$token "); //ligne 13 ou se trouve l'erreur
        $req->execute(array($id, $session, $token)); 
regarde de nouveau les requete préparé car la tu nous fait un mix de pas préparé avec une syntaxe préparé .. :non:

cf exemple 1 http://php.net/manual/fr/pdo.prepare.php (les var dans ta res sql doivent avoir une tete :mavar et dans ton tab array il faut les clé :mavar=>value)

bref regarde l'exemple
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphant du PHP | 84 Messages

16 juin 2014, 20:43

Merci de ton aide, j'ai vérifié et la je pense avoir bon.
if (isset($_GET['id']) AND isset($_GET['session']) AND isset($_GET['token'])) {

$id = $_GET["id"] ;
$session = $_GET["session"] ;
$token = $_GET["token"] ;

	$req = Cnx::connectCnx()->prepare("SELECT count(*) FROM equipe WHERE id=:id AND session=:session AND token=:token AND activate=0");
	$req -> bindParam(':id', $id, PDO::PARAM_INT, 11);
	$req -> bindParam(':session', $session);
	$req -> bindParam(':token', $token);
	$req -> execute();
	$result = $req->fetchColumn(); 
	if($result == 1){//si existe,
			$req1 = Cnx::connectCnx()->prepare("UPDATE equipe SET activate=1 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 -> execute(); 
			echo "Votre compte est désormais activé. Redirection en cours... ";
			header ("Refresh: 3;URL=login.php");
		}
		else{//pas de résultat	
			header ("Refresh: 0;URL=index.php");
		}
}
else{ 
	echo "erreur";
}
Ca fontionne à moitié en fait. Je ne comprend pas, mais lorsque je change dans la barre d'adresse le token ou la session, l'erreur apparaît mais l'update est quand même réalisé. et ce 2 fois sur 3... c'est à dire que parfois la BDD n'est pas mise a jour...

Mammouth du PHP | 1339 Messages

16 juin 2014, 20:48

Moi ce qui me gene c'est un header() apres un echo ...
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphant du PHP | 84 Messages

16 juin 2014, 20:55

Pourquoi ca te gene?
et ça ne change rien à mon problème me semble t il?

Mammouth du PHP | 1339 Messages

16 juin 2014, 21:00

http://www.php.net/manual/fr/function.header.php
N'oubliez jamais que header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichages PHP.
C'est la meme erreur qui s'affiche ? Celle qui dit que la collone avec la session n'existe pas ?
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphant du PHP | 84 Messages

16 juin 2014, 21:07

Le pbm de la colonne inconnue est réglée...
Maintenant ce qui me pose problème c'est que l'update activate=1 fonctionne même si la condition précedente n'est pas remplie. Et en plus m'indique l'erreur de la condition non remplie.

Mammouth du PHP | 1339 Messages

16 juin 2014, 21:13

$result = $req->rowCount();
        if($result == 1){//si existe,
Et avec ca ?
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphant du PHP | 84 Messages

16 juin 2014, 21:17

pas mieux, parfois la mise a jour est faite, parfois non, et par contre m'indique toujours que l'enregistrement a eu lieu.

Eléphant du PHP | 84 Messages

16 juin 2014, 21:56

EN fait tu m'as dis quelque chose de judicieux mais que je ne sais pas résoudre.
Lorsque je met un echo après la requête ça fonctionne 3 fois sur 4... mais si je met un header, alors, la mise a jour est faite systématiquement, sans tenir compte des conditions