Update variable ko
Résolu
nestor94
Messages postés
74
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
le script plante sans arret malgré plusieurs modifs.
le message d'erreur
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp64\www\register_av0001.php on line 15
le script plante sans arret malgré plusieurs modifs.
<?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); session_start(); // connexion a la bdd require_once 'config.php'; /* Initialisation de la variable du message de réponse*/ $err_inscription= null; $avatar= "/avatars/0001.png"; $pdostat = $bdd->prepare('UPDATE membres SET avatar = :avatar WHERE pseudo = :yves'); $pdostat->bindValue(':avatar', $avatar, PDO::PARAM_STR); //$pdostat->execute(); $pdostat->execute(array( 'avatar' => $avatar)); //if ($row = $pdostat->fetch(PDO::FETCH_ASSOC)) { //$_SESSION['avatar'] == $row['avatar']; $_SESSION['avatar'] == $avatar; header('page_test.html'); exit; //} //else { //$err_inscription[] = 'PROBLEME AVEC AVATAR'; //} ?>
le message d'erreur
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp64\www\register_av0001.php on line 15
Edit : correction des balises de code
A voir également:
- Update variable ko
- Windows update bloqué - Guide
- Winget update - Guide
- Asus live update - Télécharger - Utilitaires
- Hp bios update ✓ - Forum BIOS
- Kb en ko ✓ - Forum Photo numérique
8 réponses
Bonjour,
Comme indiqué dans le message d'erreur... "number of bound variables does not match number of tokens"
Vous avez bind
Autre remarque, je suggère plutôt de faire la requête sur l'ID de l'utilisateur (la clé primaire que vous avez certainement mise en auto_increment). Vous ne voyez peut-être pas l'intérêt tout de suite, mais ça deviendra tout de suite indispensable si vous faites des jointures SQL.
Comme indiqué dans le message d'erreur... "number of bound variables does not match number of tokens"
Vous avez bind
:avatarmais vous n'avez pas bind
:yves(d'ailleurs c'est sûrement une autre erreur, si le token a un nom logique alors vous devrez le nommer
:pseudo).
Autre remarque, je suggère plutôt de faire la requête sur l'ID de l'utilisateur (la clé primaire que vous avez certainement mise en auto_increment). Vous ne voyez peut-être pas l'intérêt tout de suite, mais ça deviendra tout de suite indispensable si vous faites des jointures SQL.
le "yves" était placé ainsi pour tester en direct sans passer par une session.
Undefined variable: id in C:\wamp64\www\register_av0001.php on line 13
<?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); session_start(); // connexion a la bdd require_once 'config.php'; /* Initialisation de la variable du message de réponse*/ $err_inscription= null; $avatar= "/avatars/0001.png"; $pdostat = $bdd->prepare('UPDATE membres SET avatar = :avatar WHERE id = :id'); $pdostat->bindValue(':avatar', $avatar, PDO::PARAM_STR); $pdostat->bindValue(':id', $id, PDO::PARAM_STR); $pdostat->execute(array( 'avatar' => $avatar, 'id' => $id)); $_SESSION['avatar'] = $avatar; header('page_test.html'); exit; ?>
Undefined variable: id in C:\wamp64\www\register_av0001.php on line 13
Et bien oui, c'est exactement le problème; Je ne sais pas comment faire cette initialisation.
La page qui précède celle ci est l'étape "inscription" du membre....dont voici un bout
La page qui précède celle ci est l'étape "inscription" du membre....dont voici un bout
// INSERTION en bdd
$pdostat = $bdd->prepare("INSERT INTO membres (pseudo, password1, mail, sexe, date_inscription) VALUES(:pseudo, :password1, :mail, :sexe, NOW());");
$pdostat->bindvalue(':pseudo',$_POST['pseudo'],PDO::PARAM_STR);
$pdostat->bindvalue(':password1',password_hash($_POST["password1"],PASSWORD_DEFAULT ),PDO::PARAM_STR);
$pdostat->bindvalue(':mail',$_POST['mail'],PDO::PARAM_STR);
$pdostat->bindvalue(':sexe',$_POST['sexe'],PDO::PARAM_STR);
$pdostat->execute();
// Mise en SESSION
$_SESSION['id'] = $session_name['id'];
$_SESSION['pseudo'] = $_POST['pseudo'];
// on redirige vers l'espace avatar
header('Location:choix_avatar.php');
exit;
Alors déjà ... quand tu postes du code sur le forum tu dois préciser le langage dans les balises...
Explications ( à lire ENTIEREMENT !! ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Ensuite, ben.. visiblement.. tu stockes l'id en SESSION ...
Donc sur ta page tu dois faire
Et au passage, un peu de lecture pour tes prochains codes
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
et ça
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Explications ( à lire ENTIEREMENT !! ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Ensuite, ben.. visiblement.. tu stockes l'id en SESSION ...
Donc sur ta page tu dois faire
<?php session_start(); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // connexion a la bdd require_once 'config.php'; $err_inscription= null; $avatar= "/avatars/0001.png"; $id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL; if($id){ try{ $pdostat = $bdd->prepare('UPDATE membres SET avatar = :avatar WHERE id = :id'); $pdostat->bindValue(':avatar', $avatar, PDO::PARAM_STR); $pdostat->bindValue(':id', $id, PDO::PARAM_STR); $pdostat->execute(); header('page_test.html'); exit; }catch(Exception $e){ echo "Erreur " . $e->getMessage(); } }
Et au passage, un peu de lecture pour tes prochains codes
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
et ça
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
oups, désolé pour le code mal gaulé.
Il y a un mieux dans le script que tu m'a corrigé mais j'arrive sur une page blanche et aucune modif faite dans la table... je me demande si à la phase précédente (inscription) je n'ai pas un soucis au niveau de la mise en session? Notamment concernant l'id.
Il y a un mieux dans le script que tu m'a corrigé mais j'arrive sur une page blanche et aucune modif faite dans la table... je me demande si à la phase précédente (inscription) je n'ai pas un soucis au niveau de la mise en session? Notamment concernant l'id.
// INSERTION en bdd $pdostat = $bdd->prepare("INSERT INTO membres (pseudo, password1, mail, sexe, date_inscription) VALUES(:pseudo, :password1, :mail, :sexe, NOW());"); $pdostat->bindvalue(':pseudo',$_POST['pseudo'],PDO::PARAM_STR); $pdostat->bindvalue(':password1',password_hash($_POST["password1"],PASSWORD_DEFAULT ),PDO::PARAM_STR); $pdostat->bindvalue(':mail',$_POST['mail'],PDO::PARAM_STR); $pdostat->bindvalue(':sexe',$_POST['sexe'],PDO::PARAM_STR); $pdostat->execute(); // Mise en SESSION $_SESSION['id'] = $_SESSION['id']; $_SESSION['pseudo'] = $_POST['pseudo']; // on redirige vers l'espace avatar header('Location:choix_avatar.php'); exit;
Je me doutais bien que c'était incohérent...
Pour pseudo, c'est évident avec le "POST" puisque cela vient d'un formulaire.
Mais pour l'id, je ne sais pas comment faire.
Pour pseudo, c'est évident avec le "POST" puisque cela vient d'un formulaire.
Mais pour l'id, je ne sais pas comment faire.