Numéro de paramètre invalide sous php 8.

Résolu/Fermé
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024 - 27 oct. 2021 à 18:27
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024 - 27 oct. 2021 à 18:44
Bonjour,
Ce message d'erreur que voici apparait uniquement sous PHP 8:



En ligne 137 de ce script:
<?php
session_start ();
/* Page principale : affiche la liste des QCM et les boutons pour les modifier. */
require_once 'connexion.php';
require_once 'fonctions.php';
// Test de la session admin. On commence par tester si une session admin est ouverte, ou si on est en train d'en ouvrir une (par le formulaire du bas de la page).
require_once 'admin_verif.php';
require 'conf.php';


$i=0;
$ii=0;
$no = time();

if ($admin == 0 && isset($_POST['passe']))
{
	// L'utilisateur a cliqué sur le bouton pour s'identifier en tant qu'admin.
	if ($_POST['passe'] == $passe)
	{
		$admin = 1; // Bon mot de passe.
		$_SESSION['passe'] = $passe; // On sauvegarde le mot de passe dans les variables de la session.
	}
}
// On recherche la liste des qcm pour en afficher celle ci.
$html_cadres = ''; // contient le code html correspondant aux cadres des albums.
$dossier_qcm = opendir('qcm');
$dir_nom = 'qcm'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point')
$dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
$dos= array(); // on déclare le tableau contenant le nom des dossiers
while($element = readdir($dir))
	{
		if($element != '.' && $element != '..') 
		{
			if (!is_dir($dir_nom.'/'.$element)) 
			{
				$extension = pathinfo($element, PATHINFO_EXTENSION);
			} else {
				$dos[] = $element;
			}
		}
	} 
	
$requete = $connection->prepare("SELECT id, date, date_debut FROM coeffi");//date est la date à laquelle fini la possibilité de répondre à la question.
$requete->execute();

while ($donnees = $requete->fetch())
{
    $id=($donnees['id']);//Champ id
    $dt=strtotime($donnees['date_debut']); //Champ date_debut
  
  
    $fi=strtotime($donnees['date']);//Champ date
    @$datefin=$dt+$jour;
    $datefin=$dt;
    $date_fin=date('Y-m-d-G-i-s',strtotime("$datefin day 1 hours"));
    
       if ($dt < $no ) { //Pour que la condition soit vraie: date de début de questions visibles doit être < date actuelle. ($dt est la date à partir de laquelle la question sera visible. $no est le temps présent.)
        $i=$i+1;
        
    }
    if ($dt < $no ) {
        $ii=$ii+1;// $ii est égal au nombre de fois que les dates pour la visibilité des questions en page d'accueil sont inférieurs au temps actuel.
    }
}

$_SESSION['ii']=$ii;//pour garder toute la visibilité des questions antérieures.Même celles dont il est trop tard pour répondre.
//$_SESSION['i']=$i;//pour garder toute la visibilité des questions antérieures.Même celles dont il est trop tard pour répondre.
        if ($admin == 1){ //Condition pour voir toutes les questions crées par celui ou celle qui les pose.
                $i=$id; //$i prend pour valeur le nombre de lignes dans la table coeffi.
                /* Sinon le nombre de tour de boucle While de la ligne 45.Permettant ainsi aux joueurs de ne voir que les questions selon les dates prévues. */
            }
                if(!empty($dos)) //Si $dos existe et n'est pas vide on entre dans la condition.
                {
                	sort($dos); // pour le tri croissant, (rsort() pour le tri décroissant)
                		//foreach($dos as $fichier)
                		
                		foreach(array_slice($dos, 0, $i) as $fichier ) //https://openclassrooms.com/forum/sujet/limiter-l-execution-d-un-foreach-58290 - Remplace la ligne précédente. $i permet de limiter le nombre de tour While à sa valeur.
                		{
                		// $fichier est le nom d'un dossier contenant les données d'un QCM.
                		// On lit les infos dans le fichier qcm/$fichier/qcm.xml pour en savoir plus sur le QCM.
                	@$fichier_xml = simplexml_load_file('qcm/'.$fichier.'/qcm.xml');//$fichier=1593547706 (le timestamp)
                	//$fichier_xml =  libxml_use_internal_errors()('qcm/'.$fichier.'/qcm.xml');//$fichier=1593547706 (le timestamp)https://www.php.net/manual/fr/function.libxml-use-internal-errors.php
                	$titre = (string)$fichier_xml->titre; //QCM N°1
                	$_SESSION['titre']=$titre;
                	$description = multi_lignes((string)$fichier_xml->description);
                	$boutons_admin = '';		
                	if ($admin == 1) $boutons_admin = motif('index_cadre_boutons', '[[QCM]]', $fichier);
                		// On génère le code html correspondant au cadre du qcm.
                		//$html_cadres = motif('index_cadre', array('[[TITRE]]', '[[QCM]]', '[[DESCRIPTION]]', '[[BOUTONS_ADMIN]]'), array($titre, $fichier, $description, $boutons_admin)) . $html_cadres;
                	$html_cadres = motif('index_cadre',array('[[TITRE]]', '[[QCM]]', '[[DESCRIPTION]]', '[[BOUTONS_ADMIN]]'), array($titre, $fichier, $description, $boutons_admin)) . $html_cadres;
                		}
                }
            
