Warning: Undefined property
Résolu/FerméLaChaux78 Messages postés 583 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 14 janvier 2025 - 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);
- Une erreur a été signalée lors du téléchargement. (undefined)
- Warning zone telechargement - Accueil - Outils
- Téléchargement et streaming illégal : voici les adresses des sites pirates que les FAI vont bloquer - Accueil - Services en ligne
- Cpu fan fail warning control - Forum Windows
- Pcl xl error warning illegal media type - Forum Imprimante
- Chip Fan Fail ..... - Forum Matériel & Système
38 réponses
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 ?
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);
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.
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" ."© $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; }
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question1 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; }
1 févr. 2023 à 21:12
Et donc, comment utilises tu cette variable ensuite dans ta fonction liste ...?
1 févr. 2023 à 23:47
Excuse moi tu parles de quelle variable ?
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...
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.
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); } }
2 févr. 2023 à 17:47
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à...
2 févr. 2023 à 18:02
Et il contient quoi ton fichier init.php ?
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
2 févr. 2023 à 20:22
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...
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.
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
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)
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 ...
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évrier','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','dé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>"; } ?>
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.
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.
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 .= ' <a href="#a'.$donnees->annee.'">'.$donnees->annee.'</a> |'; $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&idpers='.$idpers.'&idpaie='.$idpaie.'&idclas='.$idclas.'&idpup='.$idpup.'&annee='.$annee.'&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.'" /> €</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>
3 févr. 2023 à 08:24
Où as-tu mis var_dump as-tu fait un backtrace ?
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; }
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
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 ...
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)
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ù... )
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.'" /> €</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>';
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();