Aucune alimentation dans la table de la base de données
Résolu/Fermé
Izzara
-
Modifié le 14 mars 2021 à 16:28
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 - 14 mars 2021 à 21:35
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 - 14 mars 2021 à 21:35
A voir également:
- Aucune alimentation dans la table de la base de données
- Table ascii - Guide
- Table des matières word - Guide
- Formules excel de base - Guide
- La zone de données passée à un appel système est insuffisante - Windows 11
- Afficher les tables d'une base de données sql ✓ - Forum Programmation
5 réponses
jordane45
Messages postés
38308
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
14 mars 2021 à 17:08
14 mars 2021 à 17:08
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
.
Izzara82
Messages postés
26
Date d'inscription
dimanche 14 mars 2021
Statut
Membre
Dernière intervention
11 janvier 2023
1
Modifié le 14 mars 2021 à 19:01
Modifié le 14 mars 2021 à 19:01
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...
jordane45
Messages postés
38308
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
14 mars 2021 à 19:16
14 mars 2021 à 19:16
<?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); } } ?>
Izzara82
Messages postés
26
Date d'inscription
dimanche 14 mars 2021
Statut
Membre
Dernière intervention
11 janvier 2023
1
Modifié le 14 mars 2021 à 19:59
Modifié le 14 mars 2021 à 19:59
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.
jordane45
Messages postés
38308
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
14 mars 2021 à 20:03
14 mars 2021 à 20:03
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
Izzara82
Messages postés
26
Date d'inscription
dimanche 14 mars 2021
Statut
Membre
Dernière intervention
11 janvier 2023
1
Modifié le 14 mars 2021 à 21:04
Modifié le 14 mars 2021 à 21:04
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 :)
jordane45
Messages postés
38308
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
14 mars 2021 à 21:20
14 mars 2021 à 21:20
Je viens de voir l'erreur ..... il y a un "array" en trop dans le execute
A corriger par
$requete->execute(array($datas));
A corriger par
$requete->execute($datas);
Izzara82
Messages postés
26
Date d'inscription
dimanche 14 mars 2021
Statut
Membre
Dernière intervention
11 janvier 2023
1
>
jordane45
Messages postés
38308
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
14 mars 2021 à 21:35
14 mars 2021 à 21:35
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.