Problème affichage des données du formulaire php

Résolu/Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 26 févr. 2023 à 20:31
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 1 mars 2023 à 14:59

Bonjour, je me retrouve devant un problème que j'ai du mal à comprendre. J'ai une page PHP dont je saisie les oeuvres musicales avec un formulaire de 4 champs. 1 champ de type texte, 1 de type="checkbox et 2 champs avec liste déroulante issue de ma base de donnée.  Lorsque je souhaite faire une modification je saisie le lien d'une œuvre pour effectuer la modification d'un enregistrement et malheureusement les 2 champs de liste déroulante me retourne les dernières valeurs de ses listes et non les valeurs concernés par l’œuvre sélectionnée. J'ai fait un var_dump et cela retourne bien le bon ID de l’œuvre et idem lorsque je survol les liens. Je vous remercie beaucoup pour votre aide. Voici le page concernée.

<?php
$index = 2;
require("libs/init.php");
require("libs/class.liste.php");
$debug = 0; 

$LDorch	= new liste("libs/orchestrations","",""); 
$LDaut 	= new liste("libs/auteurs","","");  

$action		= 'new';
$a 			= !empty($_GET['a']) ? $_GET['a'] : NULL;
$submit 	= !empty($_POST['submit']) ? $_POST['submit'] : NULL;
$haction 	= !empty($_POST['haction']) ? $_POST['haction'] : NULL;

$idoeu 		= !empty($_REQUEST['idoeu']) ? $_REQUEST['idoeu'] : NULL;
$oeuvre 	= !empty($_POST['oeuvre']) ? ucfirst(stripslashes($_POST['oeuvre'])) : '';
$idaut 		= !empty($_POST['idaut']) ? $_POST['idaut'] : '';
$idorch 	= !empty($_POST['idorch']) ? $_POST['idorch'] : '';
$conduct 	= !empty($_POST['conduct']) ? $_POST['conduct'] : '';

switch($a) {
	case 'new': $action = 'new';  break; 
	case 'ls' : $action = 'list'; break;
	case 'mod': $action = 'mod';  break; 
	default   : $action = 'new';  break; 
}

if($submit) {

	switch($haction) {
		case 'new':
			$sql = "SELECT oeuvre, idorch FROM cdc_oeuvres WHERE oeuvre = :oeuvre AND idorch = :idorch";
			$datas = array('oeuvre' => $oeuvre, 'idorch' => $idorch);
			$result = executeQuery($sql,$datas);
			$nb = $result->rowCount();

			if ($nb > 0) {
				$erreur = "<span class='erreur'>Cet Oeuvre de cette orchestration existe déjà</span>";
			} else {
				
				$sql = "INSERT INTO cdc_oeuvres (oeuvre, idaut, idorch, conduct) VALUES (:oeuvre, :idaut, :idorch, :conduct)";
				$datas = array('oeuvre' => $oeuvre, 'idaut' => $idaut, 'idorch' => $idorch, 'conduct' => $conduct);
				$result = executeQuery($sql,$datas);
				$typenr = "enregistré";
				$reqaj = $sql;  
				$success = "<span class='success'>La nouvelle oeuvre - ".trim(stripslashes("$oeuvre"))." - a été $typenr.</span>";
			}
		break;

		case 'mod':
			$sql = "UPDATE cdc_oeuvres SET oeuvre = :oeuvre, idaut = :idaut, idorch = :idorch, conduct = :conduct WHERE idoeu = :idoeu";
			$datas = array('oeuvre' => $oeuvre, 'idaut' => $idaut, 'idorch' => $idorch, 'conduct' => $conduct, 'idoeu' => $idoeu);
			$result = executeQuery($sql,$datas);
			$typenr = "modififié"; 
			$reqmod  = $sql;  
			$success = "<span class='success'>L'oeuvre - ".trim(stripslashes("$oeuvre"))." - a été $typenr.</span>";
		break;
	}
}

switch($action) {
	case 'new':   
		$title      = "Saisie d'une Oeuvre"; 
		$btsub      = "Enregistrer";      
		$idoeu      = "";
		$oeuvre     = "";
		$idaut      = "";
		$idorch     = "";
		$conduct 	= "";
	break;

	case 'list': 
		$title  	= "Liste des Oeuvres";
	break;

	case 'mod': 
		$title      = "Modification d'une Oeuvre";
		$btsub      = "Modifier";
		$sql    	= "SELECT * FROM cdc_oeuvres WHERE idoeu = :idoeu";
		$datas 		= array('idoeu' => $idoeu);
		$result 	= executeQuery($sql,$datas);
		$donnees 	= $result->fetch();
		$idoeu      = $donnees->idoeu;
		$oeuvre     = ucfirst(stripslashes($donnees->oeuvre));
		$idaut      = $donnees->idaut;
		$idorch     = $donnees->idorch;
		$conduct 	= $donnees->conduct;
	break;
}
?>
<html>

<head>
<?php headers(25); ?>

