Warning: Undefined property

Résolu/Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 1 févr. 2023 à 09:29
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 8 févr. 2023 à 07:54

Bonjour J'ai une erreur que je ne comprends absolument pas. Pouvez-vous s'ils vous plait me guider dans ma recherche.

Cette erreur concerne la listes des formulaires qui me renvoie dans la fonction qui va récupérer le nom à modifier via son id.

Je vous remercie pour votre aide.

Warning: Undefined property: liste::$sql in C:\wamp64\www\gestion\libs\class.liste.php on line 68

Voici également la ligne 68.

$result = executeQuery($this->sql,$datas);

38 réponses

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

oui on dirai, j'ai rajouté la requète je ne suis pas vraiment sur de ce que j'ai fait..

     function write($indice="",$text=0) {
          $table = "";
          $champs = explode(",",$this->champs); $idctrl = $champs[0];
          if($this->ctrlname) { $idctrl = $this->ctrlname; }
          if($this->style) { $style = " class=\"$this->style\""; }
          if($this->onchange) { $onchange = " onchange=\"javascript:$this->onchange\""; }
          $this->sql = "SELECT * FROM $table";
          $datas = NULL;
          $result = executeQuery($this->sql,$datas);
          $this->nbrecs = $result->rowCount();
Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de '' à la ligne 1
0
jordane45 Messages postés 38158 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 655
3 févr. 2023 à 18:50

Ta variable table est vide...

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

oui mais je lui affecte quoi comme valeur?

0
jordane45 Messages postés 38158 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 655
3 févr. 2023 à 21:23

Comment veux-tu que je le sache...

C'est ton code non ??

Qu'est censée faire cette fonction ? Il n'y a que toi qui puisse répondre à ça.... Si tu l'as écrite et que tu l'as utilisé c'est bien pour une raison à toi de nous dire laquelle...

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

non en fait cette class c'est un être charitable qui me l'a donnée pour gerer toutes mes listes.

0
jordane45 Messages postés 38158 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 655
3 févr. 2023 à 23:45

Si ça fonctionnait avant, retrouve une ancienne version pour voir ce qui a disparu.

Sinon, demande à cet être charitable de l'être encore un peu et ainsi de t'aider à corriger.

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

Bonjour alors voilà où j'en suis. Avec ton dernier post il m'est venu une idée. J'ai installé sur le PC de mon épouse Wampserveur avec la version PHP 5.3.5 ensuite j'ai copié mon dossier de mon site tel quel et tout fonctionne normalement. Alors que sur mon PC c'est la version PHP 8.1.13. Capture d'écran c'est le résultat final que je souhaitai. J'ai également installé une autre version de PHP 7.4.33 et j'ai pas les mêmes messages d'erreur que la version 8.

A ton avis existe t-il un moyen d'éviter les erreurs liés à chaque version en utilisant peut-être des contrôles sur les fonctions.

Je te remercie.

0
jordane45 Messages postés 38158 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 655
4 févr. 2023 à 17:46

Il y a forcément des différences entre les versions de PHP. Des fonctions qui évoluent d'autres qui deviennent obsolètes et qui disparaissent d'autres qui sont modifiés en ajoutant des contraintes un peu plus sévère au niveau des types de variables ou des valeurs autorisées à y passer.

Tu ne pourras jamais te prévenir totalement des risques lorsque tu changes de version. La seule chose à faire étant de faire évoluer ton code pour qu'il soit compatible avec cette nouvelle version.

Concernant l'affichage ou non des erreurs, il se peut simplement que ça soit également lié à un paramètre au niveau de la configuration du serveur. Tu peux normalement choisir le niveau d'alerte qui doit être affiché sur ton site. Le risque en désactivant l'affichage des erreurs, et d'avoir des fonctionnements incohérents dans ton code. C'est donc très fortement déconseillé il vaut mieux chercher à résoudre la cause plutôt que de la masquer.

Si tu me dis que ta fonction write fonctionne sur l'ordinateur de ta femme, vérifie si elle est identique à celle que tu nous as montré ou non... Après toutes les bidouilles que tu as fait il faut vraiment vérifier si tu n'as rien supprimer ou modifier par rapport au code d'origine qui provoque désormais ses erreurs sur ton site.

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
4 févr. 2023 à 18:41

j'ai vérifié avec beaucoup d'attention j'ai passé ligne âpres lignes les fichiers

init.php

class.list.php

sais_adherer.php

sont identiques sur mes 2 PC

sur le PC de mon épouse tout va bien aucune erreur sur toutes les pages qui est la version PHP 5.3.5

avec la version PHP 8.1.13 voici les erreurs

j'ai regardé avec la version PHP 7.4.33 et les erreurs sont différentes

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; liste has a deprecated constructor in C:\wamp64\www\gestion\libs\class.liste.php on line 3

Warning: A non-numeric value encountered in C:\wamp64\www\gestion\libs\class.liste.php on line 76
0
jordane45 Messages postés 38158 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 655
4 févr. 2023 à 19:22

Oui ... c'est normal ... relis ma réponse précédente.

Pourrais tu nous montrer le code de la fonction write tel qu'il est sur le pc de ta femme ?

A noter que .. si c'est le même que celui que tu as sur ton php 8 ... dans ce cas ..  relis mon réponse d'hier concernant l'âme charitable qui t'a pondu cette usine à gaz ..

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

oui bien sur j'avais bien compris concernant les différentes version de php j'avais posté juste comme ça...

voici le code de la fonction write qui est sur les 2 pcs

     function write($indice="",$text=0) {
          $champs = explode(",",$this->champs); $idctrl = $champs[0];
          if($this->ctrlname) { $idctrl = $this->ctrlname; }
          if($this->style) { $style = " class=\"$this->style\""; }
          if($this->onchange) { $onchange = " onchange=\"javascript:$this->onchange\""; }
          
          $datas = NULL;
          $result = executeQuery($this->sql,$datas);
          $this->nbrecs = $result->rowCount();
          if($text && $indice) { $textonly = 1; } else { $textonly = 0; }
          if(!$textonly) {
               echo "<select name=\"".$idctrl."\"$this->option".$style.$onchange.">";
               if(!$this->option) {
                    if($this->texte) { echo "<option value=\"null\">$this->texte"; }
               }
          }
          while ($donnees = $result->fetch()) {
               if($indice/1) { $idnum = 0; } else { $idnum = 1; }
               if($indice == $donnees->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }
               if (count($champs) > 2) {
                    $texte = $donnees->$champs[1]; $n = 2;
                    if($textonly && $thisrec) { $buffer = $texte; }
                    while(count($champs) > $n) {
                         if($textonly && $thisrec) { $buffer .= " ".$donnees->$champs[$n]; $n++; }
                         else                      { $texte  .= " ".$donnees->$champs[$n]; $n++; }
                    }
               } else {
                    if($textonly && $thisrec) { $buffer = $donnees->$champs[1]; }
                    else                      { $texte  = $donnees->$champs[1]; }
               }
               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=\"".$donnees->$champs[0]."\"";
                    if($thisrec) { echo " selected"; }
                    echo ">".$texte;
               }
          }
          if($textonly) { echo $buffer;        }
          else          { echo "</select>\n";  }
     }

