Aucune alimentation dans la table de la base de données
Résolu
Izzara
-
Izzara82 Messages postés 26 Date d'inscription Statut Membre Dernière intervention -
Izzara82 Messages postés 26 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Aucune alimentation dans la table de la base de données
- Fuite données maif - Guide
- Table ascii - Guide
- Table des matières word - Guide
- Base de registre - Guide
- Supprimer les données de navigation - Guide
5 réponses
Bonjour
Commence par appliquer ceci
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Et désactive les redirections pour pouvoir voir les éventuelles erreurs
.
Commence par appliquer ceci
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Et désactive les redirections pour pouvoir voir les éventuelles erreurs
.
Merci pour ton aide.
Voici les modifications effectuées ; j'espère ne pas avoir fait d'erreurs.
Ma connexion à la BDD est déjà dans un fichier séparé.
Connexion base de données
Le code PHP de ma page principale
Lors du nouveau test, je reçois ces 2 erreurs :
Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens Les datas : Array ( [0] => 08203308776 [1] => 08203308775 [2] => 08203308774 )
Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens Les datas : Array ( [0] => VALLADE [1] => Eric [2] => VALLADE [3] => 08203308776 [4] => Florence [5] => CANTELOBRE [6] => 08203308775 [7] => Elodie [8] => HELIE [9] => 08203308774 )
Je cherche d'où viennent ces satanées erreurs mais là je bloque... Apparemment cela viendrait du dernier champs qui ne rentre pas dans le array si j'ai bien compris les mlessages...
Voici les modifications effectuées ; j'espère ne pas avoir fait d'erreurs.
Ma connexion à la BDD est déjà dans un fichier séparé.
Connexion base de données
<?php try { $bdd = new PDO('mysql:host=localhost;dbname=petanque_club_valencien;charset=utf8', 'root', ''); // CONNEXION BDD $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch (PDOException $e) { die('Erreur : ' . $e->getMessage()); } ?>
Le code PHP de ma page principale
<?php // SAISIE DES DONNEES - CONCOURS TRIPLETTE if(!empty($_POST['capitaine']) && !empty($_POST['prenom_joueur1']) && !empty($_POST['nom_joueur1']) && !empty($_POST['licence1']) && !empty($_POST['prenom_joueur2']) && !empty($_POST['nom_joueur2']) && !empty($_POST['licence2']) && !empty($_POST['prenom_joueur3']) && !empty($_POST['nom_joueur3']) && !empty($_POST['licence3'])) { require('src/bdd.php'); // CONNEXION BDD // ON STOCK LES DONNEES DANS DES VARIABLES $capitaine = htmlspecialchars($_POST['capitaine']); $prenom_joueur1 = htmlspecialchars($_POST['prenom_joueur1']); $nom_joueur1 = htmlspecialchars($_POST['nom_joueur1']); $licence1 = htmlspecialchars($_POST['licence1']); $prenom_joueur2 = htmlspecialchars($_POST['prenom_joueur2']); $nom_joueur2 = htmlspecialchars($_POST['nom_joueur2']); $licence2 = htmlspecialchars($_POST['licence2']); $prenom_joueur3 = htmlspecialchars($_POST['prenom_joueur3']); $nom_joueur3 = htmlspecialchars($_POST['nom_joueur3']); $licence3 = htmlspecialchars($_POST['licence3']); // TEST SI NUMERO DE LICENCE DEJA SAISI // 1 - PREPARATION DES VARIABLES $sql = 'SELECT COUNT(*) AS listeLicence FROM triplette WHERE licence1 = ? AND licence2 = ? AND licence3 = ?'; $datas = array($licence1, $licence2, $licence3); // 2 - REQUETE try { $requete = $bdd->prepare($sql); $requete->execute(array($datas)); } catch (Exception $e) { echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } // 3 - TEST PRESENCE LICENCE while ($consultation = $requete->fetch()) { if ($consultation['listeLicence'] != 0) { header('location: triplette.php?error=1&message=Licence déjà utilisée pour ce concours'); // LICENCE DEJA UTLISEE exit(); } } // ENVOI DE LA REQUETE - ALIMENTATION DE LA BDD // 1 - PREPARATION DES VARIABLES $sql = 'INSERT INTO triplette(capitaine, prenom_joueur1, nom_joueur1, licence1, prenom_joueur2, nom_joueur2, licence2, prenom_joueur3, nom_joueur3, licence3) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; $datas = array($capitaine, $prenom_joueur1, $nom_joueur1, $licence1, $prenom_joueur2, $nom_joueur2, $licence2, $prenom_joueur3, $nom_joueur3, $licence3); // 2 - REQUETE try { $requete = $bdd->prepare($sql); $requete->execute(array($datas)); } catch (Exception $e) { echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } // header('location: triplette.php?success=1'); // exit(); } ?>
Lors du nouveau test, je reçois ces 2 erreurs :
Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens Les datas : Array ( [0] => 08203308776 [1] => 08203308775 [2] => 08203308774 )
Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens Les datas : Array ( [0] => VALLADE [1] => Eric [2] => VALLADE [3] => 08203308776 [4] => Florence [5] => CANTELOBRE [6] => 08203308775 [7] => Elodie [8] => HELIE [9] => 08203308774 )
Je cherche d'où viennent ces satanées erreurs mais là je bloque... Apparemment cela viendrait du dernier champs qui ne rentre pas dans le array si j'ai bien compris les mlessages...
<?php // Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); // Connexion à la bdd require('src/bdd.php'); // CONNEXION BDD //fonction permettant de récupérer proprement les variables function getPOST($nomVariable, $defaultValue = NULL ){ return !empty($_POST[$nomVariable]) ? trim($_POST[$nomVariable]) : $defaultValue; } //récupération propre des variables AVANT de les utiliser // NB: Htmlspecialchars ne doit servir QUE pour de l'affichage.. pas pour les requêtes SQL $capitaine = getPOST('capitaine'); $prenom_joueur1 = getPOST('prenom_joueur1'); $nom_joueur1 = getPOST('nom_joueur1'); $prenom_joueur2 = getPOST('prenom_joueur2'); $nom_joueur2 = getPOST('nom_joueur2'); $prenom_joueur3 = getPOST('prenom_joueur3'); $nom_joueur3 = getPOST('nom_joueur3'); $licence3 = getPOST('licence3'); $licence2 = getPOST('licence2'); $licence1 = getPOST('licence1'); //Traitement des données if($capitaine && $prenom_joueur1 && $nom_joueur1 && $prenom_joueur2 && $nom_joueur2 && $prenom_joueur3 && $nom_joueur3 && $licence3 ){ // TEST SI NUMERO DE LICENCE DEJA SAISI $sql = 'SELECT COUNT(*) AS listeLicence FROM triplette WHERE licence1 = ? AND licence2 = ? AND licence3 = ?'; $datas = array($licence1, $licence2, $licence3); try { $requete = $bdd->prepare($sql); $requete->execute(array($datas)); $consultation = $requete->fetch() } catch (Exception $e) { echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } // 3 - TEST PRESENCE LICENCE if ($consultation['listeLicence'] != 0) { header('location: triplette.php?error=1&message=Licence déjà utilisée pour ce concours'); // LICENCE DEJA UTLISEE exit(); } $sql = 'INSERT INTO triplette(capitaine, prenom_joueur1, nom_joueur1, licence1, prenom_joueur2, nom_joueur2, licence2, prenom_joueur3, nom_joueur3, licence3) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; $datas = array($capitaine, $prenom_joueur1, $nom_joueur1, $licence1, $prenom_joueur2, $nom_joueur2, $licence2, $prenom_joueur3, $nom_joueur3, $licence3); try { $requete = $bdd->prepare($sql); $requete->execute(array($datas)); header('location: triplette.php?success=1'); exit(); } catch (Exception $e) { echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } } ?>
Le code modifié
Par contre, j'ai inclus le test de la licence dans le catch car le test hors du catch me renvoie une variable indéfinie.
Toujours les mêmes erreurs :
Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens Les datas : Array ( [0] => 08203308776 [1] => 08203308775 [2] => 08203308774 )
Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens Les datas : Array ( [0] => VALLADE [1] => Eric [2] => VALLADE [3] => 08203308776 [4] => Florence [5] => CANTELOBRE [6] => 08203308775 [7] => Elodie [8] => HELIE [9] => 08203308774 )
Si je comprends bien ces 2 erreurs, il semblerait qu'il y ait un problème de taille de tableau entre le départ et l'arrivée. Le dernier numéro ne rentre pas dans le tableau sur chacune des erreurs.
Si c'est le cas, je ne comprends pas du tout car tout correspond entre la table de la BDD et ce qu'on lui envoie.
//Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); // Connexion à la bdd require('src/bdd.php'); // CONNEXION BDD //fonction permettant de récupérer proprement les variables function getPOST($nomVariable, $defaultValue = NULL ) { return !empty($_POST[$nomVariable]) ? trim($_POST[$nomVariable]) : $defaultValue; } //récupération propre des variables AVANT de les utiliser // NB: Htmlspecialchars ne doit servir QUE pour de l'affichage.. pas pour les requêtes SQL $capitaine = getPOST('capitaine'); $prenom_joueur1 = getPOST('prenom_joueur1'); $nom_joueur1 = getPOST('nom_joueur1'); $prenom_joueur2 = getPOST('prenom_joueur2'); $nom_joueur2 = getPOST('nom_joueur2'); $prenom_joueur3 = getPOST('prenom_joueur3'); $nom_joueur3 = getPOST('nom_joueur3'); $licence3 = getPOST('licence3'); $licence2 = getPOST('licence2'); $licence1 = getPOST('licence1'); //Traitement des données if($capitaine && $prenom_joueur1 && $nom_joueur1 && $prenom_joueur2 && $nom_joueur2 && $prenom_joueur3 && $nom_joueur3 && $licence3 ) { // TEST SI NUMERO DE LICENCE DEJA SAISI $sql = 'SELECT COUNT(*) AS listeLicence FROM triplette WHERE licence1 = ? AND licence2 = ? AND licence3 = ?'; $datas = array($licence1, $licence2, $licence3); try { $requete = $bdd->prepare($sql); $requete->execute(array($datas)); $consultation = $requete->fetch(); if ($consultation['listeLicence'] != 0) { header('location: triplette.php?error=1&message=Licence déjà utilisée pour ce concours'); // LICENCE DEJA UTLISEE exit(); } } catch (Exception $e) { echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } $sql = 'INSERT INTO triplette(capitaine, prenom_joueur1, nom_joueur1, licence1, prenom_joueur2, nom_joueur2, licence2, prenom_joueur3, nom_joueur3, licence3) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; $datas = array($capitaine, $prenom_joueur1, $nom_joueur1, $licence1, $prenom_joueur2, $nom_joueur2, $licence2, $prenom_joueur3, $nom_joueur3, $licence3); try { $requete = $bdd->prepare($sql); $requete->execute(array($datas)); header('location: triplette.php?success=1'); exit(); } catch (Exception $e) { echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } } ?>
Par contre, j'ai inclus le test de la licence dans le catch car le test hors du catch me renvoie une variable indéfinie.
Toujours les mêmes erreurs :
Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens Les datas : Array ( [0] => 08203308776 [1] => 08203308775 [2] => 08203308774 )
Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens Les datas : Array ( [0] => VALLADE [1] => Eric [2] => VALLADE [3] => 08203308776 [4] => Florence [5] => CANTELOBRE [6] => 08203308775 [7] => Elodie [8] => HELIE [9] => 08203308774 )
Si je comprends bien ces 2 erreurs, il semblerait qu'il y ait un problème de taille de tableau entre le départ et l'arrivée. Le dernier numéro ne rentre pas dans le tableau sur chacune des erreurs.
Si c'est le cas, je ne comprends pas du tout car tout correspond entre la table de la BDD et ce qu'on lui envoie.
Ce qui me parait étrange, c'est que tu sembles bien avoir autant de "?" que de variables envoyées dans l'array $datas à chacune de tes requêtes.
Le message d'erreur n'a donc aucun sens...
Pourrais tu t'assurer que ton fichier est bien encodé en utf8 sans bom ( voir chapitre 1 de ce lien : https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8)
Modifie également les "catch" de tes deux requêtes comme ceci
Le message d'erreur n'a donc aucun sens...
Pourrais tu t'assurer que ton fichier est bien encodé en utf8 sans bom ( voir chapitre 1 de ce lien : https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8)
Modifie également les "catch" de tes deux requêtes comme ceci
} catch (Exception $e) { echo " Erreur ! ".$e->getMessage(); echo " <br> Dans la Requete : <br>" . $sql ; echo " <br> Avec Les datas : <br>, " ; print_r($datas); exit; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'utilise Visual Studio Code - L'encodage est UTF-8 (sans BOM)
Après avoir fait la modification du catch, j'obtiens la même erreur mais pas la seconde
Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
Dans la requete :
SELECT COUNT(*) AS listeLicence FROM triplette WHERE licence1 = ? AND licence2 = ? AND licence3 = ?
Avec les datas :
Array ( [0] => 08203308776 [1] => 08203308775 [2] => 08203308774 )
Du coup, j'ai shunté la requête du test de la licence pour voir et la seconde erreur apparaît.
Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
Dans la requete :
INSERT INTO triplette(capitaine, prenom_joueur1, nom_joueur1, licence1, prenom_joueur2, nom_joueur2, licence2, prenom_joueur3, nom_joueur3, licence3) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Avec les datas :
Array ( [0] => VALLADE [1] => Eric [2] => VALLADE [3] => 08203308776 [4] => Florence [5] => CANTELOBRE [6] => 08203308775 [7] => Elodie [8] => HELIE [9] => 08203308774 )
Donc toujours au point de départ. Je vais finir par perdre le peu de cheveux qu'il me reste :)
Après avoir fait la modification du catch, j'obtiens la même erreur mais pas la seconde
Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
Dans la requete :
SELECT COUNT(*) AS listeLicence FROM triplette WHERE licence1 = ? AND licence2 = ? AND licence3 = ?
Avec les datas :
Array ( [0] => 08203308776 [1] => 08203308775 [2] => 08203308774 )
Du coup, j'ai shunté la requête du test de la licence pour voir et la seconde erreur apparaît.
Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
Dans la requete :
INSERT INTO triplette(capitaine, prenom_joueur1, nom_joueur1, licence1, prenom_joueur2, nom_joueur2, licence2, prenom_joueur3, nom_joueur3, licence3) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Avec les datas :
Array ( [0] => VALLADE [1] => Eric [2] => VALLADE [3] => 08203308776 [4] => Florence [5] => CANTELOBRE [6] => 08203308775 [7] => Elodie [8] => HELIE [9] => 08203308774 )
Donc toujours au point de départ. Je vais finir par perdre le peu de cheveux qu'il me reste :)
Oui effectivement il y avait cette erreur, merci à toi.
Par contre, il y en avait une seconde que je viens de voir et qui était énorme. J'avais passé mes numéros de licence en INT sauf que la valeur que je rentrais dépassait les paramètres des variables de type INT. Du coup, j'ai passé en BIGINT les 3 licences dans la table et ça fonctionne maintenant parfaitement.
En tout cas, merci à toi pour le temps passé et les précieuses informations données.
Par contre, il y en avait une seconde que je viens de voir et qui était énorme. J'avais passé mes numéros de licence en INT sauf que la valeur que je rentrais dépassait les paramètres des variables de type INT. Du coup, j'ai passé en BIGINT les 3 licences dans la table et ça fonctionne maintenant parfaitement.
En tout cas, merci à toi pour le temps passé et les précieuses informations données.