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

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

Bonjour,

Tu te trouves dans une class ??

Sinon.. à quoi fait référence ta variable  $this->sql  ??

Ne serait-ce pas plutôt, (comme ailleurs dans ton code.... ) tout simplement : $sql  que tu veux utiliser ?


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

Bonjour,

je me trouve bien dans une class, J'ai une autre erreur dans la même page. Les deux erreurs sont liées je pense et pourtant j'ai bien accès à ma BDD.

Merci encore une fois pour votre disponibilité.

Deprecated: PDO::prepare(): Passing null to parameter #1 ($query) of type string is deprecated in C:\wamp64\www\gestion\libs\init.php on line 59
$requete = $bdd->prepare($sql);
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
1 févr. 2023 à 13:55

Sans voir le code complet de ta classe ainsi que les lignes de code qui font appel, impossible de te répondre.


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

Bonjour, voici le code de la class et la fonction qui sert à faire des requète SQL.

<?php
error_reporting(E_ALL ^ E_NOTICE);
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  = "";

     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->sql = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT;";
               $datas = NULL;
               $result = executeQuery($this->sql,$datas);
               $this->nbrecs = $result->rowCount(); 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; }
          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";  }
     }

     // ========================================================================
     // 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>";
     }
}
?>
function executeQuery($sql,$datas = NULL) {
    $bdd = bdd();
    //exécution de la requête
    try {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    } catch(Exception $e) {
      // en cas d'erreur :
        echo " Erreur ! ".$e->getMessage();
        exit(0); // en cas d'erreur.. arrête le script !
    }
    return $requete;
}
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
1 févr. 2023 à 18:58

Donc, soit tu définis une variable SQL dans ta class  commes celles qui se trouvent entre les ligne 5 et 22...  soit tu enlèves le mot this-> aux lignes 49 et 51

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
1 févr. 2023 à 21:06

Du coup j'ai définis la variable sql dans la class.

2 erreurs sur 3 ont disparu. Cette erreur corresponds à la fonction qui sert à faire les requètes.

var $sql = "";
Fatal error: Uncaught ValueError: PDO::prepare(): Argument #1 ($query) cannot be empty in C:\wamp64\www\gestion\libs\init.php on line 59
function executeQuery($sql,$datas = NULL) {
    $bdd = bdd();
    //exécution de la requête
    try {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    } catch(Exception $e) {
      // en cas d'erreur :
        echo " Erreur ! ".$e->getMessage();
        exit(0); // en cas d'erreur.. arrête le script !
    }
    return $requete;
}
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
1 févr. 2023 à 21:12

Et donc, comment utilises tu cette variable ensuite dans ta fonction liste ...?

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

Excuse moi tu parles de quelle variable ?

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

Celle qui nous pose problème depuis le début....

Celle que tu as déclaré dans ta class...

Bref, celle qui te sert à ta requête SQL...

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

Bonjour, Désolé vraiment je ne sais pas, j'ai épuisé toutes mes connaissances. Sincèrement je n'arrive pas à résoudre mon problème. Alors je fait appel une fois de plus à vous. Je vous remercie.

0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
2 févr. 2023 à 14:43
<?php
error_reporting(E_ALL ^ E_NOTICE);
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  = "";

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

     public  $nbrecs    = 0;
     
     public $sql = NULL;

     // ========================================================================
     // 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->sql = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT;";
               $datas = NULL;
               $result = executeQuery($this->sql,$datas);
               $this->nbrecs = $result->rowCount(); unset($resultat);
          }
     }
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
2 févr. 2023 à 17:47

Bonjour. Merci.

Malheureusement rien à changé je te joint la capture des erreurs. Dans la fonction liste je n'ai pas vu de changement? est ce normal ?

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

Fais donc des var_dump des variables pour voir ce qu'elles contiennent.. par exemple

$this->sql = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT;";
$datas = NULL;

var_dump($this->sql );
exit;

$result = executeQuery($this->sql,$datas);
$this->nbrecs = $result->rowCount(); unset($resultat);

Si tu ne vois pas ta requête .. et que tu as toujours le message d'erreur... c'est que le souci ne se trouve pas là...

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

Et il contient quoi ton fichier init.php ?

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

Juste pour info. Jusqu'en Novembre dernier notre site était chez un hébergeur tout fonctionnait bien. Pour diverses raison nous avons supprimer notre compte. Ensuite je l'ai hébergé en local avec wampserver avec la version 8 de php pour faire des ajouts avant de repartir avec un autre hébergeur. Je pense que le passage à php 8 à contribué aux erreurs.

Mon fichier init.php contient ma fonction à la connexion à ma BDD

fonction pour faire des requètes

fonction pour faire des insert

fonction pour le menu horizontal et vertical

fonction pour le headers

et divers fonctions pour les dates

Je te renvoi un nouveau post concernant un var_dump

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

j'ai enlevé NULL à la variable $sql ce qui donne une erreur de moins hihihihihi

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

ça n'a rien changé ... tu as juste déplacé le problème ..

Ca ne dit toujours pas ce que donne le var_dump .... ni si tu regardes au bon endroit dans le code...

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

Concernant le var_dump....

le fichier class.list.php est appelé par d'autres page pour traiter les listes de formulaire. De ce point de vue je ne peux pas faire un var_dump de $this->sql dans le fichier class.list.php ??? Comment je peux faire?

J'espère que mon explication est compréhensible.

Merci.

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

Comment ça tu peux pas ?

Tu te places sur la partie de la page qui te pose problème tu edite ton fichier pour y mettre le varde et ensuite tu actionnes ton formulaire et tu vois ce que ça donne

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

