Bonsoir,
J'ai fais une page ou je peux gérer mon site et je voudrais activer et désactiver les comptes seuls soucis c'est que j'ai des message d'erreurs lorsque je clic sur un lien je vous mets le code et l'erreur obtenu :

L'erreur:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'FROM membres SET actif = 1 WHERE id = '11'' à la ligne 1' in*\*\*\*\*\* on line 55
( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'FROM membres SET actif = 1 WHERE id = '11'' à la ligne 1 in *\**\*\*\*\*.php on line 55

La partie qui pose problème:

if (isset($_GET['actif']) AND !empty($_GET['actif'])) 
             {
                $actif = (int) $_GET['actif'];
                $req = $bdd->prepare('UPDATE FROM membres SET actif = 1 WHERE id = ?');
                $req->execute(array($actif));
                header('Location : admin.php'); 
             }

Le code ou j'affiche si un compte est actif ou désactivé :

<?php if($m['actif'] == 0) { ?>  <a href="admin.php?actif=<?= $m['id']?>">Activer</a><?php } else {?> <a href="admin.php?desactiv=<?= $m['id']?>">Désactiver</a><?php } ?>

9 réponses


Axis
Réponse acceptée

UPDATE FROM membres SET actif = 1 WHERE id = ? est incorrect comme l'explique le message d'erreur...

UPDATE membres SET actif = 1 WHERE id = ? devrait fonctionner

Si tu inclus des variables, il faut en mettre de partout :

$req = $bdd->prepare('UPDATE FROM membres SET actif = ? WHERE id = ?');
$req->execute(array(1, $actif));
NewAir01
Auteur

Salut sa me fait toujours un message d'erreur...

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in C:\*\*\*\*p on line 54
( ! ) PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in *\w*/*/* on line 54

Je désespere petit a petit mdr.

Tu m'exscusera mais à quoi sert le (int) ?

NewAir01
Auteur

Pour un peu plus sécursier ^^ car si un compte actif il est 1 et desactivé il est en 0

Essaie :

$req = $bdd->prepare('UPDATE FROM membres SET actif = :actif WHERE id = :id');
$req->execute(array('actif' => 1,
                    'id' => $actif));

https://openclassrooms.com/forum/sujet/sqlstate-hy093-invalid-parameter-number-87973

NewAir01
Auteur

Toujours la même erreur...

NewAir01
Auteur

Ouille comme je débute dans le php je préfère pas me lancer dans du complexe :x