Numéro de paramètre invalide.

Résolu/Fermé
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024 - 22 déc. 2021 à 11:00
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024 - 22 déc. 2021 à 18:47
Bonjour,

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:

6 réponses

jordane45 Messages postés 38397 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 janvier 2025 4 732
Modifié le 22 déc. 2021 à 11:34
L'erreur concerne la ligne 61 et les précédentes (à partir de la 57 )
$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 !



0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
22 déc. 2021 à 14:41
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 ?
0
jordane45 Messages postés 38397 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 janvier 2025 4 732
22 déc. 2021 à 14:53
oula....

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 ..
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
22 déc. 2021 à 15:18
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:
$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.
0
jordane45 Messages postés 38397 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 janvier 2025 4 732
22 déc. 2021 à 16:43
Mais ce n'est pas cette ligne qui pose problème ... mais le EXECUTE que tu fais ensuite !!!!!

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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
22 déc. 2021 à 17:14
Merci pour tes explications qui ne sont pas inutiles pour moi.
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.
0
jordane45 Messages postés 38397 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 janvier 2025 4 732
22 déc. 2021 à 17:49
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.
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
22 déc. 2021 à 18:47
Je pense aussi que c'est cela.
Merci pour tout.
Joyeux Noël et bonne fête de fin d'année.
Très cordialement.
0