j'ai fait un var_dump ($this->sql) et aucun résultat

par contre j'ai fait var_dump ($sql)

C:\wamp64\www\gestion\sais_adherer.php:386:string 'SELECT nom,prenom,cdc_adherer.*

				FROM cdc_adherer

					LEFT JOIN cdc_personnes ON cdc_personnes.idpers = cdc_adherer.idpers

				ORDER BY annee DESC, nom,prenom ASC' (length=169)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
2 févr. 2023 à 22:50

Tu l'as bien fait là où je te l'ai mis tu l'as pas mis ailleurs ?

C'est quoi ce fichier sais_adherer.php ? C'est lui qui te pose problème ?

Tu ne nous a pas montré son contenu il me semble ...

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

En fait j'ai du mal à m'expliquer.

j'ai bien fait également aussi le var_dump ($this->sql) dans le fichier class.list.php mais rien ne se passe.

Mais pourquoi l'erreur qui pose problème est dans le fichier init.php.

En fait les pages qui posent problèmes ce n'est pas le contenu des pages c'est les pages qui ont un formulaire.car ceux ci sont géré par le fichier class.list pour les autres pages qui ont également un formulaire ne pose aucun soucis.

Désolé pour ses explications un peu longues.

<?php session_start();

error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

function bdd() {

    $PARAM_hote        	='';     	
    $PARAM_nom_bdd     	='monsite'; 	
    $PARAM_utilisateur 	='root';          	
    $PARAM_mot_passe   	='';

    try {
	$bdd = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bdd, $PARAM_utilisateur, $PARAM_mot_passe);
	$bdd->exec("SET CHARACTER SET utf8");
	$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    catch(Exception $e) {
	echo 'Impossible de se connecter à la base de donnée</br>';
	echo 'Erreur : ' .  $e->getMessage() . '<br />';
	echo 'N° : ' .      $e->getCode();
    }
    return $bdd;
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Variables diverses
$cfg   		= "cdc_configsite";
$kw         	= "keywords.txt";       // Fichier des mots clefs
$lg         	= 140;                  // Largeur des sous-menus
$jours      	= array('dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi');
$chars      	= "iso-8859-1";         // ok
$sprt       	= "css/menusprt.css";   // Styles print ok
$sscr       	= "css/menusscr.css";   // Styles screen ok
$amail      	= "";
$aname      	= "";                   // Nom de l'admin (Publisher; Sera l'auteur si non indiqué)
$lastsave   	= 0;                    // Date de la dernière sauvegarde (timestamp calculé plus loin)
$nbsave     	= 0;                    // Nombre de sauvegardes enregistrées
$lastsql    	= "";                   // Nom du dernier fichier de sauvegarde
$success 	= "";
$erreur 	= "";
$datas 		= NULL;
$reqaj		= "";
$reqmod		= "";

// Fonction qui sert à faire les requêtes SQL
// Contient déjà le try/catch
function executeQuery($sql,$datas = NULL) {
    $bdd = bdd();
    //exécution de la requête
    try {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    } catch(Exception $e) {
      // en cas d'erreur :
        echo " Erreur ! ".$e->getMessage();
        exit(0); // en cas d'erreur.. arrête le script !
    }
    return $requete;
}

//Fonction à utiliser pour faire un INSERT
// return : l'id auto-incrémenté généré par l'insertion
function QueryInsert($sql,$datas = NULL) {
    $bdd = bdd();
    //exécution de la requête
    try {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
        $newid = $bdd->lastInsertId();
    } catch(Exception $e) {
      // en cas d'erreur :
        echo " Erreur ! ".$e->getMessage();
        exit(0); // en cas d'erreur.. arrête le script !
    }
    return $newid;
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Récupérer la configuration du site
$sql = "SELECT * FROM $cfg";
$config = executeQuery($sql,$datas);
while ($donnees = $config->fetch()) { ${$donnees->clef} = $donnees->valeur; }

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Recherche le timestamp (date/heure) de la dernière sauvegarde de la base (dans cdc_saves)
$sql = "SELECT UNIX_TIMESTAMP(save) AS lsave,fichier FROM cdc_saves ORDER BY save DESC;";
$result = executeQuery($sql,$datas);
$nbsave = $result->rowCount();
	if($nbsave != 0) {
		$donnees = $result->fetch();
		$lastsave = $donnees->lsave;
		$lastsql  = $donnees->fichier;
	}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Retourne vrai ou faux selon que le ligne de menu est commentée (débute par ; ou par #)
function isComment($line) {
   $firstchar = substr(trim($line),0,1);
   if($firstchar == ";" || $firstchar == "#") { return 1; } else { return 0; }
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Affiche les menus horizontaux (menus de niveau 1)
function writeMenuH() {
	$hf = fopen("./libs/menu.txt","r");
	while($line = trim(chop(fgets($hf,250)))) {
		if(!isComment($line)) {
			$item = explode(";",$line);
			if(count($item) == 2) { $target = "main"; } else { $target = $item[2]; }
			$menu[] = "<a href='".$item[1]."' target='$target'>$item[0]</a>";
		}
	}
	$lg = floor(100/count($menu));
	$row = "<table width='100%' border='0' cellspacing='0'><tr>";
	$row .= "<td width='16' class='mh'><a href='accueil.php' target='main'><img src='img/home.png'></a></td>";
	for($n = 0; $n < count($menu); $n++) { $row .= "<td width='$lg%' class='mh'>".$menu[$n]."</td>"; }
	return $row .= "</tr></table>";
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Affiche les menus verticaux (menus de niveau 2: sous-menus)
// Requiert 2 arguments: 1) le numéro du sous-menu, 2) 0=Pas d'icône imprimante, 1=icône imprimante
function writeMenuV($index,$imp = 0) {
	$hf = fopen("./libs/smenu$index.txt","r");
	while($line = trim(chop(fgets($hf,250)))) {
		if($line == "---") {
			$menu[count($menu)-1] .= "<hr size='1' noshade>"; }
		else {
			if(!isComment($line)) {
            $item = explode(";",$line);
            if(count($item) == 1) { $target = "main"; } else { $item[1]; }
            if(count($item) == 1) {	$menu[] = "<div class=\"cat\">$line</div>"; }
            else                  { $menu[] = "<a href='".$item[1]."' target='".$target."'>".$item[0]."</a><br/>"; }
			}
		}
	}
	$col = "<div class='mv'>";
	for($n = 0; $n < count($menu); $n++) { $col .= $menu[$n]; }
	if($imp) {
		$col .= "<div style='text-align:center; margin-top:10px'>";
		$col .= "<a href=\"javascript:window.print()\">";
		$col .= "<img src=\"img/imprimante.gif\" title=\"Imprimer cette page\"></a></div>";
	}
	return $col."</div>";
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Retourne la liste des mots-clefs pour les balises meta (mots-clefs dans /lib/keywords.txt)
function keywords() {
	global $kw;
	$kws = ""; // initialiser la liste des mots-clefs
	if($hf = fopen($kw, "r")) {
		$kws = trim(fgets($hf,1024));
		if($kws) {
			while(!feof($hf)) { $kws .= ",".trim(fgets($hf,1024)); }
		}
	}
	return $kws;
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Retourne le contenu de <head></head>
// Passer 2 arguments: 1) le numéro de la page pour titre et description, 2) le nom de l'auteur
function headers($numpage = 0,$author = '') {
	global $chars, $sscr, $sprt, $kw, $amail, $aname;
	global $resp, $cdcmail, $basetitle; // Variables de configuration
	if(!$author) { $author = $aname; }
		switch($numpage) {
			case  0: $title="$basetitle: Accueil"; $desc="Page d'accueil de l'espace Gestion"; break;
			case  1: $title="$basetitle: Index 1"; $desc="Menu réservé aux saisies des listes déroulantes"; break;
			case  2: $title="$basetitle: Index 2"; $desc="Menu réservé aux saisies"; break;
			case  3: $title="$basetitle: Index 3"; $desc="Menu réservé aux recherches"; break;
			case  4: $title="$basetitle: Index 4"; $desc="menu réservé à l'outil/configuration"; break;
			case  5: $title="$basetitle: Index 5"; $desc="Menu réservé à la documentation"; break;
			case  6: $title="$basetitle: Menu";    $desc="Alerte sauvegarde"; break;      
			case  7: $title="$basetitle: Listes déroulantes"; $desc="Enregistrememnt d'une nouvelle classe"; break;
			case  8: $title="$basetitle: Listes déroulantes"; $desc="Enregistrememnt d'une nouvelle fonction"; break;
			case  9: $title="$basetitle: Listes déroulantes"; $desc="Enregistrememnt d'un nouvel horaire"; break;
			case  10: $title="$basetitle: Listes déroulantes"; $desc="Enregistrememnt d'une nouvelle indemnitée"; break;
			case  11: $title="$basetitle: Listes déroulantes"; $desc="Enregistrememnt d'un nouveau local de répétition"; break;
			case  12: $title="$basetitle: Liste déroulantes"; $desc="Enregistrememnt d'une nouvelle numérotation pour le répertoire"; break;
			case  13: $title="$basetitle: Liste déroulantes"; $desc="Enregistrer d'un nouveau dossier pour l'orchestration"; break;
			case  14: $title="$basetitle: Liste déroulantes"; $desc="Enregistrememnt d'un nouveau paiement"; break;
			case  15: $title="$basetitle: Liste déroulantes"; $desc="Enregistrememnt d'un nouveau pupitre"; break;
			case  16: $title="$basetitle: Saisies"; $desc="Enregistrement d'une nouvelle personne"; break;
			case  17: $title="$basetitle: Saisies"; $desc="Enregistrer une nouvelle adhésion"; break;
			case  18: $title="$basetitle: Saisies"; $desc="Enregistrer un nouveau responsable"; break;
			case  19: $title="$basetitle: Saisies"; $desc="Enregistrer les présences aux répétitions"; break;
			case  20: $title="$basetitle: Saisies"; $desc="Enregistrer une oeuvre pour le répertoire"; break;
			case  21: $title="$basetitle: Saisies"; $desc="Enregistrer les présences aux sorties"; break;
			case  22: $title="$basetitle: Saisies"; $desc="Enregistrer une nouvelle récompense"; break;
			case  23: $title="$basetitle: Manifestations"; $desc="Enregistrer une nouvelle manifestation"; break;
			case  24: $title="$basetitle: Auteurs / Oeuvres"; $desc="Enregistrer un nouvel auteur"; break;
			case  25: $title="$basetitle: Auteurs / Oeuvres"; $desc="Enregistrer une nouvelle oeuvre"; break;
			case  26: $title="$basetitle: Album presse"; $desc="Enregistrer un nouvel article de presse"; break;
			case  27: $title="$basetitle: Recherches"; $desc="Anciennetés des personnes"; break;
			case  28: $title="$basetitle: Recherches"; $desc="Personnes par Anciennetés individuelles"; break;				
			case  29: $title="$basetitle: Recherches"; $desc="Responsabilités des membres"; break;				
			case  30: $title="$basetitle: Recherches"; $desc="Récompenses des membres"; break;
			case  31: $title="$basetitle: Recherches"; $desc="Récompenses individuelles des membres"; break;
			case  32: $title="$basetitle: Impressions"; $desc="Manifestations de l'année en cours"; break;				
			case  33: $title="$basetitle: Impressions"; $desc="Manifestations de l'année précédente"; break;				
			case  34: $title="$basetitle: Impressions"; $desc="Eléves de moins de 16 ans"; break;				
			case  35: $title="$basetitle: Impressions"; $desc="Cotisation annuelle des membres"; break;				
			case  36: $title="$basetitle: Impressions"; $desc="Cotisation formation des membres"; break;
			case  37: $title="$basetitle: Impressions"; $desc="Membres de l'année en cours"; break;				
			case  38: $title="$basetitle: Statistique"; $desc="Stats des présences aux répétitions à Cruet"; break;				
			case  39: $title="$basetitle: Statistique"; $desc="Stats des présences aux répétitions à Cuines"; break;
			case  40: $title="$basetitle: Statistique"; $desc="Stats des présences aux sorties"; break;
			case  41: $title="$basetitle: Outil / Config"; $desc="Utilisation de la Base de Données"; break;				
			case  42: $title="$basetitle: Outil / Config"; $desc="Sauvegarde de la Base de Données"; break; 				
			case  43: $title="$basetitle: Outil / Config"; $desc="Changement de la configuration du responsable du site"; break;				
			case  44: $title="$basetitle: Outil / Config"; $desc="Donner accès aux Partitions de musique"; break;				
			case  45: $title="$basetitle: Outil / Config"; $desc="Révoquer accès aux Partitions de musique"; break;				
			case  46: $title="$basetitle: Outil / Config"; $desc="Donner accès à l'Administration"; break;
			case  47: $title="$basetitle: Outil / Config"; $desc="Révoquer accès à l'Administration"; break;
			case  48: $title="$basetitle: Documentation"; $desc="Les menus gestion"; break;				
			case  49: $title="$basetitle: Documentation"; $desc="Description application"; break;
			case  50: $title="$basetitle: Documentation"; $desc="Description des tables"; break;
			case  51: $title="$basetitle: Documentation"; $desc="Dictionnaire des données"; break;
			case  52: $title="$basetitle: Documentation"; $desc="Récursivité des traitements avec PHP"; break;
			case  53: $title="$basetitle: Effectif sorties"; $desc="Enregistrer un nouveau membre à l'effectif"; break;				
			case  54: $title="$basetitle: Effectif Sorties"; $desc="Sorties effectif"; break;	
			case  55: $title="$basetitle: Effectif Sorties"; $desc="Sorties effectif individuel"; break;
			case  56: $title="$basetitle: Liste déroulantes"; $desc="Enregistrememnt d'un nouveau matériel"; break;
			case  57: $title="$basetitle: Saisies"; $desc="Enregistrer un nouveau prêt de matériel"; break;
			case  58: $title="$basetitle: Recherches"; $desc="Gestion prêt matériels"; break;
			case  59: $title="$basetitle: Outil / Config"; $desc="Donner accès aux Photos"; break;				
			case  60: $title="$basetitle: Outil / Config"; $desc="Révoquer accès aux Photos"; break;
			case  61: $title="$basetitle: Saisies"; $desc="Editer une personne"; break;
			case  62: $title="$basetitle: Saisies"; $desc="Editer une personne individuelle"; break;
			case  63: $title="$basetitle: Saisies"; $desc="Enregistrer un nouveau classeur de partitions"; break;
			case  64: $title="$basetitle: Recherches"; $desc="Gestion classeur de partitions"; break;
			case  65: $title="$basetitle: Recherches"; $desc="Date de naissance des membres"; break;
		}
	echo "<meta charset=\"$chars\">\n";
	echo "<title>$title</title>\n";
	echo "<meta name=\"description\" content=\"$desc\">\n";
	$hf = fopen("./libs/$kw","r");
	$line = trim(fgets($hf,256));
	echo "<meta name=\"keywords\" content=\"$line";
	while(!feof($hf)) { echo ", ".trim(fgets($hf,256)); }
	echo "\">\n"; fclose($hf);
	echo "<meta name=\"Publisher\" content=\"$resp\">\n";
	echo "<meta name=\"Reply-To\" content=\"$cdcmail\">\n";
	echo "<meta name=\"author\" content=\"$author\">\n";
	echo "<link rel=\"stylesheet\" href=\"$sscr\" type=\"text/css\" media=\"screen\">\n";
	echo "<link rel=\"stylesheet\" href=\"$sprt\" type=\"text/css\" media=\"print\">\n";
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Retourne la date du jour au format jjjj jj mmmm aaaa (ex: Vendredi 1er avril 2016, Samedi 2 avril 2016)
function today() {
	if(date("j")==1) { $suffixe = "er"; } else { $suffixe = "";}
	$jours =array('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
	$mois = array('janvier','f&eacute;vrier','mars','avril','mai','juin','juillet','ao&ucirc;t','septembre','octobre','novembre','d&eacute;cembre');
	return $jours[date("w")]." ".date("j")."$suffixe ".$mois[date("n")-1]." ".date("Y");
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Retourne un bas de page constitué de la date de mise à jour de la page.
// Style utilisé (à définir) : #maj {margin-left:5px; margin-top:60px; margin-bottom:60px; color:#606060; }
function dmaj($file) {
   $jours = array('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
   $stats = stat($file);
   $bp    = "<div id='maj'>";
   $bp   .= "Page mise à jour le ".$jours[date("w", $stats["mtime"])]." ".date("d/m/Y à H:i:s", $stats["mtime"]);
   $bp   .= "</div>";
   return $bp;
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Retourne la date dans un autre format : AAAA-MM-JJ => JJ/MM/AAAA (mysql => web)
// dm2w = date mysql to web
function dm2w($date) { $tab = explode("-",$date); return $tab[2]."/".$tab[1]."/".$tab[0]; }

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Retourne la date dans un autre format : JJ/MM/AAAA => AAAA-MM-JJ (web => mysql)
// dw2m = date web to mysql
function dw2m($date) { $tab = explode("/",$date); return $tab[2]."-".$tab[1]."-".$tab[0]; }

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Retourne une date au format Français : Dimanche 14 Août 2016
function dateFR($date){
   setlocale (LC_TIME, 'fr_FR.UTF8');
   return ucwords(strftime("%A %d %B %Y", strtotime(substr($date, 0, 10)))).' '.substr($date, 10);
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Retourne une date au format Français : 14 Août 2016
function dFR($date){
   setlocale (LC_TIME, 'fr_FR.UTF8');
   return ucwords(strftime("%d %B %Y", strtotime(substr($date, 0, 10)))).' '.substr($date, 10);
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function redir($url){
   echo "<script language=\"javascript\">";
   echo "window.location='$url';";
   echo "</script>";
}
?>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
2 févr. 2023 à 23:27

L'erreur est indiqué dans le fichier init.php car c'est dans ce fichier que se trouve la fonction executequery. 

Mais le problème n'est pas là.... Le problème se situe là où tu fais appel à cette fonction...

Maintenant, j'aimerais bien que tu répondes aux questions que je te pose... Je t'ai demandé ce que contenait le sais_adherer.php.

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

À la limite, dans la fonction exécuteQuery ajoute un test pour vérifier que la variable SQL n'est pas vide... Et dans le cas contraire, fais un backtrace pour savoir à quel moment se produit le souci.

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 à 07:39

Bonjour la variable $sql n'est pas vide

Je t'envoie le fichier sais_adherer.php une des pages qui fait appel à la fonction concernée.

Merci

var_dump(isset($sql)); exit;

C:\wamp64\www\gestion\libs\init.php:61:boolean true
<?php
$index = 2;                           
require("libs/init.php");              
require("libs/class.liste.php");      
$debug = 0;

// Création des listes déroulantes à utiliser
// variable = new liste("nom de la liste", "nom du controle", "style"); ici, controle = "" => on laisse le nom par défaut (ex: idpers)
$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

$LDpaie->onchange = "payer()";							// Lors du choix d'une cotisation indiquer le prix dans la zone de saisie

$action 	= 'new'; 									// Action par défaut: nouvelle adhésion
$a 		= !empty($_GET['a']) ? $_GET['a'] : NULL; 	// Récupérer dans $a la valeur du paramètre s'il y en a un
$submit 	= !empty($_POST['submit']) ? $_POST['submit'] : NULL;
$haction 	= !empty($_POST['haction']) ? $_POST['haction'] : NULL;

$idpers 	= !empty($_POST['idpers']) ? $_POST['idpers'] : '';
$idpaie 	= !empty($_POST['idpaie']) ? $_POST['idpaie'] : '';
$idclas 	= !empty($_POST['idclas']) ? $_POST['idclas'] : '';
$idpup 		= !empty($_POST['idpup']) ? $_POST['idpup'] : '';
$annee 		= !empty($_POST['annee']) ? $_POST['annee'] : '';
$ddebut 	= !empty($_POST['ddebut']) ? dw2m($_POST['ddebut']) : '';
$dfin 		= !empty($_POST['dfin']) ? dw2m($_POST['dfin']) : '';
$montant 	= !empty($_POST['montant']) ? $_POST['montant'] : '';
$facture 	= !empty($_POST['facture']) ? $_POST['facture'] : '';
$oldid 		= !empty($_POST['oldid']) ? $_POST['oldid'] : '';

switch($a) {
	case 'new': $action = 'new';  break;  // Si sais_adherer.php?a=new il faut ajouter
	case 'ls' : $action = 'list'; break;  // Si sais_adherer.php?a=ls il faut lister les adhésions
	case 'mod': $action = 'mod';  break;  // Si sais_adherer.php?a=mod il faut modifier une adhésion
	default   : $action = 'new';  break;  // Si sais_adherer.php sans paramètre, il faut ajouter par défaut
}

// Initialisation de variables diverses
$today = date("d/m/Y"); // Date du jour (proposée par défaut)
$quant = date("z"); // Quantième du jour dans l'année. NB: le 01/09/AAAAA est le 245è jour de l'année
// Si l'on est avant le 01/09, l'année d'adhésion ($aadh) est l'année précédente, sinon c'est l'année courante
//if($quant < 245) { $aadh = date("Y")-1; } else { $aadh = date("Y"); }
$aadh = $quant < 245 ? date("Y")-1 : date("Y");

// Instructions à réaliser s'il faut ajouter un enregistrement
if($submit) {

	switch($haction) {
		case 'new':
			// Construction de la requete d'ajout
			$sql = "INSERT INTO cdc_adherer (idpers, idpaie, idclas, idpup, annee, ddebut, dfin, montant, facture)
						VALUES(:idpers, :idpaie, :idclas, :idpup, :annee, :ddebut, :dfin, :montant, :facture)";
			$datas = array('idpers' => $idpers, 'idpaie' => $idpaie, 'idclas' => $idclas, 'idpup' => $idpup, 'annee' => $annee, 'ddebut' => $ddebut, 'dfin' => $dfin, 'montant' => $montant, 'facture' => $facture);
			$result = executeQuery($sql,$datas);
			$typenr = "enregistrée";
			$reqaj = $sql; 
			
			$sql = "SELECT idpers,nom,prenom FROM cdc_personnes WHERE idpers = :idpers";
			$datas = array('idpers' => $idpers);
			$result = executeQuery($sql,$datas);
			$donnees = $result->fetch();
			$success = "<span class='success'>L'adhésion de - ".trim("$donnees->nom $donnees->prenom")." - pour l'année $annee a été $typenr.</span>";
			break;

		case 'mod':
			// Constrution de la condition de modification ($oi = old ID)
			$oi = explode(",", $oldid); // Tableau des identifiants
			$condition = "WHERE (idpers='".$oi[0]."' AND idpaie='".$oi[1]."' AND idclas='".$oi[2]."' AND idpup='".$oi[3]."' AND annee='".$oi[4]."')";
			// Construction de la requete de modification
			$sql = "UPDATE cdc_adherer SET idpers = :idpers, idpaie = :idpaie, idclas = :idclas, idpup = :idpup, annee = :annee, ddebut = :ddebut, dfin = :dfin, montant = :montant, facture = :facture $condition";
			$datas = array('idpers' => $idpers, 'idpaie' => $idpaie, 'idclas' => $idclas, 'idpup' => $idpup, 'annee' => $annee, 'ddebut' => $ddebut, 'dfin' => $dfin, 'montant' => $montant, 'facture' => $facture);
			$result = executeQuery($sql,$datas);
			$typenr = "modififiée";
			$reqmod = $sql;
			$idpers = $oi[0];  // Personne initiale modifiée
			
			$sql = "SELECT idpers,nom,prenom FROM cdc_personnes WHERE idpers = :idpers";
			$datas = array('idpers' => $idpers);
			$result = executeQuery($sql,$datas);
			$donnees = $result->fetch();
			$success = "<span class='success'>L'adhésion de - ".trim("$donnees->nom $donnees->prenom")." - pour l'année $annee a été $typenr.</span>";
			break;
	}
}

// Diverses initialisation selon l'action à accomplir
switch($action) {
	case 'new':    // Si appel avec sais_adherer.php?a=new
		$title   	= "Saisie d'une Adhésion";       // Mot à écrire dans le titre
		$btsub   	= "Enregistrer";                 // Mot à écrire sur le bouton submit
		$idpers  	= "";                            // Personne à choisir
		$idpaie  	= "";                            // Paiement à choisir
		$idclas  	= "";                            // Classe à choisir
		$idpup  	= "";                            // Pupitre à choisir
		$annee   	= $aadh;                         // Année d'adhésion par défaut (calculée plus haut)
		$ddebut  	= $today;                        // Date du jour (calculée plus haut)
		$dfin    	= "31/08/".($aadh+1);            // Date de fin d'adhésion (calculée au 31/08/AAAA)
		$montant 	= "";
		$facture 	= "";
		break;

	case 'list':  // Si appel avec sais_adherer.php?a=ls
		$title  	= "Liste des Adhésions";
		break;

	case 'mod':   // Si appel avec sais_adherer.php?a=mod&idpers=57&idclic=1&idpaie=1&idclas=7
		$title  	= "Modification d'une Adhésion";
		$btsub  	= "Modifier";
		// Récupérer l'identifiant de la relation
		$idpers 	= $_GET['idpers'];               // Récupérer l'identifiant de la personne
		$idpaie 	= $_GET['idpaie'];               // Récupérer l'identifiant du paiement
		$idclas 	= $_GET['idclas'];               // Récupérer l'identifiant de la classe
		$idpup 		= $_GET['idpup'];                // Récupérer l'identifiant du pupitre
		$annee  	= $_GET['annee'];                // Récupérer l'année d'adhésion
		$oldid  	= $_GET['oldid'];                // Récupérer l'ancien identifiant (l'identifiant original)
		// requete pour aller chercher l'enregistrement dans cdc_Adherer
		$sql  		= "SELECT * FROM cdc_adherer
						WHERE idpers = :idpers
						AND idpaie = :idpaie
						AND idclas = :idclas
						AND idpup = :idpup
						AND annee = :annee";
		$datas 		= array('idpers' => $idpers, 'idpaie' => $idpaie, 'idclas' => $idclas, 'idpup' => $idpup, 'annee' => $annee);
		$result 	= executeQuery($sql,$datas);
		$donnees 	= $result->fetch();
		// Récupérer les autres valeurs
		$aadh    	= $annee;
		$ddebut  	= dm2w($donnees->ddebut);
		$dfin    	= dm2w($donnees->dfin);
		$montant 	= $donnees->montant;
		$facture 	= $donnees->facture;
		break;
}
?>

<html>

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

<script language="javascript" type="text/javascript">
<?php
// code PHP pour écrire un tableau javascript qui contiendra les tarifs des cotisations pour présaisie

// Les indices de tableau javascript commencent à 0 : cotis[0], cotis[1], cotis[2], cotis[3], cotis[etc...]
// Les ID mysql, auto_increment, (ex: idpaie) commencent à 1 : 1, 2, 3, etc...
// Pour établir la correspondance dans les indices, on met la première valeur du tableau javascript à 0
//   javascript                  idpers mysql         indices et ID
// ---------------------------------------------------------------------
// cotis[0] = 0      .........
// cotis[1] = 5.00   ......... idpers 1 = 5.00     cotis: 1, idpers: 1
// cotis[2] = 150.00 ......... idpers 2 = 150.00   cotis: 2, idpers: 2
// cotis[3] = 0.00   ......... idpers 3 = 0.00     cotis: 3, idpers: 3
$instr = "var cotis = new Array('0'"; // Début de l'initialisation de la variable tableau javascript

// requete pour aller chercher les autres valeurs et finir le tableau
$requete  = "SELECT montant FROM cdc_paiements ORDER BY idpaie";
$resultat = executeQuery($requete,$bdd);

	while ($donnees = $resultat->fetch()) { $instr .= ", '".$donnees->montant."'"; }
	$instr .= ")";
	echo $instr; // donne => var cotis = new Array('0', '5.00', '150.00', '0.00');
?>
</script>

<script language="javascript" type="text/javascript">
function payer() {
	var idpaie;
	idpaie = document.adh.idpaie.options[document.adh.idpaie.options.selectedIndex].value;
	document.adh.montant.value = cotis[idpaie];
}

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

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

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

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

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

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

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

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

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

// Caractères autorisés (ca_*)
// Champs testés sur la saisie:
ca_annee   = chiffres;
ca_dates   = chiffres + "/";
ca_montant = chiffres + ".,";

function verif() {
	// récupération des données du formulaire pour les tester
	idpers  = document.adh.idpers.options[document.adh.idpers.options.selectedIndex].value;
	idpaie  = document.adh.idpaie.options[document.adh.idpaie.options.selectedIndex].value;
	idclas  = document.adh.idclas.options[document.adh.idclas.options.selectedIndex].value;
	idpup   = document.adh.idpup.options[document.adh.idpup.options.selectedIndex].value;
	annee   = document.adh.annee.value;
	ddebut  = document.adh.ddebut.value;
	dfin    = document.adh.dfin.value;
	montant = document.adh.montant.value;

	// Vérification de la présence des champs obligatoires
	if(idpers == "null") {
		alert("Vous avez oublié d'indiquer l'adhérent");
		document.adh.idpers.focus();
		return false;
	}
	if(idpaie == "null") {
		alert("Vous avez oublié de préciser le type de cotisation");
		document.adh.idpaie.focus();
		return false;
	}
	if(idclas == "null") {
		alert("Vous avez oublié de préciser la classe de musique");
		document.adh.idclas.focus();
		return false;
	}
	if(!annee) {
		alert("La cotisation payée est au titre de quelle année ?");
		document.adh.annee.focus();
		return false;
	}

	// Vérification de la valeur du champ annee (obligatoire)
	msg = isValidText(annee, ca_annee, 4, 4);
	if(msg != "OK") {
		alert("Au titre de l'année:\n"+msg);
		document.adh.annee.focus();
		return false;
	}

	// Si les champs suivants (non obligatoires) sont saisis, vérifier validité.
	if(ddebut) {
		msg = isValidDate(ddebut);
		if(msg != "OK") {
			alert("Date de début:\n"+msg);
			document.adh.ddebut.focus();
			return false;
		}
	}
	if(dfin) {
		msg = isValidDate(dfin);
		if(msg != "OK") {
			alert("Date de fin:\n"+msg);
			document.adh.dfin.focus();
			return false;
		}
	}
	if(montant) {
		msg = isValidText(montant, ca_montant, 4, 7);
		if(msg != "OK") {
			alert("Montant:\n"+msg);
			document.adh.montant.focus();
			return false;
		}
	}
	return true;
}
</script>

</head>

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

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

	// Lister les années pour y accéder directement
	echo '<h2>Années</h2>';
	$sql = "SELECT annee FROM cdc_adherer GROUP BY annee ORDER BY annee";
	$result = executeQuery($sql,$datas);
	$tm       = '|';  // "Table des matières"
	$nba      = 0;    // Nombre d'années écrites
	while ($donnees = $result->fetch()) {
		$tm .= '&nbsp;<a href="#a'.$donnees->annee.'">'.$donnees->annee.'</a>&nbsp;|';
		$nba++;
		if($nba%10 == 0) { $tm .= '<br/>|'; }
	}
	echo $tm;

	// Lister tous les enregistrements avec un lien pour effectuer la modif d'un enregistrement
	$sql = "SELECT nom,prenom,cdc_adherer.*
				FROM cdc_adherer
					LEFT JOIN cdc_personnes ON cdc_personnes.idpers = cdc_adherer.idpers
				ORDER BY annee DESC, nom,prenom ASC";
	$result = executeQuery($sql,$datas);
	$an = 0;	// Initialiser les années
	echo '<ul>';
	while ($donnees = $result->fetch()) {
		if($donnees->annee != $an) {	// Si on change d'année
			echo '</ul>';
			echo '<a name="a'.$donnees->annee.'"><h2>'.$donnees->annee.'</h2></a>';	// Indiquer l'année
			$an = $donnees->annee;	// Sauvegarder l'année du listage
			echo '<ul>';
		}
		// Lister les adhérents de l'année
		// Construire le lien pour réafficher l'adhésion
		// Péparer le lien avec les paramètres
		$idpers = $donnees->idpers;
		$idpaie = $donnees->idpaie;
		$idclas = $donnees->idclas;
		$idpup  = $donnees->idpup;
		$annee  = $donnees->annee;
		$oldid  = "$idpers,$idpaie,$idclas,$idpup,$annee";  // Sauvegarder identifiant original (en cas de modif de l'ID)
		
		$lien = $_SERVER["PHP_SELF"].'?a=mod&amp;idpers='.$idpers.'&amp;idpaie='.$idpaie.'&amp;idclas='.$idclas.'&amp;idpup='.$idpup.'&amp;annee='.$annee.'&amp;oldid='.$oldid;
		echo '<li> <a href="'.$lien.'">'.$donnees->nom.' '.$donnees->prenom.' : du '.dm2w($donnees->ddebut).' au '.dm2w($donnees->dfin).'</a></li>';
	}
	echo '</ul>';

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

$checked = $facture ? " checked " : "";

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>';
echo '<p>NB: La saisie dans les zones à fond jaune pâle est obligatoire.</p>';

// Debuggage
if($debug) {
	echo '<div style="font-family:courier">';
	echo '<hr>DEBUGAGE:<br/>';
	echo '$quant: '.$quant.'<br/>';
	echo '$today: '.$today.'<br/>';
	echo '$action: '.$action.'<br/>';
	echo '$title: '.$title.'<br/>';
	echo '$btsub: '.$btsub.'<br/>';
	echo '$annee: '.$annee.'<br/>';
	echo '$ddebut: '.$ddebut.'<br/>';
	echo '$dfin: '.$dfin.'<br/>';
	echo '$dfin pour mysql: '.dw2m($dfin).'<br/>';
	echo '$sql: '.$sql.'<br/>';
	echo 'requete ajout: '.$reqaj.'<br/>';
	echo 'requete modif: '.$reqmod.'<br/>';
	echo '</div>';
}
?>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
</div>
<?php echo dmaj("sais_adherer.php"); ?>
</body>

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

Où as-tu mis var_dump as-tu fait un backtrace ?

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

En gros, peux tu modifier la fonction executeQuery comme ceci et nous indiquer ce que ça t'affiche lorsque tu vas sur l'endroit où ça te met une erreur ?

function executeQuery($sql,$datas = NULL) {
    $bdd = bdd();
	
	//On vérifie que la variable sql n'est pas vide
	if(empty($sql)){
		echo "Erreur !  La variable sql est vide !! <br><pre>";
		var_dump(debug_backtrace());
		echo "</pre>";
		exit;
	}
	
    //exécution de la requête
    try {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    } catch(Exception $e) {
      // en cas d'erreur :
        echo " Erreur ! ".$e->getMessage();
        exit(0); // en cas d'erreur.. arrête le script !
    }
    return $requete;
}

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 à 09:11

Bonjour

En fait j'ai bien fait un var_dump dans la fonction exécuteQuery et également dans la page sais_adherer si j'ai bien compris.

Et le backtrace je le fait à quel endroit dans la page?

C:\wamp64\www\gestion\libs\init.php:56:boolean true

function executeQuery($sql,$datas = NULL) {
    var_dump(isset($sql));
    $bdd = bdd();
    //exécution de la requête
    try {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    } catch(Exception $e) {
      // en cas d'erreur :
        echo " Erreur ! ".$e->getMessage();
        exit(0); // en cas d'erreur.. arrête le script !
    }
    return $requete;
}
C:\wamp64\www\gestion\sais_adherer.php:385:boolean true
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
3 févr. 2023 à 09:18

Tu lis les réponses que je te fait avant de me poser de nouvelles questions ?? Regarde le message #27 ...

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 à 09:51

Houps je n'avais pas vu le post retour, désolé...

Erreur ! La variable sql est vide !!

C:\wamp64\www\gestion\libs\init.php:61:
array (size=2)
  0 => 
    array (size=4)
      'file' => string 'C:\wamp64\www\gestion\libs\class.liste.php' (length=42)
      'line' => int 68
      'function' => string 'executeQuery' (length=12)
      'args' => 
        array (size=2)
          0 => string '' (length=0)
          1 => null
  1 => 
    array (size=7)
      'file' => string 'C:\wamp64\www\gestion\sais_adherer.php' (length=38)
      'line' => int 424
      'function' => string 'write' (length=5)
      'class' => string 'liste' (length=5)
      'object' => 
        object(liste)[6]
          public 'version' => string '1.13' (length=4)
          public 'release' => string '15 avr 2016' (length=11)
          public 'auteur' => string 'Pierre FAUQUE' (length=13)
          public 'intranet' => string '' (length=0)
          public 'internet' => string 'http://www.fauque.fr/' (length=21)
          public 'champs' => string '' (length=0)
          public 'texte' => string '' (length=0)
          public 'requete' => string '' (length=0)
          public 'ctrlname' => string '' (length=0)
          public 'tronque' => int 0
          public 'option' => string '' (length=0)
          public 'style' => string '' (length=0)
          public 'onchange' => string '' (length=0)
          public 'slimit' => string '' (length=0)
          public 'limit' => string '' (length=0)
          public 'nbrecs' => int 0
          public 'sql' => string '' (length=0)
      'type' => string '->' (length=2)
      'args' => 
        array (size=1)
          0 => string '' (length=0)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
3 févr. 2023 à 11:03

Donc :

Qu'as tu dans le fichier  'file' => string 'C:\wamp64\www\gestion\sais_adherer.php' (length=38)
A la ligne : 'line' => int 424 ( et  quelques lignes au dessus .. au cas où... )

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 à 14:07

c'est 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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
3 févr. 2023 à 16:41

Regarde ta fonction write ....     il manque la requête non ??

  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); // d'où vient $this->sql ?? qu'est-ce qu'elle contient ?? à Mon avis.. tu l'as oublié.. elle est donc vide ... non ?
          $this->nbrecs = $result->rowCount();

0