en ce qui concerne la personne qui m'avait donné la class je n'ai plus de nouvelle depuis 4 ans.

0
jordane45 Messages postés 38158 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 655
4 févr. 2023 à 20:21

Tu n'aurais pas la version avant d'avoir modifié dedans ?

Je doute que le fichier contenait à l'origine la fonction executeQuery

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

j'ai retrouvé tous les fichiers avant que je fasses les modifs. fonction liste et fonction write.

<?php
class liste {
     // Attributs, propriétés de la classe

     var $version   = "1.13";
     var $release   = "15 avr 2016";
     var $auteur    = "Pierre FAUQUE";
     var $intranet  = "";
     var $internet  = "http://www.fauque.fr/";

     var $champs    = "";
     var $texte     = "";
     var $requete   = "";
     var $ctrlname  = "";
     var $tronque   = 0;
     var $option    = "";
     var $style     = "";
     var $onchange  = "";
     var $slimit    = "";
     var $limit     = "";

     var $nbrecs    = 0;

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

     function liste($objet, $ctrlname="", $style="", $limit=0) {
          if($objet != "null") {
             $slimit          = $limit; // sauvegarde du paramètre / fichier .def
             require("$objet.def.php");
             $this->texte     = $texte;
             $this->ctrlname  = $ctrlname;
             $this->style     = $style;
             $this->onchange  = $onchange;
             $this->champs    = $this->getfieldnames($champs);
             if($limit) {
                $this->limit  = $limit;
             }
             if($lignes) {
                $this->texte = "";
                $this->option = " multiple size=\"$lignes\"";
             }
             if($where)  { $insWHERE = "WHERE $where";    } else { $insWHERE = ""; }
             if($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->requete = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT;";

             $cnx = $GLOBALS["connexion"];  // $connexion est dans 'connexion.php'
             $resultat = ExecRequete($this->requete,$cnx);
             $this->nbrecs = mysql_num_rows($resultat); 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. La variable $connexion doit exister.
     // Utiliser les fichiers fournis 'mysql_account.php' et 'connexion.php'

     function write($indice="",$text=0) {
          $cnx = $GLOBALS["connexion"];
          $champs = explode(",",$this->champs); $idctrl = $champs[0];
          if($this->ctrlname) { $idctrl = $this->ctrlname; }
          if($this->style) { $style = " class=\"$this->style\""; }
          if($this->onchange) { $onchange = " onchange=\"javascript:$this->onchange\""; }
          $resultat = ExecRequete($this->requete,$cnx);
          $this->nbrecs = mysql_num_rows($resultat);
          if($text && $indice) { $textonly = 1; } else { $textonly = 0; }
          if(!$textonly) {
             echo "<select name=\"".$idctrl."\"$this->option".$style.$onchange.">";
             if(!$this->option) {
                if($this->texte) { echo "<option value=\"null\">$this->texte"; }
             }
          }
          while($r = mysql_fetch_object($resultat)) {
                if($indice/1) { $idnum = 0; } else { $idnum = 1; }
                if($indice == $r->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }
                if (count($champs) > 2) {
                    $texte = $r->$champs[1]; $n = 2;
                    if($textonly && $thisrec) { $buffer = $texte; }
                    while(count($champs) > $n) {
                         if($textonly && $thisrec) { $buffer .= " ".$r->$champs[$n]; $n++; }
                         else                      { $texte  .= " ".$r->$champs[$n]; $n++; }
                    } }
                else {
                    if($textonly && $thisrec) { $buffer = $r->$champs[1]; }
                    else                      { $texte  = $r->$champs[1]; }
                }
                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=\"".$r->$champs[0]."\"";
                   if($thisrec) { echo " selected"; }
                   echo ">".$texte;
                }
          }
          if($textonly) { echo $buffer;        }
          else          { echo "</select>\n";  }
     }
0
jordane45 Messages postés 38158 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 655
4 févr. 2023 à 22:47

ok

Poste moi le code complet de ton ancienne class LISTE .. je verrai demain pour essayer de te la corriger.

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
4 févr. 2023 à 23:01
<?php
class liste {
     // Attributs, propriétés de la classe

     var $version   = "1.13";
     var $release   = "15 avr 2016";
     var $auteur    = "Pierre FAUQUE";
     var $intranet  = "";
     var $internet  = "http://www.fauque.fr/";

     var $champs    = "";
     var $texte     = "";
     var $requete   = "";
     var $ctrlname  = "";
     var $tronque   = 0;
     var $option    = "";
     var $style     = "";
     var $onchange  = "";
     var $slimit    = "";
     var $limit     = "";

     var $nbrecs    = 0;

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

     function liste($objet, $ctrlname="", $style="", $limit=0) {
          if($objet != "null") {
             $slimit          = $limit; // sauvegarde du paramètre / fichier .def
             require("$objet.def.php");
             $this->texte     = $texte;
             $this->ctrlname  = $ctrlname;
             $this->style     = $style;
             $this->onchange  = $onchange;
             $this->champs    = $this->getfieldnames($champs);
             if($limit) {
                $this->limit  = $limit;
             }
             if($lignes) {
                $this->texte = "";
                $this->option = " multiple size=\"$lignes\"";
             }
             if($where)  { $insWHERE = "WHERE $where";    } else { $insWHERE = ""; }
             if($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->requete = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT;";

             $cnx = $GLOBALS["connexion"];  // $connexion est dans 'connexion.php'
             $resultat = ExecRequete($this->requete,$cnx);
             $this->nbrecs = mysql_num_rows($resultat); 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. La variable $connexion doit exister.
     // Utiliser les fichiers fournis 'mysql_account.php' et 'connexion.php'

     function write($indice="",$text=0) {
          $cnx = $GLOBALS["connexion"];
          $champs = explode(",",$this->champs); $idctrl = $champs[0];
          if($this->ctrlname) { $idctrl = $this->ctrlname; }
          if($this->style) { $style = " class=\"$this->style\""; }
          if($this->onchange) { $onchange = " onchange=\"javascript:$this->onchange\""; }
          $resultat = ExecRequete($this->requete,$cnx);
          $this->nbrecs = mysql_num_rows($resultat);
          if($text && $indice) { $textonly = 1; } else { $textonly = 0; }
          if(!$textonly) {
             echo "<select name=\"".$idctrl."\"$this->option".$style.$onchange.">";
             if(!$this->option) {
                if($this->texte) { echo "<option value=\"null\">$this->texte"; }
             }
          }
          while($r = mysql_fetch_object($resultat)) {
                if($indice/1) { $idnum = 0; } else { $idnum = 1; }
                if($indice == $r->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }
                if (count($champs) > 2) {
                    $texte = $r->$champs[1]; $n = 2;
                    if($textonly && $thisrec) { $buffer = $texte; }
                    while(count($champs) > $n) {
                         if($textonly && $thisrec) { $buffer .= " ".$r->$champs[$n]; $n++; }
                         else                      { $texte  .= " ".$r->$champs[$n]; $n++; }
                    } }
                else {
                    if($textonly && $thisrec) { $buffer = $r->$champs[1]; }
                    else                      { $texte  = $r->$champs[1]; }
                }
                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=\"".$r->$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->requete; }

     // ========================================================================
     // 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"
                ."&copy; $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 "requete: "   .$this->requete.     "<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 "</td></tr></table>";
     }
}
?>

Merci.

0
jordane45 Messages postés 38158 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 655
5 févr. 2023 à 18:17

Essaye ça

<?php
class liste {
     // Attributs, propriétés de la classe

     var $version   = "1.13";
     var $release   = "15 avr 2016";
     var $auteur    = "Pierre FAUQUE";
     var $intranet  = "";
     var $internet  = "http://www.fauque.fr/";

     var $champs    = "";
     var $texte     = "";
     var $requete   = "";
     var $ctrlname  = "";
     var $tronque   = 0;
     var $option    = "";
     var $style     = "";
     var $onchange  = "";
     var $slimit    = "";
     var $limit     = "";

     var $nbrecs    = 0;

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

     function liste($objet, $ctrlname="", $style="", $limit=0) {
          if($objet != "null") {
             $slimit          = $limit; // sauvegarde du paramètre / fichier .def
             require("$objet.def.php");
             $this->texte     = $texte;
             $this->ctrlname  = $ctrlname;
             $this->style     = $style;
             $this->onchange  = $onchange;
             $this->champs    = $this->getfieldnames($champs);
             if($limit) {
                $this->limit  = $limit;
             }
             if($lignes) {
                $this->texte = "";
                $this->option = " multiple size=\"$lignes\"";
             }
             if($where)  { $insWHERE = "WHERE $where";    } else { $insWHERE = ""; }
             if($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->requete = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT;";

             $resultat = executeQuery($this->requete);
             //$this->nbrecs = $result->rowCount(); NE PAS UTILISER SUR DES REQUETES DE TYPE SELECT.. A LA PLACE:
             $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. La variable $connexion doit exister.
     // Utiliser les fichiers fournis 'mysql_account.php' et 'connexion.php'

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

      $champs = explode(",",$this->champs); $idctrl = $champs[0];
      if($this->ctrlname) { $idctrl = $this->ctrlname; }
      if($this->style) { $style = " class=\"$this->style\""; }
      if($this->onchange) { $onchange = " onchange=\"javascript:$this->onchange\""; }
      if(!empty($this->requete)){
        $resultat = executeQuery($this->requete);
      }
      
      $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"; }
         }
      }
      while($r = mysql_fetch_object($resultat)) {
          if($indice/1) { $idnum = 0; } else { $idnum = 1; }
          if($indice == $r->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }
          if (count($champs) > 2) {
              $texte = $r->$champs[1]; $n = 2;
              if($textonly && $thisrec) { 
                $buffer = $texte; 
              }
              while(count($champs) > $n) {
                   if($textonly && $thisrec) { 
                     $buffer .= " ".$r->$champs[$n]; $n++; 
                   }else{ 
                     $texte  .= " ".$r->$champs[$n]; $n++; 
                   }
              } 
          } else {
            if($textonly && $thisrec) { 
              $buffer = $r->$champs[1]; 
            } else  { 
              $texte  = $r->$champs[1]; 
            }
          }
          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=\"".$r->$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->requete; }

     // ========================================================================
     // 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"
                ."&copy; $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 "requete: "   .$this->requete.     "<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 "</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
5 févr. 2023 à 21:41

Bonjour

Merci.

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

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

Fatal error: Uncaught Error: Call to undefined function mysql_fetch_object() in C:\wamp64\www\gestion\libs\class.liste.php on line 83
0
jordane45 Messages postés 38158 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 655
5 févr. 2023 à 22:00
<?php
class liste {
     // Attributs, propriétés de la classe

     var $version   = "1.13";
     var $release   = "15 avr 2016";
     var $auteur    = "Pierre FAUQUE";
     var $intranet  = "";
     var $internet  = "http://www.fauque.fr/";

     var $champs    = "";
     var $texte     = "";
     var $requete   = "";
     var $ctrlname  = "";
     var $tronque   = 0;
     var $option    = "";
     var $style     = "";
     var $onchange  = "";
     var $slimit    = "";
     var $limit     = "";

     var $nbrecs    = 0;

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

     function liste($objet, $ctrlname="", $style="", $limit=0) {
          if($objet != "null") {
             $slimit          = $limit; // sauvegarde du paramètre / fichier .def
             require("$objet.def.php");
             $this->texte     = $texte;
             $this->ctrlname  = $ctrlname;
             $this->style     = $style;
             $this->onchange  = $onchange;
             $this->champs    = $this->getfieldnames($champs);
             if($limit) {
                $this->limit  = $limit;
             }
             if($lignes) {
                $this->texte = "";
                $this->option = " multiple size=\"$lignes\"";
             }
             if($where)  { $insWHERE = "WHERE $where";    } else { $insWHERE = ""; }
             if($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->requete = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT;";

             $resultat = executeQuery($this->requete);
             //$this->nbrecs = $result->rowCount(); NE PAS UTILISER SUR DES REQUETES DE TYPE SELECT.. A LA PLACE:
             $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. La variable $connexion doit exister.
     // Utiliser les fichiers fournis 'mysql_account.php' et 'connexion.php'

     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."'": "";
      $onchange = !empty($this->onchange) ? " onchange='javascript:".$this->onchange."' ": "";
   
      if(!empty($this->requete)){
        $req = executeQuery($this->requete);
        $resultat = $req->fetchAll();
      }
      
      $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 $r)) {
            if($indice/1) { $idnum = 0; } else { $idnum = 1; }
            if($indice == $r->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }
            if (count($champs) > 2) {
                $texte = $r->$champs[1]; $n = 2;
                if($textonly && $thisrec) { 
                  $buffer = $texte; 
                }
                while(count($champs) > $n) {
                     if($textonly && $thisrec) { 
                       $buffer .= " ".$r->$champs[$n]; $n++; 
                     }else{ 
                       $texte  .= " ".$r->$champs[$n]; $n++; 
                     }
                } 
            } else {
              if($textonly && $thisrec) { 
                $buffer = $r->$champs[1]; 
              } else  { 
                $texte  = $r->$champs[1]; 
              }
            }
            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=\"".$r->$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->requete; }

     // ========================================================================
     // 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"
                ."&copy; $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 "requete: "   .$this->requete.     "<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 "</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
5 févr. 2023 à 23:12

Plus d'erreur. Il y a par contre les formulaires qui n'affichent aucune données. Ci joint une capture.

Merci.

0
jordane45 Messages postés 38158 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 655
6 févr. 2023 à 05:45

Faudrait nous montrer ce que contient ton fichier

objet.def.php

0
jordane45 Messages postés 38158 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 655 > jordane45 Messages postés 38158 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024
6 févr. 2023 à 06:07

Faudrait aussi nous montrer le code complet de la page qui contient ton formulaire et plus particulièrement l'endroit où tu instancie ta classe liste

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

Bonjour en ce qui concerne mon objet.def.php. En fait j'ai plusieurs fichiers par exemple dont le nom est "classes.def.php", "adherents.def.php" etc.... ils contiennent les variables $table $champs $where $ordre $texte

<?php
$table  = "cdc_classes";
$champs = "idclas,classe";
$ordre  = "classe";
$texte  = "-- Classe --";
?>

voici l'instanciation de la class liste

// Création des listes déroulantes à utiliser
$LDpers = new liste("libs/personnes","","oblig");  	// Liste des personnes
$LDpaie = new liste("libs/paiements","","oblig");  	// Liste des paiements possibles
$LDclas = new liste("libs/classes","","oblig");    	// Liste des classes de musiciens
$LDpup 	= new liste("libs/pupitres","","");    		// Liste des pupitres par musiciens

voici le formulaire

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

	echo '<table>';
	echo '<tr>';
	echo '<td class="libel">Adhérent</td>';
	echo '<td class="data">'; echo $LDpers->write($idpers).'<input type="button" name="plus" value="+" onclick="javascript:document.location=\'sais_personnes.php?a=add\'" /></td>';
	echo '</tr><tr>';
	echo '<td class="libel">Cotisation</td>';
	echo '<td class="data">'; echo $LDpaie->write($idpaie).'</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Classe de musicien</td>';
	echo '<td class="data">'; echo $LDclas->write($idclas).'</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Instrument du musicien</td>';
	echo '<td class="data">'; echo $LDpup->write($idpup).'</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Au titre de l\'année</td>';
	echo '<td class="data"><input type="text" name="annee" size="3" value="'.$aadh.'" class="oblig" readonly="readonly" /></td>';
	echo '</tr><tr>';
	echo '<td class="libel">Date de début</td>';
	echo '<td class="data"><input type="text" name="ddebut" size="8" value="'.$ddebut.'" /></td>';
	echo '</tr><tr>';
	echo '<td class="libel">Date de fin</td>';
	echo '<td class="data"><input type="text" name="dfin" size="8" value="'.$dfin.'" readonly="readonly" /></td>';
	echo '</tr><tr>';
	echo '<td class="libel">Montant payé</td>';
	echo '<td class="data"><input type="text" name="montant" size="5" style="text-align:right" value="'.$montant.'" />&nbsp;&euro;</td>';
	echo '</tr><tr>';
	echo '<p>';
		//Le for du label doit-être identique à l'id de l'input
		echo '<input type="checkbox" id="facture" class="css-facture" name="facture" value="1"  '.$checked.' />';
		echo '<label for="facture" class="css-facture">Envoyer Facture</label>';
	echo '</p>';
	echo '</tr>';
	echo '<td>';
		echo '<input type="hidden" name="haction" value="'.$action.'" />';
		echo '<input type="hidden" name="oldid" value="'.$oldid.'" />';
	echo '</td>';
	echo '<td class="data"><input type="submit" name="submit" value="'.$btsub.'" /></td>';
	echo '</tr>';
	echo '</table>';

echo '</form>';
0
jordane45 Messages postés 38158 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 655
Modifié le 6 févr. 2023 à 09:42

Je viens de voir que le constructeur de ta class n'était pas bon.

Etonnant que tu n'aies pas eu de message d'erreur à ce sujet ( surtout en php 8 )..

Voici déjà une correction

<?php
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 $champs    = "";
     public $texte     = "";
     public $requete   = "";
     public $ctrlname  = "";
     public $tronque   = 0;
     public $option    = "";
     public $style     = "";
     public $onchange  = "";
     public $slimit    = "";
     public $limit     = "";
	 private $obj	   = "";
     public $nbrecs    = 0;

     // ========================================================================
     // 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) {
		$this->obj = $objet; 
		if($objet != "null") {
			$slimit          = $limit; // sauvegarde du paramètre / fichier .def
			require("$objet.def.php");
			$this->texte     = $texte;
			$this->ctrlname  = $ctrlname;
			$this->style     = $style;
			$this->onchange  = $onchange;
			$this->champs    = $this->getfieldnames($champs);
			if($limit) {
				$this->limit  = $limit;
			}
			if($lignes) {
			$this->texte = "";
			$this->option = " multiple size=\"$lignes\"";
			}
			if($where)  { $insWHERE = "WHERE $where";    } else { $insWHERE = ""; }
			if($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->requete = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT;";

			$resultat = executeQuery($this->requete);
			//$this->nbrecs = $result->rowCount(); NE PAS UTILISER SUR DES REQUETES DE TYPE SELECT.. A LA PLACE:
			$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. La variable $connexion doit exister.
     // Utiliser les fichiers fournis 'mysql_account.php' et 'connexion.php'

     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."'": "";
      $onchange = !empty($this->onchange) ? " onchange='javascript:".$this->onchange."' ": "";
   
      if(!empty($this->requete)){
        $req = executeQuery($this->requete);
        $resultat = $req->fetchAll();
      } 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 $r)) {
            if($indice/1) { $idnum = 0; } else { $idnum = 1; }
            if($indice == $r->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }
            if (count($champs) > 2) {
                $texte = $r->$champs[1]; $n = 2;
                if($textonly && $thisrec) { 
                  $buffer = $texte; 
                }
                while(count($champs) > $n) {
                     if($textonly && $thisrec) { 
                       $buffer .= " ".$r->$champs[$n]; $n++; 
                     }else{ 
                       $texte  .= " ".$r->$champs[$n]; $n++; 
                     }
                } 
            } else {
              if($textonly && $thisrec) { 
                $buffer = $r->$champs[1]; 
              } else  { 
                $texte  = $r->$champs[1]; 
              }
            }
            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=\"".$r->$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->requete; }

     // ========================================================================
     // 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 "requete: "   .$this->requete.     "<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 "</td></tr></table>";
     }
}

Il faut certainement regarder également les différentes class qui sont utilisées par ce script.

Tous les trucs qui sont dans le dossier libs

 
libs/personnes
libs/paiements
libs/classes
libs/pupitres

J'ai peur qu'il faille aussi corriger ces fichiers ...


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

Décidément ce PHP 8.... j'ai essayé de comprendre et de résoudre mais en vain...

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

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

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

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

Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, PDOStatement given in C:\wamp64\www\gestion\libs\class.liste.php on line 55

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

suite à ton message 56 oui en effet je n'ai pas eu de message d'erreur.

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

Bonjour, concernant mon soucis avec PHP 8 j'ai souhaité pour voir de repasser à PHP 7. Voici l'erreur qu'on me renvoie. Peux tu s'il te plait essayer de regarder comment résoudre cette erreur, Je te remercie.

Warning: A non-numeric value encountered in C:\wamp64\www\gestion\libs\class.liste.php on line 93

Cette erreur se trouve dans la fonction write.

if($indice/1) { $idnum = 0; } else { $idnum = 1; }
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
7 févr. 2023 à 14:02

Bonjour j'ai converti la valeur $indice en entier cela a supprimé l'erreur mais ça n'a toujours pas récupéré les valeurs des formulaires.

$indice = (int)$indice;
     function write($indice="",$text=0) {
          $indice = (int)$indice;
          var_dump($indice);   
      $champs = explode(",",$this->champs); $idctrl = $champs[0];
      if($this->ctrlname) { $idctrl = $this->ctrlname; }
      $style = !empty($this->style) ? " class='".$this->style."'": "";
      $onchange = !empty($this->onchange) ? " onchange='javascript:".$this->onchange."' ": "";
   
      if(!empty($this->requete)){
        $req = executeQuery($this->requete);
        $resultat = $req->fetchAll();
      }
      
      $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 $r) {
    
            if($indice/1) { $idnum = 0; } else { $idnum = 1; }
            if($indice == $r->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }
            if (count($champs) > 2) {
                $texte = $r->$champs[1]; $n = 2;
                if($textonly && $thisrec) { 
                  $buffer = $texte; 
                }
                while(count($champs) > $n) {
                     if($textonly && $thisrec) { 
                       $buffer .= " ".$r->$champs[$n]; $n++; 
                     }else{ 
                       $texte  .= " ".$r->$champs[$n]; $n++; 
                     }
                } 
            } else {
              if($textonly && $thisrec) { 
                $buffer = $r->$champs[1]; 
              } else  { 
                $texte  = $r->$champs[1]; 
              }
            }
            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=\"".$r->$champs[0]."\"";
               if($thisrec) { echo " selected"; }
               echo ">".$texte;
            }
          }
      }
        if($textonly) { 
          echo $buffer;        
        } else{ 
          echo "</select>\n";  
        }
     }
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
8 févr. 2023 à 07:54

Bonjour, Merci tout de même je vais clore cette discution malgré que mon problème n'est pas résolu.

Cordialement.

0