Numéro de paramètre invalide.
Résolu
Max747
Messages postés
258
Date d'inscription
Statut
Membre
Dernière intervention
-
Max747 Messages postés 258 Date d'inscription Statut Membre Dernière intervention -
Max747 Messages postés 258 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Ayant l'intention de réaliser un sondage sous PHP 8, je rencontre une erreur lors du déroulement de ce script:
Voici cette erreur:

Elle se situerait en ligne 61 ?
Il s'agirait peut être d'un problème de correspondance de variables?
N'en étant pas sure, sauriez vous me résoudre ce problème?
Merci d'avance.
Avec toute la considération que je porte en vous pour vos compétences à résoudre les problèmes difficiles.
Ayant l'intention de réaliser un sondage sous PHP 8, je rencontre une erreur lors du déroulement de ce script:
<?php include('f.php'); include ('connexion.php'); $ip=getIp();// getIp() est une fonction du fichier f.php fournissant l'ip. if (!empty($_POST['value'])) { $voteValue = $_POST['value']; addVoteTo($voteValue); } ?> <h2 class="resultH2">Résultats des votes : </h2> <table class="results"> <?php $pollItems = selectAllItemsByVote(); foreach($pollItems as $pollItem){ ?> <tr> <td bgcolor="#78ED7D"><strong><?=$pollItem['name'];?> :</strong></td> <td bgcolor="#F5F513"><?=$pollItem['votes'];?></td> </tr> <?php } ?> </table> <?php ############## Obtenir le pseudo à partir du cookie ###################### if (isset($_COOKIE["auth"])){ //récupération PROPRE de la variable COOKIE AVANT de l'utiliser $auth = !empty($_COOKIE['auth']) ? $_COOKIE['auth'] : NULL; $a_auth = explode('-----',$auth); // on extrait l'ID si présence cookies. $id = !empty($a_auth) ? $a_auth[0] : NULL; if (!empty ($id)){ $requete = $connection->prepare("SELECT id, username FROM inscriptions WHERE id=:id"); $requete->execute(array(':id'=>$id)); $row = $requete->fetch(PDO::FETCH_ASSOC); $username = !empty($row['username']) ? $row['username']: ''; } }else{ echo "Il n'y a pas de cookies"; } ######## Obtenir la date courante au format y/m/d pour la table ip_qcm ######## $date= date ('y/m/d'); $query = $connection->prepare('INSERT INTO ip_qcm (name,pseudo,ip,date) VALUES(:facile,:pseudo,:ip,:date)'); $query->execute(array( 'facile' => $voteValue, 'pseudo' => $username, 'ip' => $ip, 'date'=>$date)); $query-> closeCursor(); $requete = $connection->prepare("SELECT id,name,pseudo,date FROM ip_qcm "); $requete->execute(array( ':name' => $voteValue, ':pseudo' => $username, ':date' => $date )); while ($row = $requete->fetch(PDO::FETCH_ASSOC)) { ?> <table border="3" rules="none" style="margin-left:5%; margin-bottom:10px"> <tr> <td width=33% , bgcolor="#B5CAF9"> <?php echo ($row['pseudo']); ?> </td> <td width=33% , bgcolor="#78ED7D"> <?php echo ($row['name']); ?> </td> <td width=33% , bgcolor="#F5F513"> <?php $Date= ($row['date']); echo maDate($Date);//maDate est une fonction permettant de transformer une date anglaise en français. ?> </td> </tr> <?php } ?>
Voici cette erreur:

Elle se situerait en ligne 61 ?
Il s'agirait peut être d'un problème de correspondance de variables?
N'en étant pas sure, sauriez vous me résoudre ce problème?
Merci d'avance.
Avec toute la considération que je porte en vous pour vos compétences à résoudre les problèmes difficiles.
Configuration: Windows / Firefox 95.0
A voir également:
- Numéro de paramètre invalide.
- Numéro père noël whatsapp - Accueil - Messagerie instantanée
- Numero prive - Guide
- Remettre parametre usine pc - Guide
- Parametre dns - Guide
- Parametre windows - Guide
6 réponses
L'erreur concerne la ligne 61 et les précédentes (à partir de la 57 )
Donc.. dans ta requête ... tu n'as aucune variable ... et pourtant ... tu essais d'en mettre dans le execute ...
normal qu'il y ait une erreur !
$requete = $connection->prepare("SELECT id,name,pseudo,date FROM ip_qcm "); $requete->execute(array( ':name' => $voteValue, ':pseudo' => $username, ':date' => $date ));
Donc.. dans ta requête ... tu n'as aucune variable ... et pourtant ... tu essais d'en mettre dans le execute ...
normal qu'il y ait une erreur !
Je ne comprends pas.
Car les variables $voteValue, $username et $date contiennent chacune leur valeur.
A savoir aussi que sous PHP 7 ce message d'erreur n'apparait pas.
Quelle variable devrait il y avoir?
En ligne 57 peut être ?
Car les variables $voteValue, $username et $date contiennent chacune leur valeur.
A savoir aussi que sous PHP 7 ce message d'erreur n'apparait pas.
Quelle variable devrait il y avoir?
En ligne 57 peut être ?
oula....
Vois tu ... dans ta requête ... des VARIABLES ?
Mois je n'en vois aucune !
La requête SQL c'est
id, name , pseudo et date sont des CHAMPS de ta table
La table c'est ip_qcm
Rien là dedans n'est une "VARIABLE"
En comparaison, si on prend l'autre requête qui se trouve quelques lignes plus haut.. on a le code php
Là dedans on a la requête SQL qui est :
(name,pseudo,ip,date) sont les CHAMPS de la table ip_qcm dans lesquels tu vas insérer des données...
Données matérialisées par les variables : :facile,:pseudo,:ip,:date (remarque les deux points qui se trouvent devant chaque variable... )
Et donc.. dans le exécute .. tu associe chaque ":variable" à la valeur que tu veux y mettre
(en mettant les deux-points aussi devant le nom de chaque variable c'est préférable ..
Vois tu ... dans ta requête ... des VARIABLES ?
Mois je n'en vois aucune !
La requête SQL c'est
SELECT id,name,pseudo,date FROM ip_qcm
id, name , pseudo et date sont des CHAMPS de ta table
La table c'est ip_qcm
Rien là dedans n'est une "VARIABLE"
En comparaison, si on prend l'autre requête qui se trouve quelques lignes plus haut.. on a le code php
$query = $connection->prepare('INSERT INTO ip_qcm (name,pseudo,ip,date) VALUES(:facile,:pseudo,:ip,:date)'); $query->execute(array( 'facile' => $voteValue, 'pseudo' => $username, 'ip' => $ip, 'date'=>$date));
Là dedans on a la requête SQL qui est :
INSERT INTO ip_qcm (name,pseudo,ip,date) VALUES(:facile,:pseudo,:ip,:date)
(name,pseudo,ip,date) sont les CHAMPS de la table ip_qcm dans lesquels tu vas insérer des données...
Données matérialisées par les variables : :facile,:pseudo,:ip,:date (remarque les deux points qui se trouvent devant chaque variable... )
Et donc.. dans le exécute .. tu associe chaque ":variable" à la valeur que tu veux y mettre
array( ':facile' => $voteValue, ':pseudo' => $username, ':ip' => $ip, ':date'=>$date)
(en mettant les deux-points aussi devant le nom de chaque variable c'est préférable ..
Merci pour ton explication.
J'ai mis les : à l'endroit que tu m'indiques concernant la requête INSERT.
Concernant la requête SELECT j'ai bien mis dès le début les : comme indiqué ci dessous:
Néanmoins pourrais tu m'indiquer par exemple comment pourrait être modifié cette ligne :
Pour que le script soit conforme à PHP 8. Et ainsi ne plus faire apparaître le message d'erreur.
Puisque les autres lignes sont correctes.
Merci.
J'ai mis les : à l'endroit que tu m'indiques concernant la requête INSERT.
Concernant la requête SELECT j'ai bien mis dès le début les : comme indiqué ci dessous:
$requete = $connection->prepare("SELECT id,name,pseudo,date FROM ip_qcm "); $requete->execute(array( ':name' => $voteValue, ':pseudo' => $username, ':date' => $date ));
Néanmoins pourrais tu m'indiquer par exemple comment pourrait être modifié cette ligne :
$requete = $connection->prepare("SELECT id,name,pseudo,date FROM ip_qcm ");
Pour que le script soit conforme à PHP 8. Et ainsi ne plus faire apparaître le message d'erreur.
Puisque les autres lignes sont correctes.
Merci.
Mais ce n'est pas cette ligne qui pose problème ... mais le EXECUTE que tu fais ensuite !!!!!
Dans le code :
Tu as ... le prepare de la requete ... ( requête qui ne contient AUCUNE variable ... )
Puis ensuite son execute ... dans lequel tu transmet des variables à associer à la requête ...
mais comme la requête n'attend aucune variable .... ça génère une erreur ....
Vu que tu ne sembles pas comprendre .... je vais te donner la solution ...
mais bon.. faut franchement que tu comprennes... il n'y a rien de plus simple .... et je ne vois pas comment je pourrais te le dire autrement ...
Donc :
Code à corriger par :
Dans le code :
$requete = $connection->prepare("SELECT id,name,pseudo,date FROM ip_qcm "); $requete->execute(array( ':name' => $voteValue, ':pseudo' => $username, ':date' => $date ));
Tu as ... le prepare de la requete ... ( requête qui ne contient AUCUNE variable ... )
Puis ensuite son execute ... dans lequel tu transmet des variables à associer à la requête ...
mais comme la requête n'attend aucune variable .... ça génère une erreur ....
Vu que tu ne sembles pas comprendre .... je vais te donner la solution ...
mais bon.. faut franchement que tu comprennes... il n'y a rien de plus simple .... et je ne vois pas comment je pourrais te le dire autrement ...
Donc :
Code à corriger par :
$requete = $connection->prepare("SELECT id,name,pseudo,date FROM ip_qcm "); // la requête n'attend AUCUNE VARIABLE $requete->execute(); // tu vois.. AUCUNE VARIABLE à associer à la requête
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour tes explications qui ne sont pas inutiles pour moi.
Car j'ai compris que cette ligne:
Ne comportant pas de variables (à la fin notamment) ne doit pas exécuter de variables comme c'était le cas sous PHP 7 sans comporter de message d'erreur.
En fait je viens de faire l'essai sous PHP 7 et cela fonctionne aussi sans la présence de ces 3 variables.
J'ai donc bien compris qu'il ne doit pas y avoir de variables après execute() lorsqu'il n'y en a pas dans la lignes requête!
C'est aussi avec l' exemple que tu m'as donné que j'ai compris plus facilement ce principe.
Tu as donc réussi à me faire comprendre ce que tu souhaitais que je comprenne.
Merci.
Sujet résolu.
Très cordialement.
Car j'ai compris que cette ligne:
$requete = $connection->prepare("SELECT id,name,pseudo,date FROM ip_qcm ");
Ne comportant pas de variables (à la fin notamment) ne doit pas exécuter de variables comme c'était le cas sous PHP 7 sans comporter de message d'erreur.
En fait je viens de faire l'essai sous PHP 7 et cela fonctionne aussi sans la présence de ces 3 variables.
J'ai donc bien compris qu'il ne doit pas y avoir de variables après execute() lorsqu'il n'y en a pas dans la lignes requête!
C'est aussi avec l' exemple que tu m'as donné que j'ai compris plus facilement ce principe.
Tu as donc réussi à me faire comprendre ce que tu souhaitais que je comprenne.
Merci.
Sujet résolu.
Très cordialement.
Ce n'est pas tant une différence de version de php ... que de paramétrage au niveau de l'affichage ou non des différents types d'erreurs PHP et /ou PDO...
Cela passe par la configuration au niveau du serveur .. et/ou du fichier php.ini ... et ou l'utilisation de certains instructions dans le code php.
Cela passe par la configuration au niveau du serveur .. et/ou du fichier php.ini ... et ou l'utilisation de certains instructions dans le code php.