closedir($dossier_qcm);

$tz = new DateTimeZone('Europe/Paris');
$ajd = new DateTime('', $tz);//$adj est la date actuelle.

$requete = $connection->prepare("SELECT * FROM coeffi");
$requete->execute();
for ($numero = 0; $numero < 6; $numero++)
        {
        	while($row = $requete->fetch())	
        			{
        			$date = new DateTime(($row['date']), $tz);//date en base de données
        			$heure = new DateTime(($row['date']), $tz);//date en base de données + 1h
        			$jour = new DateTime(($row['date']), $tz);//date en base de données +1 jour		
        			$mois = new DateTime(($row['date'].' +1month'), $tz);//date en base de données + 1 mois
        			$annee = new DateTime(($row['date'].' +1year'), $tz);//date en base de données + 1 année
			}		
        }
        
// Code pour afficher le bas de la page : formulaire pour s'identifier en admin ou ajouter un nouveau QCM.
if ($admin == 1) $admin_index = motif('index_admin', '', '');
else $admin_index = motif('index_admin_id', '', '');
// On génère le code html de la page principale.
$html = motif('index', array('[[CADRES]]', '[[ADMIN_INDEX]]'), array($html_cadres, $admin_index));
//$html_cadres concerne toutes les questions.
$requete->closeCursor(); // Termine le traitement de la requête	

/******************************* Définir le pseudo par username à partir du cookie *********************/
$auth = !empty($_COOKIE['auth']) ? $_COOKIE['auth'] : NULL;//On lit le ccokies.
//echo $auth;//OK si cookie

//21-----90cda9a768e713e997462d24fc936e0912f8664d  21 c'est l'id. 90cda9a768e713e997462d24fc936e0912f8664d est le nom du cookie haché.
//exit ();
			//explode :
			$a_auth = explode('-----',$auth);//Sépare l'id du nom du cookie haché en utilisant le séparateur -----

			// on extrait l'ID si présence cookies.
			$id =  !empty($a_auth) ? $a_auth[0] : NULL;
$x="";
	if (!empty ($id))
			{
				$requete = $connection->prepare("SELECT username FROM inscriptions WHERE id='$id'");
						$requete->execute(array(
						    ':username'=>$id // Lorsque le cookie est présent le défaut apparait.
						));	
						while ($row = $requete->fetch(PDO::FETCH_ASSOC))
						{
							$x=($row['username']);
						}
			}

$message = '<h1 style="color: blue; font-size:31px; font-style: italic">'.$x.'   <img src="./img/ete.gif" style="vertical-align:middle" alt="Bienvenue" /></a></h1>'; 

?>

<!DOCTYPE html>
<html>
<head>
<title>Q-C-M</title>   
<meta charset="utf-8">
<link rel="stylesheet" href="stylee.css" /> 
<style>
/*div.bouton-aligne{
	display:inline-block;
	width:50%;
	margin:10px 2,5% 10px 2,5%;
	text-align:center;
}*/