<script language="javascript" type="text/javascript">
//==================================================
// NB: Les fonctions is...() ne retournent que Vrai ou Faux.
//     Les fonctions isValid...() retournent OK ou un message d'erreur
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste si le caractère passé en paramètre (c) est un caractère autorisé (liste en paramètre)
function isCharInList(c,list) {
	var c,list;
	if (list.indexOf(c.toLowerCase()) < 0) { return false; } else { return true; }
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste si tous les caractères de la chaine passée en paramètre (str) sont autorisés
// Fonction dépendante de isCharInList()
function isStringInList(str,list) {
	var str,list,n;
	for (n=0; n<str.length; n++) {
		if (!isCharInList(str.substring(n,n+1),list)) { return false; }
	}
	return true;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste si les caractères passés en paramètre corespondent à un TDL valide
function isTLD(tld) {
	var tld,domains;
	domains = "com|net|int|org|edu|mil|gov|af|al|dz|as|ad|ao|ai|aq|ag|ar|am|aw|ac|au|at|"
		+ "az|bh|bd|bb|by|be|bz|bj|bm|bt|bo|ba|bw|bv|br|io|bn|bg|bf|bi|gg|je|kh|cm|ca|"
		+ "cv|ky|td|cl|cn|cx|cc|co|km|cg|ck|cr|ci|hr|cf|cu|cy|cz|dk|dj|dm|do|tp|ec|eg|"
		+ "sv|gq|er|ee|et|fk|fo|fj|fi|gf|pf|tf|fr|fx|ga|gm|ge|de|gh|gi|gr|gl|gd|gp|gu|"
		+ "gt|gn|gw|gy|ht|hm|hn|hk|hu|is|in|id|ir|iq|ie|im|il|it|jm|jp|jo|kz|ke|ki|kp|"
		+ "kr|kw|kg|la|lv|lb|ls|lr|ly|li|lt|lu|mo|mk|mg|mw|my|mv|ml|mt|mh|mq|mr|mu|yt|"
		+ "mx|fm|md|mc|mn|ms|ma|mz|mm|mp|na|nr|np|an|nl|nc|nz|ni|ne|ng|nu|nf|no|om|pk|"
		+ "pw|pa|pg|py|pe|ph|pn|pl|pt|pr|qa|re|ro|ru|rw|gs|lc|ws|sm|st|sa|sn|sc|sl|sg|"
		+ "sk|si|sb|so|za|es|lk|sh|kn|pm|vc|sd|sr|sj|sz|se|ch|sy|tw|tj|tz|th|bs|tg|tk|"
		+ "to|tt|tn|tr|tm|tc|tv|um|ug|ua|uk|us|uy|ae|uz|vu|va|ve|vn|vg|vi|wf|eh|ye|yu|"
		+ "zr|zm|zw|eu|"
		+ "biz|info|aero";
	if (domains.indexOf(tld.toLowerCase()) < 0) { return false; } else { return true; }
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste le format d'une adresse email.
// Fonction dépendante de isTLD()
// Login non null, doit contenir "@" dans l'adresse, un point dans le domaine et un TLD valide
function isEmail(address) {
	var address,parts,domains;
	if (address.indexOf("@") <= 0)         { return false; }
	parts = address.split("@");
	if (parts[0].length == 0)              { return false; }
	if (parts[1].indexOf(".") <= 0)        { return false; }
	domains = parts[1].split(".");
	if (!isTLD(domains[domains.length-1])) { return false; }
	return true;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste le format d'une date (JJ/MM/AAAA ou MM/JJ/AAAA).
function isDate(date) {
	var date, reg = new RegExp("^[0-9]{2}[/]{1}[0-9]{2}[/]{1}[0-9]{4}$","g");
	if(reg.test(date)) { return true; } else { return false; }
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste la validité d'une date française (JJ/MM/AAAA).
// Fonction dépendante de isDate()
function isValidDate(date) {
	var date,tab;
	if(isDate(date)) {
		tab=date.split('/');
		if((tab[0]*1)<1 || (tab[0]*1)>31) { return "Jour incorrect"; }
		if((tab[1]*1)<1 || (tab[1]*1)>12) { return "Mois incorrect"; }
		return "OK";
	}
	return "Format date incorrect";
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Teste la validité d'un champ de type texte (longueur et caractères autorisés)
// Fonction dépendante de isStringInList()
function isValidText(champ,chars,li,ls) {
	var champ,chars,li,ls,lg,msg;
	lg = champ.length;
	if(li || ls) {
		if(lg < li) { msg = "Saisie trop courte:\nMinimum : "+li;  return msg; }
		if(lg > ls) { msg = "Saisie trop longue:\nMaximum : "+ls;  return msg; }
	}
	if(!isStringInList(champ,chars)) { msg = "Caractères interdits !"; return msg; }
	return "OK";
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Supprime les espaces de début et de fin de chaîne
function trim(myString) {
	return myString.replace(/^\s+/g,'').replace(/\s+$/g,'');
}

//==========================================================================================
// Variables diverses
var today = new Date();
var annee = today.getFullYear();
// Listes des (c)aractères classiques (a)utorisés (ca_*) dans les différents champs de saisie
var ascii     = "abcdefghijklmnopqrstuvwxyz";
var lettres   = "abcdefghijklmnopqrstuvwxyzàâäéèêëîïùûüçôö";
var chiffres  = "0123456789";

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Caractères autorisés
// Champs testés:
ca_oeuvre     = lettres + chiffres + "-,. '()°!";

function verif() {
	// Récupération des valeurs du formulaire
	idoeu   = document.oeuv.idoeu.value;     // Si modification d'une oeuvre
	oeuvre  = document.oeuv.oeuvre.value;        // saisie obligatoire
	idaut   = document.oeuv.idaut.options[document.oeuv.idaut.selectedIndex].value;
	idorch  = document.oeuv.idorch.options[document.oeuv.idorch.selectedIndex].value;

	// Test de la présence et de la validité des champs obligatoires.
	if(!oeuvre) {
		alert("Veuillez indiquer L'oeuvre musicale");
		document.oeuv.oeuvre.focus();
		return false;
	}
	msg = isValidText(oeuvre,ca_oeuvre,2,60);
	if(msg != "OK") {
		alert("Oeuvre :\n"+msg);
		document.oeuv.oeuvre.focus();
		return false;
	}
	return true;
}
</script>
</head>

<body>
<div id="smen"><?php echo writeMenuV($index); ?></div>
<div id="pg" style="padding-left:50px; padding-top:25px">
<!-- ~~~~~ Contenu de la page ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<?php
echo '<div>'.$success.'</div>';
echo '<div>'.$erreur.'</div>';
echo '<br/>';

// Instructions à réaliser s'il faut lister
if($action == 'list') {
	echo '<h1>'.$title.'</h1>';

	// Lister les années pour y accéder directement
	echo '<h2>Index</h2>';
	$tm       = '|';  // "Table des matières"
	$nbl      = 0;    // Nombre de lettres
	for($n = 65; $n <= 90; $n++) {
		$lettre = chr($n);
		$tm .= '&nbsp;<a href="#a'.$lettre.'">'.$lettre.'</a>&nbsp;|';
		$nbl++;
		if($nbl == 13) { $tm .= '<br/>|'; }
	}
	echo '<div style="font-family:courier">'.$tm.'</div>';

	// Lister tous les enregistrements avec un lien pour effectuer la modif d'un enregistrement
	$sql = "SELECT *
		FROM cdc_orchestrations
			RIGHT JOIN cdc_oeuvres ON cdc_oeuvres.idorch = cdc_orchestrations.idorch
		ORDER BY oeuvre";
	$result = executeQuery($sql,$datas);

	echo '<h2>Oeuvres</h2>';
	echo '<ul>';
	while ($donnees = $result->fetch()) {
		$lien = $_SERVER["PHP_SELF"].'?a=mod&amp;idoeu='.$donnees->idoeu;
		$initiale = substr($donnees->oeuvre,0,1);
		echo '<li><a name="a'.$initiale.'"></a><a href="'.$lien.'">'.stripslashes(ucfirst($donnees->oeuvre)).' => '.$donnees->orches.' [ '.$donnees->conduct.' ]</a></li>';
	}
	echo '</ul>';

	// Ecrire bas de page et sortir : listage fini.
	echo dmaj("sais_oeuvre.php");
	echo "</div></body></html>";
	exit;
}

$checked = $conduct ? " checked " : "";

	echo '<form method="post" name="oeuv" action="'.$_SERVER["PHP_SELF"].'" onsubmit="return verif()">';
	echo '<h1>'.$title.'</h1>';

	echo '<table>';
	echo '<tr>';
	echo '<td class="libel">Oeuvre</td>';
	echo '<td class="data"><input type="text" name="oeuvre" size="25" value="'.$oeuvre.'" class="oblig" /></td>';
	echo '</tr><tr>';
	echo '<td class="libel">Auteur d\'appartenance</td>';
	echo '<td class="data">'; echo $LDaut->write($idaut).'</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Orchestration</td>';
	echo '<td class="data">'; echo $LDorch->write($idorch).'</td>';
	echo '</tr><tr>';
	echo '<td>';
		//Le for du label doit-être identique à l'id de l'input
		echo '<input type="checkbox" id="conducteur" class="css-conducteur" name="conduct" value="1"  '.$checked.' />';
		echo '<label for="conducteur" class="css-conducteur">Conducteur<br/> original</label>';
	echo '</td>';
	echo '</tr>';
	echo '<td>';
		echo '<input type="hidden" name="haction" value="'.$action.'" />';
		echo '<input type="hidden" name="idoeu" value="'.$idoeu.'" />';
	echo '</td>';
	echo '<td class="data"><input type="submit" name="submit" value="'.$btsub.'" /></td>';
	echo '</tr>';
	echo '</table>';

	echo '</form>';
	echo '<p>NB: La saisie dans les zones à fond jaune pâle est obligatoire.</p>';
	var_dump($idoeu);
// Debuggage
if($debug) {
	echo '<div style="font-family:courier">';
	echo '<hr>DEBUGAGE:<br/>';
	
	echo '$action: '.$action.'<br/>';
	echo '$title: '.$title.'<br/>';
	echo '$sql: '.$sql.'<br/>';
	echo 'requete ajout: '.$reqaj.'<br/>';
	echo 'requete modif: '.$reqmod.'<br/>';
	echo '</div>';
}
?>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
</div>
<?php echo dmaj("sais_oeuvre.php"); ?>
</body>

</html>
A voir également:

23 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
26 févr. 2023 à 21:12

Bonjour,

Tu nous dis :

J'ai une page PHP dont je saisie les oeuvres musicales avec un formulaire de 4 champs. 1 champ de type texte, 1 de type="checkbox et 2 champs avec liste déroulante issue de ma base de donnée. 

On est bien d'accord que tu parles de cette partie du code :

echo '<form method="post" name="oeuv" action="'.$_SERVER["PHP_SELF"].'" onsubmit="return verif()">';
	echo '<h1>'.$title.'</h1>';

	echo '<table>';
	echo '<tr>';
	echo '<td class="libel">Oeuvre</td>';
	echo '<td class="data"><input type="text" name="oeuvre" size="25" value="'.$oeuvre.'" class="oblig" /></td>';
	echo '</tr><tr>';
	echo '<td class="libel">Auteur d\'appartenance</td>';
	echo '<td class="data">'; echo $LDaut->write($idaut).'</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Orchestration</td>';
	echo '<td class="data">'; echo $LDorch->write($idorch).'</td>';
	echo '</tr><tr>';
	echo '<td>';
		//Le for du label doit-être identique à l'id de l'input
		echo '<input type="checkbox" id="conducteur" class="css-conducteur" name="conduct" value="1"  '.$checked.' />';
		echo '<label for="conducteur" class="css-conducteur">Conducteur<br/> original</label>';
	echo '</td>';
	echo '</tr>';
	echo '<td>';
		echo '<input type="hidden" name="haction" value="'.$action.'" />';
		echo '<input type="hidden" name="idoeu" value="'.$idoeu.'" />';
	echo '</td>';
	echo '<td class="data"><input type="submit" name="submit" value="'.$btsub.'" /></td>';
	echo '</tr>';
	echo '</table>';

	echo '</form>';

Que donne le code généré de cette partie du code ? ( code généré = code que tu peux voir dans ton navigateur internet lorsque tu lui demandes d'afficher le code source ( CTRL + u )) 

Lorsque je souhaite faire une modification je saisie le lien d'une œuvre pour effectuer la modification d'un enregistrement

Tu fais cette selection dans le formulaire, mais tu ne valides pas (submit ) encore ton formulaire ... si ?

et malheureusement les 2 champs de liste déroulante me retourne les dernières valeurs de ses listes et non les valeurs concernés par l’œuvre sélectionnée. 

Après le submit de ton formulaire ?

As tu vérifié que le code html de tes listes était "syntaxiquement" correcte au niveau html ?

Tu as bien mis un attribut VALUE dans les OPTION de tes balises <SELECT> ?

Là encore, quand tu regardes le code source généré .. le code te semble t-il correcte ? Les valeurs dans les "value" sont bonnes ?

Qu'affiche exactement le var_dump ?

.


0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
26 févr. 2023 à 23:40

Bonjour

Pour la première question oui je parle bien de cette partie du code.

Effectivement je fais la sélection dans le formulaire mais je ne valide pas puisque les 2 listes déroulante ne correspondent pas à l'ID sélectionné.

le var_dump affiche bien les bon IDs Comme je le disais Auteur et Orchestration affiche la dernière valeur des listes

C'est complétement fou les IDs sont correct????

0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
27 févr. 2023 à 06:54

Donc tu veux nous dire que le souci en fait c'est la génération de tes deux listes et rien à voir avec la soumission du formulaire...

Le problème concernerait donc ces deux instructions ?

$LDaut->write($idaut)
$LDorch->write($idorch)

??

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
27 févr. 2023 à 07:38

Bonjour oui c'est ce que je pensais aussi. Donc maintenant j'en suis certain cela proviens du fichier class.liste.php. Ce fichier génère les listes déroulantes. Car j'ai remplacé ce fichier sur le PC de mon épouse et le résultat est le même alors que sinon tout fonctionnais normalement. Cela est dù aux version de PHP et/ou MySQL Maintenant reste à trouver pour y remédier. Merci tu m'avait déjà résolu un problème concernant ce fichier il y a pas longtemps. Merci encore pour ton aide précieuse.

le fichier auteur.def.php et orchestration.def.php

<?php
$table  = "cdc_auteurs";
$champs = "idaut,nom,prenom";
$ordre  = "nom,prenom";
$texte  = "-- Auteurs --";
?>

<?php
$table  = "cdc_orchestrations";
$champs = "idorch,orches";
$ordre  = "idorch";
$texte  = "-- Orchestrations --";
?>

Il y a l'appel de la class.

$LDorch	= new liste("libs/orchestrations","",""); 
$LDaut 	= new liste("libs/auteurs","",""); 
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
class liste {
    // Attributs, propriétés de la classe
    
    public $version   	= "1.13";
    public $release   	= "15 avr 2016";
    public $auteur    	= "Pierre FAUQUE";
    public $intranet  	= "";
    public $internet  	= "http://www.fauque.fr/";
     
    public $sql         = "";
    public $champs      = "";
    public $texte       = "";
    public $ctrlname    = "";
    public $style       = "";
    public $onchange    = "";
    public $tronque     = 0;
    public $option      = "";
    public $slimit      = "";
    public $limit       = "";
    public $nbrecs      = 0;
     
	private $obj	    = "";

    // ========================================================================
    // Constructeur de la classe liste.
    // Lecture de la définition de la liste, initialisation des propriétés

    function __construct($objet, $ctrlname="", $style="", $limit=0) {

        require("$objet.def.php");
        
        $this->champs       = $this->getfieldnames($champs);
        $this->onchange     = !empty($onchange) ? $onchange : '';
        $this->texte        = $texte;
        $this->ctrlname     = $ctrlname;
        $this->style        = $style;
        $this->obj          = $objet;
        
        if($objet != "null") {
            $slimit = $limit; // sauvegarde du paramètre / fichier .def
            
            if($limit) {
                $this->limit  = $limit;
            }
            if(!empty($lignes)) {
                $this->texte = "";
                $this->option = " multiple size=\"$lignes\"";
            }
            
            if(!empty($where))  { $insWHERE = "WHERE $where";    } else { $insWHERE = ""; }
            if(!empty($group))  { $insGROUP = "GROUP BY $group"; } else { $insGROUP = ""; }
            if($ordre)          { $insORDER = "ORDER BY $ordre"; } else { $insORDER = ""; }
            if($limit)          { $insLIMIT = "LIMIT 0,$limit";  } else { $insLIMIT = ""; }
            if($slimit)         { $insLIMIT = "LIMIT 0,$slimit"; } else { $insLIMIT = ""; }

            $this->sql = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT";
        
            $req = executeQuery($this->sql);
            $resultat = $req->fetchAll();
            $this->nbrecs = !empty($resultat) ? count($resultat) : 0;
            unset($resultat);
        }
    }

    // ========================================================================
    // Méthode de la classe liste. Celle-ci exécute la requête appropriée pour écrire la liste déroulante désignée.

    function write($indice="",$text=0) {

        $champs = explode(",",$this->champs); $idctrl = $champs[0];
        if($this->ctrlname) { $idctrl = $this->ctrlname; }
        $style = !empty($this->style) ? " class='".$this->style."'": "";
        //if($this->onchange) { $onchange = " onchange=\"javascript:$this->onchange\""; }
        $onchange = !empty($this->onchange) ? " onchange='javascript:".$this->onchange."' ": "";
            
        if(!empty($this->sql)) {
            $req = executeQuery($this->sql);
            $resultat = $req->fetchAll();
            //var_dump(debug_backtrace());
        } else {
            echo "Erreur ! La requête est vide !";
            $this->debug();
		}
            
        $this->nbrecs = !empty($resultat) ? count($resultat) : 0;
        $textonly = $text && $indice ?  1 : 0; 
      
        if(!$textonly) {
            echo "<select name=\"".$idctrl."\"$this->option".$style.$onchange.">";
            if(!$this->option) {
                if($this->texte) { 
                    echo "<option value=\"null\">$this->texte"; 
                }
            }
        }
        
        if(!empty($resultat)) {
            foreach($resultat as $donnees) {
                
                $indice = (int)$indice; //Convertir une chaîne en un entier.
                if($indice/1) { $idnum = 0; } else { $idnum = 1; }
                $thisrec = $indice ? 1 : 0;
                if (count($champs) > 2) {
                    $c1 = !empty($champs[1]) ? ($champs[1]) : NULL;
                    $texte = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; $n = 2;
                    if($textonly && $thisrec) { $buffer = $texte; }
                    
                    while(count($champs) > $n) {
                        $cn = !empty($champs[$n]) ? ($champs[$n]) : NULL;
                        if($textonly && $thisrec)   { $buffer .= !empty($cn) && !empty($donnees->$cn) ? $donnees->$cn  : ""; $n++; }
                        else                        { $texte  .= !empty($cn) && !empty($donnees->$cn) ? " ". $donnees->$cn  : ""; $n++; }
                    }
                    
                } else {
                    $c1 = !empty($champs[1]) ? ($champs[1]) : NULL;
                    if($textonly && $thisrec)   { $buffer   = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; }
                    else                        { $texte    = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; }
                }
                
                if($this->tronque) {
                    $lg = $this->tronque-9;     // 9 = longueur de "... / ..."
                    if(($lg % 2) != 0) { $lg++; }
                    if(strlen($texte) > $lg)    { $texte = substr($texte,0,$lg/2) . "... / ..." . substr($texte,strlen($texte)-($lg/2),$lg/2); }
                    if(strlen($buffer) > $lg)   { $buffer = substr($buffer,0,$lg/2) . "... / ..." . substr($buffer,strlen($buffer)-($lg/2),$lg/2); }
                }
                if(!$textonly) {
                    echo "<option value=\"".!empty($donnees->champs[0])."\"";
                    if($thisrec) { echo " selected"; } echo ">".$texte;
                }
            }
        }
        if($textonly) { echo $buffer; } else { echo "</select>\n"; }
    }

    // ========================================================================
    // 30/09/2005. Méthode retournant la liste des champs en prenant en compte les alias
    // de champ possibles (ex: ..., DATE_FORMAT(date, '%d/%m/%Y') AS debut, ...)
    // ou les champs précédés du nom de table (ex: ..., ac_Personnes.idpers, ...)

    function getfieldnames($champs) {
        $fields = explode(",", $champs);
        for($n=0; $n<count($fields); $n++) {
            if(strstr(strtolower($fields[$n]), ".")) {
                $nfields = explode(".", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1];
            }
            if(strstr(strtolower($fields[$n]), " as ")) {
                $nfields = explode(" ", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1];
            }
        }
        $rfields = $fields[0];
        for($n=1; $n<count($fields); $n++) { $rfields .= ",".$fields[$n]; }
        return $rfields;
    }

    // ========================================================================
    // 11/07/2003. Methode affichant le nombre de lignes d'un résultat,
    // en fait le nombre d'éléments qu'il y aura dans la liste.

    function nbelements() { return $this->nbrecs; }

    // ========================================================================
    // 27/03/2004. Méthode servant à changer le nom par défaut du contrôle 'select'.
    // Si elle est utilisée, elle doit l'être avant la méthode write().

    function changename($ctrlname) { $this->ctrlname = $ctrlname; }

    // ========================================================================
    // 05/10/2005. Méthode destinée à définir le style à utiliser dans la liste.
    // Si elle est utilisée, elle doit l'être avant la méthode write().

    function usestyle($style) { $this->style = $style; }

    // ========================================================================
    // 04/07/2003. Méthode initialisant la longueur maximale des éléments de la liste.
    // Si elle est utilisée, elle doit l'être avant la méthode write().

    function tronque($nbcar) { $this->tronque = $nbcar; }

    // ========================================================================
    // Méthode destinée au débuggage. Sert à afficher la requête à exécuter.

    function display() { echo $this->sql; }

    // ========================================================================
    // 03/07/2003. Méthode retournant la version de la classe

    function version() {
        return "version $this->version ($this->release).<br>\n"
        ."Released under the GNU Public License<br>\n"
        ."© $this->auteur.\n";
    }

    // ========================================================================
    // 03/07/2003. Méthode retournant le numéro de la version de la classe

    function numversion() { return $this->version; }

    // ========================================================================
    // 04/07/2003. Méthode testant si la version en cours est la dernière
    // Le paramètre passé est "intranet" ou "internet"

    function checkversion($lan="internet") {
        $msg = "The checking could'nt be done. "
        . "Do you are on the good network ?\n";
        if($lan == "internet") { $url = $this->internet; }
        if($lan == "intranet") { $url = $this->intranet; }
        $url .= "dev/cliste/lastver.liste.txt";
        if(!@$hf  = fopen($url,"r")) { echo "$msg<br>\n"; exit; }
        $version  = fgets($hf,100);  $version  = chop($version);
        $release  = fgets($hf,100);  $release  = chop($release);
        $feature  = fgets($hf,1000); $feature  = chop($feature);
        $download = fgets($hf,1000); $download = chop($download);
        fclose($hf);
        if($version == $this->version) {
            echo "No new version since the $this->version (this one).\n"; }
        else {
            echo "<font color=\"#FF0000\"><b>New</b></font> : ";
            echo "version $version ($release).<br>\n";
            echo "Features : $feature<br>\n";
            echo "Download from : $download\n";
        }
    }

    // ========================================================================
    // 15/07/2003. Méthode affichant la documentation de la classe

    function showdoc($lan="internet") {
        if($lan == "internet") { $url = $this->internet; }
        if($lan == "intranet") { $url = $this->intranet; }
        $url .= "index.php?p=cliste.doc.php";
        $style = "style='text-decoration: none'";
        echo "<a href='$url' $style>French documentation</a>";
    }

    // ========================================================================
    // 05/10/2005. Méthode pour l'affichage des variables.

    function debug() {
        $style = "font-family:verdana; font-size:9pt; border-style:solid; " . "border-color:red; border-width:1px";
        if($this->ctrlname) { $ctrlname = $this->crtlname;           }
        else { $ch = explode(",",$this->champs); $ctrlname = $ch[0]; }
        echo "<table border=\"0\" cellpadding=\"2\" bgcolor=\"#FFFFA0\"><tr>";
        echo "<td style=\"$style\">";
        
        echo "<b>CLASS liste:</b><br>";
        echo "Version: "        .$this->version."<br>";
        echo "Release: "        .$this->release."<br>";
        echo "Author: "         .$this->auteur."<br>";
        echo "URL-intranet: "   .$this->intranet."<br>";
        echo "URL-internet: "   .$this->internet."<br>";
        
        echo "<b>ATTRIBUTES:</b><br>";
        echo "champs:   "       .$this->champs."<br>";
        echo "texte: "          .$this->texte."<br>";
        echo "ctrlname: "       .$ctrlname."<br>";
        echo "tronque: "        .$this->tronque."<br>";
        echo "option: "         .$this->option."<br>";
        echo "style: "          .$this->style."<br>";
        echo "onchange: "       .$this->onchange."<br>";
        echo "limit: "          .$this->limit."<br>";
        echo "nbrecs: "         .$this->nbrecs."<br>";
		echo "objet: "          .$this->obj."<br>";
        echo "sql: "            .$this->sql."<br>";
        echo "</td></tr></table>";
    }
}
?>
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
27 févr. 2023 à 08:09

apres analyse de cette class je suis persuadé que cela proviens uniquement de cette

function write 
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
27 févr. 2023 à 08:23

Que te retourne $this->sql ?

0

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

Posez votre question
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
27 févr. 2023 à 08:59
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
27 févr. 2023 à 10:27

les requêtes te semblent conformes à ce que tu devrais avoir ?

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
27 févr. 2023 à 11:22

oui tout à fait le fichier sais_oeuvre.php est identique à celui de mon autre PC où tout fonctionne normalement.

Il me semble qu'une partie de la

function write pose problème, enfin je n'en suis pas sur non plus. Je suis dessus depuis très tôt ce matin je m'arrache les cheveux!!  Je t'envoie quand même cette partie du code à tout hasard..

Mon second PC ou tout marche bien la version PHP 5.3.3 et MySQL est 5.5.8

Alors sur celui-ci version PHP 8.2.0 et MySQL 8.0.31

Merci

                if (count($champs) > 2) {
                    $c1 = !empty($champs[1]) ? ($champs[1]) : NULL;
                    $texte = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; $n = 2;
                    if($textonly && $thisrec) { $buffer = $texte; }
                    
                    while(count($champs) > $n) {
                        $cn = !empty($champs[$n]) ? ($champs[$n]) : NULL;
                        if($textonly && $thisrec)   { $buffer .= !empty($cn) && !empty($donnees->$cn) ? $donnees->$cn  : ""; $n++; }
                        else                        { $texte  .= !empty($cn) && !empty($donnees->$cn) ? " ". $donnees->$cn  : ""; $n++; }
                    }
                    
                } else {
                    $c1 = !empty($champs[1]) ? ($champs[1]) : NULL;
                    if($textonly && $thisrec)   { $buffer   = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; }
                    else                        { $texte    = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; }
                }
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
27 févr. 2023 à 11:24

Il faut que tu prennes la requête SQL et que tu la testes DIRECTEMENT dans ta bdd ( en passant par PHPMYADMIN ).

Tu regardes si le résultat obtenu est bien celui que tu souhaites ( je pense que non ... )

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
27 févr. 2023 à 14:44

la requète qui me retourne bien les valeurs souhaités

En fait pour faire une petite récap! J'ai mon lien dans la boucle qui affiche la liste des valeurs souhaitées

	while ($donnees = $result->fetch()) {
		$lien = $_SERVER["PHP_SELF"].'?a=mod&amp;idoeu='.$donnees->idoeu;
		$initiale = substr($donnees->oeuvre,0,1);
		echo '<li><a name="a'.$initiale.'"></a><a href="'.$lien.'">'.stripslashes(ucfirst($donnees->oeuvre)).' => '.$donnees->orches.' [ '.$donnees->conduct.' ]</a></li>';
	}

Ensuite j'ai L'instruction switch qui me retourne les bonnes valeurs à modifier

switch($action) {
	case 'new':   
		$title      = "Saisie d'une Oeuvre"; 
		$btsub      = "Enregistrer";      
		$idoeu      = "";
		$oeuvre     = "";
		$idaut      = "";
		$idorch     = "";
		$conduct 	= "";
	break;

	case 'list': 
		$title  	= "Liste des Oeuvres";
	break;

	case 'mod': 
		$title      = "Modification d'une Oeuvre";
		$btsub      = "Modifier";
		$sql    	= "SELECT * FROM cdc_oeuvres WHERE idoeu = :idoeu";
		$datas 		= array('idoeu' => $idoeu);
		$result 	= executeQuery($sql,$datas);
		$donnees 	= $result->fetch();
		$idoeu      = $donnees->idoeu;
		$oeuvre     = ucfirst(stripslashes($donnees->oeuvre));
		$idaut      = $donnees->idaut;
		$idorch     = $donnees->idorch;
		$conduct 	= $donnees->conduct;
	break;
}

Je vais surement dite une grosse bétise... mais cela ne viendrait pas de ma table PhpMyadmin avec les relations des clés étrangères???????

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
27 févr. 2023 à 17:42

Peux tu me dire ce que tu en penses de cette condition merci

if ($indice == $donnees->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }

je l'ai remplacé par:

$thisrec = $indice ? 1 : 0;

J'ai l'impression que c'est cette ligne qui pose problème?

0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
27 févr. 2023 à 17:59

La vraie traduction de la condition serait plutôt :

 $thisrec = $indice == $donnees->$champs[$idnum] ? 1 : 0 ;
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
27 févr. 2023 à 19:56

une erreur concerne cette ligne!. Je crois comprendre que / cet opérateur n'est pas pris en charge????

if($indice/1) { $idnum = 0; } else { $idnum = 1; }

Fatal error: Uncaught TypeError: Unsupported operand types: array / int in C:\wamp64\www\gestion\libs\class.liste.php on line 106

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
28 févr. 2023 à 07:32

Bonjour après analyse je suis certain que cela viens de ses lignes de code.

Warning: Array to string conversion in C:\wamp64\www\gestion\libs\class.liste.php on line 105

$indice = (int)$indice; //Convertir une chaîne en un entier.
if($indice/1) { $idnum = 0; } else { $idnum = 1; }                
$thisrec = $indice == $donnees->$champs[$idnum] ? 1 : 0 ;

Merci encore de ton savoir pour je l'espère la dernière fois pour ce problème.

0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 28 févr. 2023 à 09:58

Bonjour,

Oui le message d'erreur vient bien de là.

Il semble que ta variable $indice, lorsque tu as l'erreur, contienne un array et non une simple variable.

Il serait donc utile de regarder ce qu'elle contient exactement (avec un var_dump par exemple).

On pourrait prévoir un truc du genre :

if( !empty($indice) && (is_array($indice)  || is_object($indice) ) ){
	echo "la variable indice ne contient pas la bonne valeur ?";
	var_dump($indice);
	$idnum = 1 ;
	$thisrec = 0;
}else{
	$indice = !empty($indice) ? intVal($indice)  : 0 ; //Convertir une chaîne en un entier.
	$idnum = ($indice/1) ? 0 : 1; 
	$thisrec = $indice == $donnees->$champs[$idnum] ? 1 : 0 ;
}
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
28 févr. 2023 à 09:39

Bonjour donc lorsque je fait un var_dump($indice); j'obtiens: c'est le bon ID de l'auteur.

par contre avec ton code j'ai encore cette erreur qui concerne également la dernière ligne

Warning: Array to string conversion in C:\wamp64\www\gestion\libs\class.liste.php on line 111
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
28 févr. 2023 à 09:59

Quel code as tu écris exactement ?

A quelle ligne précise correspond la ligne 111 ?

As tu essayé de faire un var_dump, (à la ligne 110 ..) des variables utilisées par la ligne 111 pour essayer de comprendre ce qui coince ?

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
28 févr. 2023 à 12:09

Voici le code.

        if(!empty($resultat)) {
            foreach($resultat as $donnees) {
                if( !empty($indice) && (is_array($indice)  || is_object($indice) ) ){
                    echo "la variable indice ne contient pas la bonne valeur ?";
                    //var_dump($indice);
                    $idnum = 1 ;
                    $thisrec = 0;
                }else{
                    $indice = !empty($indice) ? intVal($indice)  : 0 ; //Convertir une chaîne en un entier.
                    $idnum = ($indice/1) ? 0 : 1;
                    var_dump($indice);
                    $thisrec = $indice == $donnees->$champs[$idnum] ? 1 : 0 ;
                }

L'erreur et la ligne correspondante.

Warning: Array to string conversion in C:\wamp64\www\gestion\libs\class.liste.php on line 110

$thisrec = $indice == $donnees->$champs[$idnum] ? 1 : 0 ;

J'ai fait un var_dump($indice) à la ligne precedente.

0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
28 févr. 2023 à 12:25

et un var dump des autres variables ? : 

d'abord : $idnum
puis : $donnees->$champs
et enfin :  $donnees->$champs[$idnum]
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
28 févr. 2023 à 13:34

var_dump($indice);

var_dump($idnum);

var_dump($donnees->$champs);

var_dump($donnees->$champs[$idnum]);

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
28 févr. 2023 à 13:43

var_dump($idnum);

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
28 févr. 2023 à 13:53

var_dump($donnees->$champs);

C:\wamp64\www\gestion\libs\class.liste.php:111:null

var_dump($donnees->$champs[$idnum]);

C:\wamp64\www\gestion\libs\class.liste.php:112:null
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
28 févr. 2023 à 19:30

Il faut donc tester que la variable

$donnees->$champs

Est bien de type array avant de l'utiliser telle qu'elle..

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
28 févr. 2023 à 20:35
C'est bien ça que tu veux que je teste?
var_dump($donnees->$champs);
C:\wamp64\www\gestion\libs\class.liste.php:112:null

Par contre j'ai pas compris! excuse moi...

"Est bien de type array avant de l'utiliser telle qu'elle"

0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
28 févr. 2023 à 21:24

par exemple :

$thisrec = !empty($donnees->$champ) &&  is_array($donnees->$champs) && $indice == $donnees->$champs[$idnum] ? 1 : 0 ;
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
28 févr. 2023 à 23:17

une erreur la variable qui n'est pas définie alors j'ai fait

$champs = !empty($champs) ? $champs : '';

Warning: Undefined variable $champ in C:\wamp64\www\gestion\libs\class.liste.php on line 118

mais toujours la même erreur?

Merci.

0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
28 févr. 2023 à 23:44

Suite à tes modifications, à quoi correspond la ligne 118 ?

Il serait bien que tu nous montres le code complet de ce fichier après que tu aies fait les modifications afin que l'on puisse se rendre compte du code et le mettre en concordance avec les messages d'erreur dont tu nous parles....

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
1 mars 2023 à 06:27

Bonjour

Voici le code complet.

Merci.

<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
class liste {
    // Attributs, propriétés de la classe
    
    public $version   	= "1.13";
    public $release   	= "15 avr 2016";
    public $auteur    	= "Pierre FAUQUE";
    public $intranet  	= "";
    public $internet  	= "http://www.fauque.fr/";
     
    public $sql         = "";
    public $champs      = "";
    public $texte       = "";
    public $ctrlname    = "";
    public $style       = "";
    public $onchange    = "";
    public $tronque     = 0;
    public $option      = "";
    public $slimit      = "";
    public $limit       = "";
    public $nbrecs      = 0;
     
	private $obj	    = "";

    // ========================================================================
    // Constructeur de la classe liste.
    // Lecture de la définition de la liste, initialisation des propriétés

    function __construct($objet, $ctrlname="", $style="", $limit=0) {

        require("$objet.def.php");
        
        $this->champs       = $this->getfieldnames($champs);
        $this->onchange     = !empty($onchange) ? $onchange : '';
        $this->texte        = $texte;
        $this->ctrlname     = $ctrlname;
        $this->style        = $style;
        $this->obj          = $objet;
        
        if($objet != "null") {
            $slimit = $limit; // sauvegarde du paramètre / fichier .def
            
            if($limit) {
                $this->limit  = $limit;
            }
            if(!empty($lignes)) {
                $this->texte = "";
                $this->option = " multiple size=\"$lignes\"";
            }
            
            if(!empty($where))  { $insWHERE = "WHERE $where";    } else { $insWHERE = ""; }
            if(!empty($group))  { $insGROUP = "GROUP BY $group"; } else { $insGROUP = ""; }
            if($ordre)          { $insORDER = "ORDER BY $ordre"; } else { $insORDER = ""; }
            if($limit)          { $insLIMIT = "LIMIT 0,$limit";  } else { $insLIMIT = ""; }
            if($slimit)         { $insLIMIT = "LIMIT 0,$slimit"; } else { $insLIMIT = ""; }

            $this->sql = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT";
        
            $req = executeQuery($this->sql);
            $resultat = $req->fetchAll();
            $this->nbrecs = !empty($resultat) ? count($resultat) : 0;
            unset($resultat);
        }
    }

    // ========================================================================
    // Méthode de la classe liste. Celle-ci exécute la requête appropriée pour écrire la liste déroulante désignée.

    function write($indice="",$text=0) {

        $champs = explode(",",$this->champs); $idctrl = $champs[0];
        if($this->ctrlname) { $idctrl = $this->ctrlname; }
        $style = !empty($this->style) ? " class='".$this->style."'": "";
        //if($this->onchange) { $onchange = " onchange=\"javascript:$this->onchange\""; }
        $onchange = !empty($this->onchange) ? " onchange='javascript:".$this->onchange."' ": "";
            
        if(!empty($this->sql)) {
            $req = executeQuery($this->sql);
            $resultat = $req->fetchAll();
            //var_dump(debug_backtrace());
        } else {
            echo "Erreur ! La requête est vide !";
            $this->debug();
		}
            
        $this->nbrecs = !empty($resultat) ? count($resultat) : 0;
        $textonly = $text && $indice ?  1 : 0; 
      
        if(!$textonly) {
            echo "<select name=\"".$idctrl."\"$this->option".$style.$onchange.">";
            if(!$this->option) {
                if($this->texte) { 
                    echo "<option value=\"null\">$this->texte"; 
                }
            }
        }
        if(!empty($resultat)) {
            foreach($resultat as $donnees) {
                if( !empty($indice) && (is_array($indice)  || is_object($indice))) {
                    echo "la variable indice ne contient pas la bonne valeur ?";
                    $idnum = 1 ;
                    $thisrec = 0;
                } else {
                    $indice = !empty($indice) ? intVal($indice)  : 0 ; //Convertir une chaîne en un entier.
                    $idnum = ($indice/1) ? 0 : 1;
                    $thisrec = !empty($donnees->$champ) &&  is_array($donnees->$champs) && $indice == $donnees->$champs[$idnum] ? 1 : 0 ;
                }
                if (count($champs) > 2) {
                    $c1 = !empty($champs[1]) ? ($champs[1]) : NULL;
                    $texte = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; $n = 2;
                    if($textonly && $thisrec) { $buffer = $texte; }
                    
                    while(count($champs) > $n) {
                        $cn = !empty($champs[$n]) ? ($champs[$n]) : NULL;
                        if($textonly && $thisrec)   { $buffer .= !empty($cn) && !empty($donnees->$cn) ? $donnees->$cn  : ""; $n++; }
                        else                        { $texte  .= !empty($cn) && !empty($donnees->$cn) ? " ". $donnees->$cn  : ""; $n++; }
                    }
                    
                } else {
                    $c1 = !empty($champs[1]) ? ($champs[1]) : NULL;
                    if($textonly && $thisrec)   { $buffer   = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; }
                    else                        { $texte    = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; }
                }
                
                if($this->tronque) {
                    $lg = $this->tronque-9;     // 9 = longueur de "... / ..."
                    if(($lg % 2) != 0) { $lg++; }
                    if(strlen($texte) > $lg)    { $texte = substr($texte,0,$lg/2) . "... / ..." . substr($texte,strlen($texte)-($lg/2),$lg/2); }
                    if(strlen($buffer) > $lg)   { $buffer = substr($buffer,0,$lg/2) . "... / ..." . substr($buffer,strlen($buffer)-($lg/2),$lg/2); }
                }
                if(!$textonly) {
                    echo "<option value=\"".!empty($donnees->champs[0])."\"";
                    if($thisrec) { echo " selected"; } echo ">".$texte;
                }
            }
        }
        if($textonly) { echo $buffer; } else { echo "</select>\n"; }
    }

    // ========================================================================
    // 30/09/2005. Méthode retournant la liste des champs en prenant en compte les alias
    // de champ possibles (ex: ..., DATE_FORMAT(date, '%d/%m/%Y') AS debut, ...)
    // ou les champs précédés du nom de table (ex: ..., ac_Personnes.idpers, ...)

    function getfieldnames($champs) {
        $fields = explode(",", $champs);
        for($n=0; $n<count($fields); $n++) {
            if(strstr(strtolower($fields[$n]), ".")) {
                $nfields = explode(".", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1];
            }
            if(strstr(strtolower($fields[$n]), " as ")) {
                $nfields = explode(" ", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1];
            }
        }
        $rfields = $fields[0];
        for($n=1; $n<count($fields); $n++) { $rfields .= ",".$fields[$n]; }
        return $rfields;
    }

    // ========================================================================
    // 11/07/2003. Methode affichant le nombre de lignes d'un résultat,
    // en fait le nombre d'éléments qu'il y aura dans la liste.

    function nbelements() { return $this->nbrecs; }

    // ========================================================================
    // 27/03/2004. Méthode servant à changer le nom par défaut du contrôle 'select'.
    // Si elle est utilisée, elle doit l'être avant la méthode write().

    function changename($ctrlname) { $this->ctrlname = $ctrlname; }

    // ========================================================================
    // 05/10/2005. Méthode destinée à définir le style à utiliser dans la liste.
    // Si elle est utilisée, elle doit l'être avant la méthode write().

    function usestyle($style) { $this->style = $style; }

    // ========================================================================
    // 04/07/2003. Méthode initialisant la longueur maximale des éléments de la liste.
    // Si elle est utilisée, elle doit l'être avant la méthode write().

    function tronque($nbcar) { $this->tronque = $nbcar; }

    // ========================================================================
    // Méthode destinée au débuggage. Sert à afficher la requête à exécuter.

    function display() { echo $this->sql; }

    // ========================================================================
    // 03/07/2003. Méthode retournant la version de la classe

    function version() {
        return "version $this->version ($this->release).<br>\n"
        ."Released under the GNU Public License<br>\n"
        ."© $this->auteur.\n";
    }

    // ========================================================================
    // 03/07/2003. Méthode retournant le numéro de la version de la classe

    function numversion() { return $this->version; }

    // ========================================================================
    // 04/07/2003. Méthode testant si la version en cours est la dernière
    // Le paramètre passé est "intranet" ou "internet"

    function checkversion($lan="internet") {
        $msg = "The checking could'nt be done. "
        . "Do you are on the good network ?\n";
        if($lan == "internet") { $url = $this->internet; }
        if($lan == "intranet") { $url = $this->intranet; }
        $url .= "dev/cliste/lastver.liste.txt";
        if(!@$hf  = fopen($url,"r")) { echo "$msg<br>\n"; exit; }
        $version  = fgets($hf,100);  $version  = chop($version);
        $release  = fgets($hf,100);  $release  = chop($release);
        $feature  = fgets($hf,1000); $feature  = chop($feature);
        $download = fgets($hf,1000); $download = chop($download);
        fclose($hf);
        if($version == $this->version) {
            echo "No new version since the $this->version (this one).\n"; }
        else {
            echo "<font color=\"#FF0000\"><b>New</b></font> : ";
            echo "version $version ($release).<br>\n";
            echo "Features : $feature<br>\n";
            echo "Download from : $download\n";
        }
    }

    // ========================================================================
    // 15/07/2003. Méthode affichant la documentation de la classe

    function showdoc($lan="internet") {
        if($lan == "internet") { $url = $this->internet; }
        if($lan == "intranet") { $url = $this->intranet; }
        $url .= "index.php?p=cliste.doc.php";
        $style = "style='text-decoration: none'";
        echo "<a href='$url' $style>French documentation</a>";
    }

    // ========================================================================
    // 05/10/2005. Méthode pour l'affichage des variables.

    function debug() {
        $style = "font-family:verdana; font-size:9pt; border-style:solid; " . "border-color:red; border-width:1px";
        if($this->ctrlname) { $ctrlname = $this->crtlname;           }
        else { $ch = explode(",",$this->champs); $ctrlname = $ch[0]; }
        echo "<table border=\"0\" cellpadding=\"2\" bgcolor=\"#FFFFA0\"><tr>";
        echo "<td style=\"$style\">";
        
        echo "<b>CLASS liste:</b><br>";
        echo "Version: "        .$this->version."<br>";
        echo "Release: "        .$this->release."<br>";
        echo "Author: "         .$this->auteur."<br>";
        echo "URL-intranet: "   .$this->intranet."<br>";
        echo "URL-internet: "   .$this->internet."<br>";
        
        echo "<b>ATTRIBUTES:</b><br>";
        echo "champs:   "       .$this->champs."<br>";
        echo "texte: "          .$this->texte."<br>";
        echo "ctrlname: "       .$ctrlname."<br>";
        echo "tronque: "        .$this->tronque."<br>";
        echo "option: "         .$this->option."<br>";
        echo "style: "          .$this->style."<br>";
        echo "onchange: "       .$this->onchange."<br>";
        echo "limit: "          .$this->limit."<br>";
        echo "nbrecs: "         .$this->nbrecs."<br>";
		echo "objet: "          .$this->obj."<br>";
        echo "sql: "            .$this->sql."<br>";
        echo "</td></tr></table>";
    }
}
?>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
1 mars 2023 à 06:35

Je ne vois pas le rapport entre le message d'erreur que tu nous indique et la ligne 118 du code que tu nous montres

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
1 mars 2023 à 06:49

Excuse moi j'avais enlevé plein de commentaire de ce fait l'erreur ne correspondait plus à la bonne ligne.

Warning: Undefined variable $champ in C:\wamp64\www\gestion\libs\class.liste.php on line 110
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
class liste {
    // Attributs, propriétés de la classe
    
    //public $version   	= "1.13";
    //public $release   	= "15 avr 2016";
    //public $auteur    	= "Pierre FAUQUE";
    //public $intranet  	= "";
    //public $internet  	= "http://www.fauque.fr/";
     
    public $sql         = "";
    public $champs      = "";
    public $texte       = "";
    public $ctrlname    = "";
    public $style       = "";
    public $onchange    = "";
    public $tronque     = 0;
    public $option      = "";
    public $slimit      = "";
    public $limit       = "";
    public $nbrecs      = 0;
     
	private $obj	    = "";

    // ========================================================================
    // Constructeur de la classe liste.
    // Lecture de la définition de la liste, initialisation des propriétés

    function __construct($objet, $ctrlname="", $style="", $limit=0) {

        require("$objet.def.php");
        
        $this->champs       = $this->getfieldnames($champs);
        $this->onchange     = !empty($onchange) ? $onchange : '';
        $this->texte        = $texte;
        $this->ctrlname     = $ctrlname;
        $this->style        = $style;
        $this->obj          = $objet;
        
        if($objet != "null") {
            $slimit = $limit; // sauvegarde du paramètre / fichier .def
            
            if($limit) {
                $this->limit  = $limit;
            }
            if(!empty($lignes)) {
                $this->texte = "";
                $this->option = " multiple size=\"$lignes\"";
            }
            
            if(!empty($where))  { $insWHERE = "WHERE $where";    } else { $insWHERE = ""; }
            if(!empty($group))  { $insGROUP = "GROUP BY $group"; } else { $insGROUP = ""; }
            if($ordre)          { $insORDER = "ORDER BY $ordre"; } else { $insORDER = ""; }
            if($limit)          { $insLIMIT = "LIMIT 0,$limit";  } else { $insLIMIT = ""; }
            if($slimit)         { $insLIMIT = "LIMIT 0,$slimit"; } else { $insLIMIT = ""; }

            $this->sql = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT";
        
            $req = executeQuery($this->sql);
            $resultat = $req->fetchAll();
            $this->nbrecs = !empty($resultat) ? count($resultat) : 0;
            unset($resultat);
        }
    }

    // ========================================================================
    // Méthode de la classe liste. Celle-ci exécute la requête appropriée pour écrire la liste déroulante désignée.

    function write($indice="",$text=0) {

        $champs = explode(",",$this->champs); $idctrl = $champs[0];
        if($this->ctrlname) { $idctrl = $this->ctrlname; }
        $style = !empty($this->style) ? " class='".$this->style."'": "";
        //if($this->onchange) { $onchange = " onchange=\"javascript:$this->onchange\""; }
        $onchange = !empty($this->onchange) ? " onchange='javascript:".$this->onchange."' ": "";
            
        if(!empty($this->sql)) {
            $req = executeQuery($this->sql);
            $resultat = $req->fetchAll();
            //var_dump(debug_backtrace());
        } else {
            echo "Erreur ! La requête est vide !";
            $this->debug();
		}
            
        $this->nbrecs = !empty($resultat) ? count($resultat) : 0;
        $textonly = $text && $indice ?  1 : 0; 
      
        if(!$textonly) {
            echo "<select name=\"".$idctrl."\"$this->option".$style.$onchange.">";
            if(!$this->option) {
                if($this->texte) { 
                    echo "<option value=\"null\">$this->texte"; 
                }
            }
        }
        if(!empty($resultat)) {
            foreach($resultat as $donnees) {
                if( !empty($indice) && (is_array($indice)  || is_object($indice))) {
                    echo "la variable indice ne contient pas la bonne valeur ?";
                    $idnum = 1 ;
                    $thisrec = 0;
                } else {
                    $indice = !empty($indice) ? intVal($indice)  : 0 ; //Convertir une chaîne en un entier.
                    $idnum = ($indice/1) ? 0 : 1;
                    var_dump($indice);
                    $thisrec = !empty($donnees->$champ) &&  is_array($donnees->$champs) && $indice == $donnees->$champs[$idnum] ? 1 : 0 ;
                }
                if (count($champs) > 2) {
                    $c1 = !empty($champs[1]) ? ($champs[1]) : NULL;
                    $texte = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; $n = 2;
                    if($textonly && $thisrec) { $buffer = $texte; }
                    
                    while(count($champs) > $n) {
                        $cn = !empty($champs[$n]) ? ($champs[$n]) : NULL;
                        if($textonly && $thisrec)   { $buffer .= !empty($cn) && !empty($donnees->$cn) ? $donnees->$cn  : ""; $n++; }
                        else                        { $texte  .= !empty($cn) && !empty($donnees->$cn) ? " ". $donnees->$cn  : ""; $n++; }
                    }
                    
                } else {
                    $c1 = !empty($champs[1]) ? ($champs[1]) : NULL;
                    if($textonly && $thisrec)   { $buffer   = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; }
                    else                        { $texte    = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; }
                }
                
                if($this->tronque) {
                    $lg = $this->tronque-9;     // 9 = longueur de "... / ..."
                    if(($lg % 2) != 0) { $lg++; }
                    if(strlen($texte) > $lg)    { $texte = substr($texte,0,$lg/2) . "... / ..." . substr($texte,strlen($texte)-($lg/2),$lg/2); }
                    if(strlen($buffer) > $lg)   { $buffer = substr($buffer,0,$lg/2) . "... / ..." . substr($buffer,strlen($buffer)-($lg/2),$lg/2); }
                }
                if(!$textonly) {
                    echo "<option value=\"".!empty($donnees->champs[0])."\"";
                    if($thisrec) { echo " selected"; } echo ">".$texte;
                }
            }
        }
        if($textonly) { echo $buffer; } else { echo "</select>\n"; }
    }

    // ========================================================================
    // 30/09/2005. Méthode retournant la liste des champs en prenant en compte les alias
    // de champ possibles (ex: ..., DATE_FORMAT(date, '%d/%m/%Y') AS debut, ...)
    // ou les champs précédés du nom de table (ex: ..., ac_Personnes.idpers, ...)

    function getfieldnames($champs) {
        $fields = explode(",", $champs);
        for($n=0; $n<count($fields); $n++) {
            if(strstr(strtolower($fields[$n]), ".")) {
                $nfields = explode(".", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1];
            }
            if(strstr(strtolower($fields[$n]), " as ")) {
                $nfields = explode(" ", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1];
            }
        }
        $rfields = $fields[0];
        for($n=1; $n<count($fields); $n++) { $rfields .= ",".$fields[$n]; }
        return $rfields;
    }

    // ========================================================================
    // 11/07/2003. Methode affichant le nombre de lignes d'un résultat,
    // en fait le nombre d'éléments qu'il y aura dans la liste.

    function nbelements() { return $this->nbrecs; }

    // ========================================================================
    // 27/03/2004. Méthode servant à changer le nom par défaut du contrôle 'select'.
    // Si elle est utilisée, elle doit l'être avant la méthode write().

    function changename($ctrlname) { $this->ctrlname = $ctrlname; }

    // ========================================================================
    // 05/10/2005. Méthode destinée à définir le style à utiliser dans la liste.
    // Si elle est utilisée, elle doit l'être avant la méthode write().

    function usestyle($style) { $this->style = $style; }

    // ========================================================================
    // 04/07/2003. Méthode initialisant la longueur maximale des éléments de la liste.
    // Si elle est utilisée, elle doit l'être avant la méthode write().

    function tronque($nbcar) { $this->tronque = $nbcar; }

    // ========================================================================
    // Méthode destinée au débuggage. Sert à afficher la requête à exécuter.

    function display() { echo $this->sql; }

    // ========================================================================
    // 03/07/2003. Méthode retournant la version de la classe

    function version() {
        return "version $this->version ($this->release).<br>\n"
        ."Released under the GNU Public License<br>\n"
        ."© $this->auteur.\n";
    }

    // ========================================================================
    // 03/07/2003. Méthode retournant le numéro de la version de la classe

    function numversion() { return $this->version; }

    // ========================================================================
    // 04/07/2003. Méthode testant si la version en cours est la dernière
    // Le paramètre passé est "intranet" ou "internet"

    function checkversion($lan="internet") {
        $msg = "The checking could'nt be done. "
        . "Do you are on the good network ?\n";
        if($lan == "internet") { $url = $this->internet; }
        if($lan == "intranet") { $url = $this->intranet; }
        $url .= "dev/cliste/lastver.liste.txt";
        if(!@$hf  = fopen($url,"r")) { echo "$msg<br>\n"; exit; }
        $version  = fgets($hf,100);  $version  = chop($version);
        $release  = fgets($hf,100);  $release  = chop($release);
        $feature  = fgets($hf,1000); $feature  = chop($feature);
        $download = fgets($hf,1000); $download = chop($download);
        fclose($hf);
        if($version == $this->version) {
            echo "No new version since the $this->version (this one).\n"; }
        else {
            echo "<font color=\"#FF0000\"><b>New</b></font> : ";
            echo "version $version ($release).<br>\n";
            echo "Features : $feature<br>\n";
            echo "Download from : $download\n";
        }
    }

    // ========================================================================
    // 15/07/2003. Méthode affichant la documentation de la classe

    function showdoc($lan="internet") {
        if($lan == "internet") { $url = $this->internet; }
        if($lan == "intranet") { $url = $this->intranet; }
        $url .= "index.php?p=cliste.doc.php";
        $style = "style='text-decoration: none'";
        echo "<a href='$url' $style>French documentation</a>";
    }

    // ========================================================================
    // 05/10/2005. Méthode pour l'affichage des variables.

    function debug() {
        $style = "font-family:verdana; font-size:9pt; border-style:solid; " . "border-color:red; border-width:1px";
        if($this->ctrlname) { $ctrlname = $this->crtlname;           }
        else { $ch = explode(",",$this->champs); $ctrlname = $ch[0]; }
        echo "<table border=\"0\" cellpadding=\"2\" bgcolor=\"#FFFFA0\"><tr>";
        echo "<td style=\"$style\">";
        
        echo "<b>CLASS liste:</b><br>";
        echo "Version: "        .$this->version."<br>";
        echo "Release: "        .$this->release."<br>";
        echo "Author: "         .$this->auteur."<br>";
        echo "URL-intranet: "   .$this->intranet."<br>";
        echo "URL-internet: "   .$this->internet."<br>";
        
        echo "<b>ATTRIBUTES:</b><br>";
        echo "champs:   "       .$this->champs."<br>";
        echo "texte: "          .$this->texte."<br>";
        echo "ctrlname: "       .$ctrlname."<br>";
        echo "tronque: "        .$this->tronque."<br>";
        echo "option: "         .$this->option."<br>";
        echo "style: "          .$this->style."<br>";
        echo "onchange: "       .$this->onchange."<br>";
        echo "limit: "          .$this->limit."<br>";
        echo "nbrecs: "         .$this->nbrecs."<br>";
		echo "objet: "          .$this->obj."<br>";
        echo "sql: "            .$this->sql."<br>";
        echo "</td></tr></table>";
    }
}
?>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
1 mars 2023 à 08:19

Ah ben oui, 

N'as tu pas vu que j'avais fait une erreur dans la ligne de code que je t'avais donné ?  il manque un "s" ....

Comme quoi, il ne suffit pas de fair un copier/coller des réponses qu'on te donne.. il faut les relire et les comprendre...

0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
1 mars 2023 à 08:22

Et n'oublie pas de relire ce que je t'avais déjà donné dans une de tes précédente question ....

 Ceci devrait t'aider à convertir ton code en > php7 (du moins pour cette partie)

https://www.php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling.indirect

Décents jusqu'au chapitre : Changes to the handling of indirect variables, properties, and methods

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
1 mars 2023 à 06:58

Si cela peut t'aider merci.

je viens de faire cela et plus de message d'erreur

$champ = !empty($_POST['champ']) ? $_POST['champ'] : '';

avec var_dump($indice); voici l'affichage qui affiche bien toutes les listes

Mai si je commente le var_dump($indice);

0