Problème affichage des données du formulaire php
Résolu/FerméLaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 - 1 mars 2023 à 14:59
- Problème affichage des données du formulaire php
- Formulaire de réclamation facebook - Guide
- Easy php - Télécharger - Divers Web & Internet
- Excel validation des données liste - Guide
- Affichage double ecran - Guide
- Reinstaller windows sans perte de données - Guide
23 réponses
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 ?
.
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????
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)
??
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>"; } } ?>
27 févr. 2023 à 08:09
apres analyse de cette class je suis persuadé que cela proviens uniquement de cette
function write
27 févr. 2023 à 08:23
Que te retourne $this->sql ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question27 févr. 2023 à 08:59
27 févr. 2023 à 10:27
les requêtes te semblent conformes à ce que tu devrais avoir ?
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 : ""; } }
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 ... )
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&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???????
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?
27 févr. 2023 à 17:59
La vraie traduction de la condition serait plutôt :
$thisrec = $indice == $donnees->$champs[$idnum] ? 1 : 0 ;
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
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.
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 ; }
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
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 ?
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.
28 févr. 2023 à 12:25
et un var dump des autres variables ? :
d'abord : $idnum puis : $donnees->$champs et enfin : $donnees->$champs[$idnum]
28 févr. 2023 à 13:34
var_dump($indice);
var_dump($idnum);
var_dump($donnees->$champs);
var_dump($donnees->$champs[$idnum]);
28 févr. 2023 à 13:43
var_dump($idnum);
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
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..
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"
28 févr. 2023 à 21:24
par exemple :
$thisrec = !empty($donnees->$champ) && is_array($donnees->$champs) && $indice == $donnees->$champs[$idnum] ? 1 : 0 ;
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.
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....
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>"; } } ?>
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
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>"; } } ?>
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...
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)
Décents jusqu'au chapitre : Changes to the handling of indirect variables, properties, and methods
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);