input[type=button], input[type=submit], input[type=reset], button, .button {
	padding: 5px 15px;
	margin: 3px 4px;
	display: inline-block;
	color: #ffffff;
	font-size: 16px;
	cursor: pointer;
	background: #4095ff;
	background: linear-gradient(top, #4095ff 0%, #ff0000 100%);/*#277ce6 100%*/
	background: -moz-linear-gradient(top, #4095ff 0%, #ff0000 100%);/*#277ce6 100%*/
	background: -webkit-linear-gradient(top, #4095ff 0%, #ff0000 100%);/*#277ce6 100% FIREFOX*/
	background: -o-linear-gradient(top, #4095ff 0%, #ff0000 100%);/*#277ce6 100%*/
	border: 1px solid #338bf6;
	border-radius: 5px;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	-o-border-radius: 5px;
	box-shadow:0px 0px 2px 1px rgba(0, 0, 0, 0.25), inset 1px 1px 0px 0px rgba(255, 255, 255, 0.25);
	-moz-box-shadow:0px 0px 2px 1px rgba(0, 0, 0, 0.25), inset 1px 1px 0px 0px rgba(255, 255, 255, 0.25);
	-webkit-box-shadow:0px 0px 2px 1px rgba(0, 0, 0, 0.25), inset 1px 1px 0px 0px rgba(255, 255, 255, 0.25);
	-o-box-shadow:0px 0px 2px 1px rgba(0, 0, 0, 0.25), inset 1px 1px 0px 0px rgba(255, 255, 255, 0.25);
	text-shadow: 1px 1px 0px rgba(0, 0, 0, 0.50);
}
input[type=button]:hover, input[type=submit]:hover, input[type=reset]:hover, button:hover, .button:hover {
	background: linear-gradient(top, #5aafff 0%, #4095ff 100%);
	background: -moz-linear-gradient(top, #5aafff 0%, #4095ff 100%);
	background: -webkit-linear-gradient(top, #5aafff 0%, #4095ff 100%);
	background: -o-linear-gradient(top, #5aafff 0%, #4095ff 100%);
}

#scroll_to_top {
  position: fixed;
  width: 25px;
  height: 25px;
  bottom: 50px;
  right: 30px;
}
#scroll_to_top img {
  width: 50px;
}
/*input[type=button]:active, input[type=submit]:active, input[type=reset]:active, button:active, .button:active{
	opacity:0.8;
}*/
</style>
</head> 
<body>
<table>
    <tr>
        <td>  
	    <input type="button" name="lien1" value="      Accueil     " onclick="self.location.href='/index.html'" style="font-size: 20px;"> 
	   </td>
        <td>  
	    <input type="button" name="lien1" value="  Règle du jeu   " onclick="self.location.href='/Site_forum.html'" style="font-size: 20px;"> 
	   </td>
	   <td>
	    <input type="button" name="lien2" value="Se déconnecter" onclick="self.location.href='/_qcm/ph_qcm/logout.php'" style="font-size: 20px;">
       </td>
    </tr>
</table>     

    <?php echo $message; //username  Bienvenu au jeu .... ?>
   
<div>
        <div style="float:left;margin-left: 16%;"><h3><a href="/_qcm/ph_qcm/ident.php">Revoir les résultats.<img src="https://www.lacasagoum.com/php/images/gifs/fleches/9right.gif" style="vertical-align:middle" alt="retour" /></a></h3></div>   
        
        <div style="float:right;margin-right: 16%;"><h3><a href="/_qcm/formulaire.php">        Ecrire à l'admin. <img src="https://www.lacasagoum.com/php/images/gifs/email/emailgr1.gif" style="vertical-align:middle" alt="Ecrire un message" /></a></h3></div></br></br></br></br>       
</div>      

</body></html>
<?php
echo $html;
?>


Malgré mes recherches je ne comprends pas d'où provient l'anomalie.
Pourriez vous m'aider à trouver?
Merci.


Configuration: Windows / Firefox 93.0
A voir également:

2 réponses

jordane45 Messages postés 38430 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 février 2025 4 735
27 oct. 2021 à 18:34
Bonjour,

ça ne vient pas de la version de php ... mais du fait que l'affichage des erreurs PDO doivent être activées dans ta connexion à la bdd ( ce qui est une bonne chose)

Bref, le problème c'est la mauvaise écriture du code ....

Ceci
	$requete = $connection->prepare("SELECT username FROM inscriptions WHERE id='$id'");
	$requete->execute(array(
			':username'=>$id // Lorsque le cookie est présent le défaut apparait.
		));	

Est à corriger par

	$requete = $connection->prepare("SELECT username FROM inscriptions WHERE id= :id");
	$requete->execute(array(':id'=>$id));	


Je te conseilles de te former correctement à PDO et à l'écriture des requêtes SQL ....




0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
27 oct. 2021 à 18:44
Merci Jordane.
Je tâcherai de suivre ton conseil.
Ce problème est résolu.
0