Problème affichage des données du formulaire php
RésoluLaChaux78 Messages postés 583 Date d'inscription Statut Membre Dernière intervention -
- Problème affichage des données du formulaire php
- Whatsapp formulaire opposition - Guide
- Fuite données maif - Guide
- Formulaire de réclamation facebook - Guide
- Trier des données excel - Guide
- Affichage double ecran - Guide
23 réponses
Bonjour,
Tu nous dis :
J'ai une page PHP dont je saisie les oeuvres musicales avec un formulaire de 4 champs. 1 champ de type texte, 1 de type="checkbox et 2 champs avec liste déroulante issue de ma base de donnée.
On est bien d'accord que tu parles de cette partie du code :
echo '<form method="post" name="oeuv" action="'.$_SERVER["PHP_SELF"].'" onsubmit="return verif()">'; echo '<h1>'.$title.'</h1>'; echo '<table>'; echo '<tr>'; echo '<td class="libel">Oeuvre</td>'; echo '<td class="data"><input type="text" name="oeuvre" size="25" value="'.$oeuvre.'" class="oblig" /></td>'; echo '</tr><tr>'; echo '<td class="libel">Auteur d\'appartenance</td>'; echo '<td class="data">'; echo $LDaut->write($idaut).'</td>'; echo '</tr><tr>'; echo '<td class="libel">Orchestration</td>'; echo '<td class="data">'; echo $LDorch->write($idorch).'</td>'; echo '</tr><tr>'; echo '<td>'; //Le for du label doit-être identique à l'id de l'input echo '<input type="checkbox" id="conducteur" class="css-conducteur" name="conduct" value="1" '.$checked.' />'; echo '<label for="conducteur" class="css-conducteur">Conducteur<br/> original</label>'; echo '</td>'; echo '</tr>'; echo '<td>'; echo '<input type="hidden" name="haction" value="'.$action.'" />'; echo '<input type="hidden" name="idoeu" value="'.$idoeu.'" />'; echo '</td>'; echo '<td class="data"><input type="submit" name="submit" value="'.$btsub.'" /></td>'; echo '</tr>'; echo '</table>'; echo '</form>';
Que donne le code généré de cette partie du code ? ( code généré = code que tu peux voir dans ton navigateur internet lorsque tu lui demandes d'afficher le code source ( CTRL + u ))
Lorsque je souhaite faire une modification je saisie le lien d'une œuvre pour effectuer la modification d'un enregistrement
Tu fais cette selection dans le formulaire, mais tu ne valides pas (submit ) encore ton formulaire ... si ?
et malheureusement les 2 champs de liste déroulante me retourne les dernières valeurs de ses listes et non les valeurs concernés par l’œuvre sélectionnée.
Après le submit de ton formulaire ?
As tu vérifié que le code html de tes listes était "syntaxiquement" correcte au niveau html ?
Tu as bien mis un attribut VALUE dans les OPTION de tes balises <SELECT> ?
Là encore, quand tu regardes le code source généré .. le code te semble t-il correcte ? Les valeurs dans les "value" sont bonnes ?
Qu'affiche exactement le var_dump ?
.
Bonjour
Pour la première question oui je parle bien de cette partie du code.
Effectivement je fais la sélection dans le formulaire mais je ne valide pas puisque les 2 listes déroulante ne correspondent pas à l'ID sélectionné.
le var_dump affiche bien les bon IDs Comme je le disais Auteur et Orchestration affiche la dernière valeur des listes
C'est complétement fou les IDs sont correct????
Bonjour oui c'est ce que je pensais aussi. Donc maintenant j'en suis certain cela proviens du fichier class.liste.php. Ce fichier génère les listes déroulantes. Car j'ai remplacé ce fichier sur le PC de mon épouse et le résultat est le même alors que sinon tout fonctionnais normalement. Cela est dù aux version de PHP et/ou MySQL Maintenant reste à trouver pour y remédier. Merci tu m'avait déjà résolu un problème concernant ce fichier il y a pas longtemps. Merci encore pour ton aide précieuse.
le fichier auteur.def.php et orchestration.def.php
<?php $table = "cdc_auteurs"; $champs = "idaut,nom,prenom"; $ordre = "nom,prenom"; $texte = "-- Auteurs --"; ?> <?php $table = "cdc_orchestrations"; $champs = "idorch,orches"; $ordre = "idorch"; $texte = "-- Orchestrations --"; ?>
Il y a l'appel de la class.
$LDorch = new liste("libs/orchestrations","",""); $LDaut = new liste("libs/auteurs","","");
<?php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); class liste { // Attributs, propriétés de la classe public $version = "1.13"; public $release = "15 avr 2016"; public $auteur = "Pierre FAUQUE"; public $intranet = ""; public $internet = "http://www.fauque.fr/"; public $sql = ""; public $champs = ""; public $texte = ""; public $ctrlname = ""; public $style = ""; public $onchange = ""; public $tronque = 0; public $option = ""; public $slimit = ""; public $limit = ""; public $nbrecs = 0; private $obj = ""; // ======================================================================== // Constructeur de la classe liste. // Lecture de la définition de la liste, initialisation des propriétés function __construct($objet, $ctrlname="", $style="", $limit=0) { require("$objet.def.php"); $this->champs = $this->getfieldnames($champs); $this->onchange = !empty($onchange) ? $onchange : ''; $this->texte = $texte; $this->ctrlname = $ctrlname; $this->style = $style; $this->obj = $objet; if($objet != "null") { $slimit = $limit; // sauvegarde du paramètre / fichier .def if($limit) { $this->limit = $limit; } if(!empty($lignes)) { $this->texte = ""; $this->option = " multiple size=\"$lignes\""; } if(!empty($where)) { $insWHERE = "WHERE $where"; } else { $insWHERE = ""; } if(!empty($group)) { $insGROUP = "GROUP BY $group"; } else { $insGROUP = ""; } if($ordre) { $insORDER = "ORDER BY $ordre"; } else { $insORDER = ""; } if($limit) { $insLIMIT = "LIMIT 0,$limit"; } else { $insLIMIT = ""; } if($slimit) { $insLIMIT = "LIMIT 0,$slimit"; } else { $insLIMIT = ""; } $this->sql = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT"; $req = executeQuery($this->sql); $resultat = $req->fetchAll(); $this->nbrecs = !empty($resultat) ? count($resultat) : 0; unset($resultat); } } // ======================================================================== // Méthode de la classe liste. Celle-ci exécute la requête appropriée pour écrire la liste déroulante désignée. function write($indice="",$text=0) { $champs = explode(",",$this->champs); $idctrl = $champs[0]; if($this->ctrlname) { $idctrl = $this->ctrlname; } $style = !empty($this->style) ? " class='".$this->style."'": ""; //if($this->onchange) { $onchange = " onchange=\"javascript:$this->onchange\""; } $onchange = !empty($this->onchange) ? " onchange='javascript:".$this->onchange."' ": ""; if(!empty($this->sql)) { $req = executeQuery($this->sql); $resultat = $req->fetchAll(); //var_dump(debug_backtrace()); } else { echo "Erreur ! La requête est vide !"; $this->debug(); } $this->nbrecs = !empty($resultat) ? count($resultat) : 0; $textonly = $text && $indice ? 1 : 0; if(!$textonly) { echo "<select name=\"".$idctrl."\"$this->option".$style.$onchange.">"; if(!$this->option) { if($this->texte) { echo "<option value=\"null\">$this->texte"; } } } if(!empty($resultat)) { foreach($resultat as $donnees) { $indice = (int)$indice; //Convertir une chaîne en un entier. if($indice/1) { $idnum = 0; } else { $idnum = 1; } $thisrec = $indice ? 1 : 0; if (count($champs) > 2) { $c1 = !empty($champs[1]) ? ($champs[1]) : NULL; $texte = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; $n = 2; if($textonly && $thisrec) { $buffer = $texte; } while(count($champs) > $n) { $cn = !empty($champs[$n]) ? ($champs[$n]) : NULL; if($textonly && $thisrec) { $buffer .= !empty($cn) && !empty($donnees->$cn) ? $donnees->$cn : ""; $n++; } else { $texte .= !empty($cn) && !empty($donnees->$cn) ? " ". $donnees->$cn : ""; $n++; } } } else { $c1 = !empty($champs[1]) ? ($champs[1]) : NULL; if($textonly && $thisrec) { $buffer = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; } else { $texte = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; } } if($this->tronque) { $lg = $this->tronque-9; // 9 = longueur de "... / ..." if(($lg % 2) != 0) { $lg++; } if(strlen($texte) > $lg) { $texte = substr($texte,0,$lg/2) . "... / ..." . substr($texte,strlen($texte)-($lg/2),$lg/2); } if(strlen($buffer) > $lg) { $buffer = substr($buffer,0,$lg/2) . "... / ..." . substr($buffer,strlen($buffer)-($lg/2),$lg/2); } } if(!$textonly) { echo "<option value=\"".!empty($donnees->champs[0])."\""; if($thisrec) { echo " selected"; } echo ">".$texte; } } } if($textonly) { echo $buffer; } else { echo "</select>\n"; } } // ======================================================================== // 30/09/2005. Méthode retournant la liste des champs en prenant en compte les alias // de champ possibles (ex: ..., DATE_FORMAT(date, '%d/%m/%Y') AS debut, ...) // ou les champs précédés du nom de table (ex: ..., ac_Personnes.idpers, ...) function getfieldnames($champs) { $fields = explode(",", $champs); for($n=0; $n<count($fields); $n++) { if(strstr(strtolower($fields[$n]), ".")) { $nfields = explode(".", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1]; } if(strstr(strtolower($fields[$n]), " as ")) { $nfields = explode(" ", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1]; } } $rfields = $fields[0]; for($n=1; $n<count($fields); $n++) { $rfields .= ",".$fields[$n]; } return $rfields; } // ======================================================================== // 11/07/2003. Methode affichant le nombre de lignes d'un résultat, // en fait le nombre d'éléments qu'il y aura dans la liste. function nbelements() { return $this->nbrecs; } // ======================================================================== // 27/03/2004. Méthode servant à changer le nom par défaut du contrôle 'select'. // Si elle est utilisée, elle doit l'être avant la méthode write(). function changename($ctrlname) { $this->ctrlname = $ctrlname; } // ======================================================================== // 05/10/2005. Méthode destinée à définir le style à utiliser dans la liste. // Si elle est utilisée, elle doit l'être avant la méthode write(). function usestyle($style) { $this->style = $style; } // ======================================================================== // 04/07/2003. Méthode initialisant la longueur maximale des éléments de la liste. // Si elle est utilisée, elle doit l'être avant la méthode write(). function tronque($nbcar) { $this->tronque = $nbcar; } // ======================================================================== // Méthode destinée au débuggage. Sert à afficher la requête à exécuter. function display() { echo $this->sql; } // ======================================================================== // 03/07/2003. Méthode retournant la version de la classe function version() { return "version $this->version ($this->release).<br>\n" ."Released under the GNU Public License<br>\n" ."© $this->auteur.\n"; } // ======================================================================== // 03/07/2003. Méthode retournant le numéro de la version de la classe function numversion() { return $this->version; } // ======================================================================== // 04/07/2003. Méthode testant si la version en cours est la dernière // Le paramètre passé est "intranet" ou "internet" function checkversion($lan="internet") { $msg = "The checking could'nt be done. " . "Do you are on the good network ?\n"; if($lan == "internet") { $url = $this->internet; } if($lan == "intranet") { $url = $this->intranet; } $url .= "dev/cliste/lastver.liste.txt"; if(!@$hf = fopen($url,"r")) { echo "$msg<br>\n"; exit; } $version = fgets($hf,100); $version = chop($version); $release = fgets($hf,100); $release = chop($release); $feature = fgets($hf,1000); $feature = chop($feature); $download = fgets($hf,1000); $download = chop($download); fclose($hf); if($version == $this->version) { echo "No new version since the $this->version (this one).\n"; } else { echo "<font color=\"#FF0000\"><b>New</b></font> : "; echo "version $version ($release).<br>\n"; echo "Features : $feature<br>\n"; echo "Download from : $download\n"; } } // ======================================================================== // 15/07/2003. Méthode affichant la documentation de la classe function showdoc($lan="internet") { if($lan == "internet") { $url = $this->internet; } if($lan == "intranet") { $url = $this->intranet; } $url .= "index.php?p=cliste.doc.php"; $style = "style='text-decoration: none'"; echo "<a href='$url' $style>French documentation</a>"; } // ======================================================================== // 05/10/2005. Méthode pour l'affichage des variables. function debug() { $style = "font-family:verdana; font-size:9pt; border-style:solid; " . "border-color:red; border-width:1px"; if($this->ctrlname) { $ctrlname = $this->crtlname; } else { $ch = explode(",",$this->champs); $ctrlname = $ch[0]; } echo "<table border=\"0\" cellpadding=\"2\" bgcolor=\"#FFFFA0\"><tr>"; echo "<td style=\"$style\">"; echo "<b>CLASS liste:</b><br>"; echo "Version: " .$this->version."<br>"; echo "Release: " .$this->release."<br>"; echo "Author: " .$this->auteur."<br>"; echo "URL-intranet: " .$this->intranet."<br>"; echo "URL-internet: " .$this->internet."<br>"; echo "<b>ATTRIBUTES:</b><br>"; echo "champs: " .$this->champs."<br>"; echo "texte: " .$this->texte."<br>"; echo "ctrlname: " .$ctrlname."<br>"; echo "tronque: " .$this->tronque."<br>"; echo "option: " .$this->option."<br>"; echo "style: " .$this->style."<br>"; echo "onchange: " .$this->onchange."<br>"; echo "limit: " .$this->limit."<br>"; echo "nbrecs: " .$this->nbrecs."<br>"; echo "objet: " .$this->obj."<br>"; echo "sql: " .$this->sql."<br>"; echo "</td></tr></table>"; } } ?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionoui tout à fait le fichier sais_oeuvre.php est identique à celui de mon autre PC où tout fonctionne normalement.
Il me semble qu'une partie de la
function write pose problème, enfin je n'en suis pas sur non plus. Je suis dessus depuis très tôt ce matin je m'arrache les cheveux!! Je t'envoie quand même cette partie du code à tout hasard..
Mon second PC ou tout marche bien la version PHP 5.3.3 et MySQL est 5.5.8
Alors sur celui-ci version PHP 8.2.0 et MySQL 8.0.31
Merci
if (count($champs) > 2) { $c1 = !empty($champs[1]) ? ($champs[1]) : NULL; $texte = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; $n = 2; if($textonly && $thisrec) { $buffer = $texte; } while(count($champs) > $n) { $cn = !empty($champs[$n]) ? ($champs[$n]) : NULL; if($textonly && $thisrec) { $buffer .= !empty($cn) && !empty($donnees->$cn) ? $donnees->$cn : ""; $n++; } else { $texte .= !empty($cn) && !empty($donnees->$cn) ? " ". $donnees->$cn : ""; $n++; } } } else { $c1 = !empty($champs[1]) ? ($champs[1]) : NULL; if($textonly && $thisrec) { $buffer = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; } else { $texte = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; } }
la requète qui me retourne bien les valeurs souhaités
En fait pour faire une petite récap! J'ai mon lien dans la boucle qui affiche la liste des valeurs souhaitées
while ($donnees = $result->fetch()) { $lien = $_SERVER["PHP_SELF"].'?a=mod&idoeu='.$donnees->idoeu; $initiale = substr($donnees->oeuvre,0,1); echo '<li><a name="a'.$initiale.'"></a><a href="'.$lien.'">'.stripslashes(ucfirst($donnees->oeuvre)).' => '.$donnees->orches.' [ '.$donnees->conduct.' ]</a></li>'; }
Ensuite j'ai L'instruction switch qui me retourne les bonnes valeurs à modifier
switch($action) { case 'new': $title = "Saisie d'une Oeuvre"; $btsub = "Enregistrer"; $idoeu = ""; $oeuvre = ""; $idaut = ""; $idorch = ""; $conduct = ""; break; case 'list': $title = "Liste des Oeuvres"; break; case 'mod': $title = "Modification d'une Oeuvre"; $btsub = "Modifier"; $sql = "SELECT * FROM cdc_oeuvres WHERE idoeu = :idoeu"; $datas = array('idoeu' => $idoeu); $result = executeQuery($sql,$datas); $donnees = $result->fetch(); $idoeu = $donnees->idoeu; $oeuvre = ucfirst(stripslashes($donnees->oeuvre)); $idaut = $donnees->idaut; $idorch = $donnees->idorch; $conduct = $donnees->conduct; break; }
Je vais surement dite une grosse bétise... mais cela ne viendrait pas de ma table PhpMyadmin avec les relations des clés étrangères???????
Peux tu me dire ce que tu en penses de cette condition merci
if ($indice == $donnees->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }
je l'ai remplacé par:
$thisrec = $indice ? 1 : 0;
J'ai l'impression que c'est cette ligne qui pose problème?
une erreur concerne cette ligne!. Je crois comprendre que / cet opérateur n'est pas pris en charge????
if($indice/1) { $idnum = 0; } else { $idnum = 1; }
Fatal error: Uncaught TypeError: Unsupported operand types: array / int in C:\wamp64\www\gestion\libs\class.liste.php on line 106
Bonjour après analyse je suis certain que cela viens de ses lignes de code.
Warning: Array to string conversion in C:\wamp64\www\gestion\libs\class.liste.php on line 105 $indice = (int)$indice; //Convertir une chaîne en un entier. if($indice/1) { $idnum = 0; } else { $idnum = 1; } $thisrec = $indice == $donnees->$champs[$idnum] ? 1 : 0 ;
Merci encore de ton savoir pour je l'espère la dernière fois pour ce problème.
Bonjour,
Oui le message d'erreur vient bien de là.
Il semble que ta variable $indice, lorsque tu as l'erreur, contienne un array et non une simple variable.
Il serait donc utile de regarder ce qu'elle contient exactement (avec un var_dump par exemple).
On pourrait prévoir un truc du genre :
if( !empty($indice) && (is_array($indice) || is_object($indice) ) ){ echo "la variable indice ne contient pas la bonne valeur ?"; var_dump($indice); $idnum = 1 ; $thisrec = 0; }else{ $indice = !empty($indice) ? intVal($indice) : 0 ; //Convertir une chaîne en un entier. $idnum = ($indice/1) ? 0 : 1; $thisrec = $indice == $donnees->$champs[$idnum] ? 1 : 0 ; }
Voici le code.
if(!empty($resultat)) { foreach($resultat as $donnees) { if( !empty($indice) && (is_array($indice) || is_object($indice) ) ){ echo "la variable indice ne contient pas la bonne valeur ?"; //var_dump($indice); $idnum = 1 ; $thisrec = 0; }else{ $indice = !empty($indice) ? intVal($indice) : 0 ; //Convertir une chaîne en un entier. $idnum = ($indice/1) ? 0 : 1; var_dump($indice); $thisrec = $indice == $donnees->$champs[$idnum] ? 1 : 0 ; }
L'erreur et la ligne correspondante.
Warning: Array to string conversion in C:\wamp64\www\gestion\libs\class.liste.php on line 110 $thisrec = $indice == $donnees->$champs[$idnum] ? 1 : 0 ;
J'ai fait un var_dump($indice) à la ligne precedente.
var_dump($donnees->$champs);
C:\wamp64\www\gestion\libs\class.liste.php:111:null
var_dump($donnees->$champs[$idnum]);
C:\wamp64\www\gestion\libs\class.liste.php:112:null
C'est bien ça que tu veux que je teste? var_dump($donnees->$champs); C:\wamp64\www\gestion\libs\class.liste.php:112:null
Par contre j'ai pas compris! excuse moi...
"Est bien de type array avant de l'utiliser telle qu'elle"
une erreur la variable qui n'est pas définie alors j'ai fait
$champs = !empty($champs) ? $champs : '';
Warning: Undefined variable $champ in C:\wamp64\www\gestion\libs\class.liste.php on line 118
mais toujours la même erreur?
Merci.
Bonjour
Voici le code complet.
Merci.
<?php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); class liste { // Attributs, propriétés de la classe public $version = "1.13"; public $release = "15 avr 2016"; public $auteur = "Pierre FAUQUE"; public $intranet = ""; public $internet = "http://www.fauque.fr/"; public $sql = ""; public $champs = ""; public $texte = ""; public $ctrlname = ""; public $style = ""; public $onchange = ""; public $tronque = 0; public $option = ""; public $slimit = ""; public $limit = ""; public $nbrecs = 0; private $obj = ""; // ======================================================================== // Constructeur de la classe liste. // Lecture de la définition de la liste, initialisation des propriétés function __construct($objet, $ctrlname="", $style="", $limit=0) { require("$objet.def.php"); $this->champs = $this->getfieldnames($champs); $this->onchange = !empty($onchange) ? $onchange : ''; $this->texte = $texte; $this->ctrlname = $ctrlname; $this->style = $style; $this->obj = $objet; if($objet != "null") { $slimit = $limit; // sauvegarde du paramètre / fichier .def if($limit) { $this->limit = $limit; } if(!empty($lignes)) { $this->texte = ""; $this->option = " multiple size=\"$lignes\""; } if(!empty($where)) { $insWHERE = "WHERE $where"; } else { $insWHERE = ""; } if(!empty($group)) { $insGROUP = "GROUP BY $group"; } else { $insGROUP = ""; } if($ordre) { $insORDER = "ORDER BY $ordre"; } else { $insORDER = ""; } if($limit) { $insLIMIT = "LIMIT 0,$limit"; } else { $insLIMIT = ""; } if($slimit) { $insLIMIT = "LIMIT 0,$slimit"; } else { $insLIMIT = ""; } $this->sql = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT"; $req = executeQuery($this->sql); $resultat = $req->fetchAll(); $this->nbrecs = !empty($resultat) ? count($resultat) : 0; unset($resultat); } } // ======================================================================== // Méthode de la classe liste. Celle-ci exécute la requête appropriée pour écrire la liste déroulante désignée. function write($indice="",$text=0) { $champs = explode(",",$this->champs); $idctrl = $champs[0]; if($this->ctrlname) { $idctrl = $this->ctrlname; } $style = !empty($this->style) ? " class='".$this->style."'": ""; //if($this->onchange) { $onchange = " onchange=\"javascript:$this->onchange\""; } $onchange = !empty($this->onchange) ? " onchange='javascript:".$this->onchange."' ": ""; if(!empty($this->sql)) { $req = executeQuery($this->sql); $resultat = $req->fetchAll(); //var_dump(debug_backtrace()); } else { echo "Erreur ! La requête est vide !"; $this->debug(); } $this->nbrecs = !empty($resultat) ? count($resultat) : 0; $textonly = $text && $indice ? 1 : 0; if(!$textonly) { echo "<select name=\"".$idctrl."\"$this->option".$style.$onchange.">"; if(!$this->option) { if($this->texte) { echo "<option value=\"null\">$this->texte"; } } } if(!empty($resultat)) { foreach($resultat as $donnees) { if( !empty($indice) && (is_array($indice) || is_object($indice))) { echo "la variable indice ne contient pas la bonne valeur ?"; $idnum = 1 ; $thisrec = 0; } else { $indice = !empty($indice) ? intVal($indice) : 0 ; //Convertir une chaîne en un entier. $idnum = ($indice/1) ? 0 : 1; $thisrec = !empty($donnees->$champ) && is_array($donnees->$champs) && $indice == $donnees->$champs[$idnum] ? 1 : 0 ; } if (count($champs) > 2) { $c1 = !empty($champs[1]) ? ($champs[1]) : NULL; $texte = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; $n = 2; if($textonly && $thisrec) { $buffer = $texte; } while(count($champs) > $n) { $cn = !empty($champs[$n]) ? ($champs[$n]) : NULL; if($textonly && $thisrec) { $buffer .= !empty($cn) && !empty($donnees->$cn) ? $donnees->$cn : ""; $n++; } else { $texte .= !empty($cn) && !empty($donnees->$cn) ? " ". $donnees->$cn : ""; $n++; } } } else { $c1 = !empty($champs[1]) ? ($champs[1]) : NULL; if($textonly && $thisrec) { $buffer = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; } else { $texte = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; } } if($this->tronque) { $lg = $this->tronque-9; // 9 = longueur de "... / ..." if(($lg % 2) != 0) { $lg++; } if(strlen($texte) > $lg) { $texte = substr($texte,0,$lg/2) . "... / ..." . substr($texte,strlen($texte)-($lg/2),$lg/2); } if(strlen($buffer) > $lg) { $buffer = substr($buffer,0,$lg/2) . "... / ..." . substr($buffer,strlen($buffer)-($lg/2),$lg/2); } } if(!$textonly) { echo "<option value=\"".!empty($donnees->champs[0])."\""; if($thisrec) { echo " selected"; } echo ">".$texte; } } } if($textonly) { echo $buffer; } else { echo "</select>\n"; } } // ======================================================================== // 30/09/2005. Méthode retournant la liste des champs en prenant en compte les alias // de champ possibles (ex: ..., DATE_FORMAT(date, '%d/%m/%Y') AS debut, ...) // ou les champs précédés du nom de table (ex: ..., ac_Personnes.idpers, ...) function getfieldnames($champs) { $fields = explode(",", $champs); for($n=0; $n<count($fields); $n++) { if(strstr(strtolower($fields[$n]), ".")) { $nfields = explode(".", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1]; } if(strstr(strtolower($fields[$n]), " as ")) { $nfields = explode(" ", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1]; } } $rfields = $fields[0]; for($n=1; $n<count($fields); $n++) { $rfields .= ",".$fields[$n]; } return $rfields; } // ======================================================================== // 11/07/2003. Methode affichant le nombre de lignes d'un résultat, // en fait le nombre d'éléments qu'il y aura dans la liste. function nbelements() { return $this->nbrecs; } // ======================================================================== // 27/03/2004. Méthode servant à changer le nom par défaut du contrôle 'select'. // Si elle est utilisée, elle doit l'être avant la méthode write(). function changename($ctrlname) { $this->ctrlname = $ctrlname; } // ======================================================================== // 05/10/2005. Méthode destinée à définir le style à utiliser dans la liste. // Si elle est utilisée, elle doit l'être avant la méthode write(). function usestyle($style) { $this->style = $style; } // ======================================================================== // 04/07/2003. Méthode initialisant la longueur maximale des éléments de la liste. // Si elle est utilisée, elle doit l'être avant la méthode write(). function tronque($nbcar) { $this->tronque = $nbcar; } // ======================================================================== // Méthode destinée au débuggage. Sert à afficher la requête à exécuter. function display() { echo $this->sql; } // ======================================================================== // 03/07/2003. Méthode retournant la version de la classe function version() { return "version $this->version ($this->release).<br>\n" ."Released under the GNU Public License<br>\n" ."© $this->auteur.\n"; } // ======================================================================== // 03/07/2003. Méthode retournant le numéro de la version de la classe function numversion() { return $this->version; } // ======================================================================== // 04/07/2003. Méthode testant si la version en cours est la dernière // Le paramètre passé est "intranet" ou "internet" function checkversion($lan="internet") { $msg = "The checking could'nt be done. " . "Do you are on the good network ?\n"; if($lan == "internet") { $url = $this->internet; } if($lan == "intranet") { $url = $this->intranet; } $url .= "dev/cliste/lastver.liste.txt"; if(!@$hf = fopen($url,"r")) { echo "$msg<br>\n"; exit; } $version = fgets($hf,100); $version = chop($version); $release = fgets($hf,100); $release = chop($release); $feature = fgets($hf,1000); $feature = chop($feature); $download = fgets($hf,1000); $download = chop($download); fclose($hf); if($version == $this->version) { echo "No new version since the $this->version (this one).\n"; } else { echo "<font color=\"#FF0000\"><b>New</b></font> : "; echo "version $version ($release).<br>\n"; echo "Features : $feature<br>\n"; echo "Download from : $download\n"; } } // ======================================================================== // 15/07/2003. Méthode affichant la documentation de la classe function showdoc($lan="internet") { if($lan == "internet") { $url = $this->internet; } if($lan == "intranet") { $url = $this->intranet; } $url .= "index.php?p=cliste.doc.php"; $style = "style='text-decoration: none'"; echo "<a href='$url' $style>French documentation</a>"; } // ======================================================================== // 05/10/2005. Méthode pour l'affichage des variables. function debug() { $style = "font-family:verdana; font-size:9pt; border-style:solid; " . "border-color:red; border-width:1px"; if($this->ctrlname) { $ctrlname = $this->crtlname; } else { $ch = explode(",",$this->champs); $ctrlname = $ch[0]; } echo "<table border=\"0\" cellpadding=\"2\" bgcolor=\"#FFFFA0\"><tr>"; echo "<td style=\"$style\">"; echo "<b>CLASS liste:</b><br>"; echo "Version: " .$this->version."<br>"; echo "Release: " .$this->release."<br>"; echo "Author: " .$this->auteur."<br>"; echo "URL-intranet: " .$this->intranet."<br>"; echo "URL-internet: " .$this->internet."<br>"; echo "<b>ATTRIBUTES:</b><br>"; echo "champs: " .$this->champs."<br>"; echo "texte: " .$this->texte."<br>"; echo "ctrlname: " .$ctrlname."<br>"; echo "tronque: " .$this->tronque."<br>"; echo "option: " .$this->option."<br>"; echo "style: " .$this->style."<br>"; echo "onchange: " .$this->onchange."<br>"; echo "limit: " .$this->limit."<br>"; echo "nbrecs: " .$this->nbrecs."<br>"; echo "objet: " .$this->obj."<br>"; echo "sql: " .$this->sql."<br>"; echo "</td></tr></table>"; } } ?>
Excuse moi j'avais enlevé plein de commentaire de ce fait l'erreur ne correspondait plus à la bonne ligne.
Warning: Undefined variable $champ in C:\wamp64\www\gestion\libs\class.liste.php on line 110
<?php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); class liste { // Attributs, propriétés de la classe //public $version = "1.13"; //public $release = "15 avr 2016"; //public $auteur = "Pierre FAUQUE"; //public $intranet = ""; //public $internet = "http://www.fauque.fr/"; public $sql = ""; public $champs = ""; public $texte = ""; public $ctrlname = ""; public $style = ""; public $onchange = ""; public $tronque = 0; public $option = ""; public $slimit = ""; public $limit = ""; public $nbrecs = 0; private $obj = ""; // ======================================================================== // Constructeur de la classe liste. // Lecture de la définition de la liste, initialisation des propriétés function __construct($objet, $ctrlname="", $style="", $limit=0) { require("$objet.def.php"); $this->champs = $this->getfieldnames($champs); $this->onchange = !empty($onchange) ? $onchange : ''; $this->texte = $texte; $this->ctrlname = $ctrlname; $this->style = $style; $this->obj = $objet; if($objet != "null") { $slimit = $limit; // sauvegarde du paramètre / fichier .def if($limit) { $this->limit = $limit; } if(!empty($lignes)) { $this->texte = ""; $this->option = " multiple size=\"$lignes\""; } if(!empty($where)) { $insWHERE = "WHERE $where"; } else { $insWHERE = ""; } if(!empty($group)) { $insGROUP = "GROUP BY $group"; } else { $insGROUP = ""; } if($ordre) { $insORDER = "ORDER BY $ordre"; } else { $insORDER = ""; } if($limit) { $insLIMIT = "LIMIT 0,$limit"; } else { $insLIMIT = ""; } if($slimit) { $insLIMIT = "LIMIT 0,$slimit"; } else { $insLIMIT = ""; } $this->sql = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT"; $req = executeQuery($this->sql); $resultat = $req->fetchAll(); $this->nbrecs = !empty($resultat) ? count($resultat) : 0; unset($resultat); } } // ======================================================================== // Méthode de la classe liste. Celle-ci exécute la requête appropriée pour écrire la liste déroulante désignée. function write($indice="",$text=0) { $champs = explode(",",$this->champs); $idctrl = $champs[0]; if($this->ctrlname) { $idctrl = $this->ctrlname; } $style = !empty($this->style) ? " class='".$this->style."'": ""; //if($this->onchange) { $onchange = " onchange=\"javascript:$this->onchange\""; } $onchange = !empty($this->onchange) ? " onchange='javascript:".$this->onchange."' ": ""; if(!empty($this->sql)) { $req = executeQuery($this->sql); $resultat = $req->fetchAll(); //var_dump(debug_backtrace()); } else { echo "Erreur ! La requête est vide !"; $this->debug(); } $this->nbrecs = !empty($resultat) ? count($resultat) : 0; $textonly = $text && $indice ? 1 : 0; if(!$textonly) { echo "<select name=\"".$idctrl."\"$this->option".$style.$onchange.">"; if(!$this->option) { if($this->texte) { echo "<option value=\"null\">$this->texte"; } } } if(!empty($resultat)) { foreach($resultat as $donnees) { if( !empty($indice) && (is_array($indice) || is_object($indice))) { echo "la variable indice ne contient pas la bonne valeur ?"; $idnum = 1 ; $thisrec = 0; } else { $indice = !empty($indice) ? intVal($indice) : 0 ; //Convertir une chaîne en un entier. $idnum = ($indice/1) ? 0 : 1; var_dump($indice); $thisrec = !empty($donnees->$champ) && is_array($donnees->$champs) && $indice == $donnees->$champs[$idnum] ? 1 : 0 ; } if (count($champs) > 2) { $c1 = !empty($champs[1]) ? ($champs[1]) : NULL; $texte = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; $n = 2; if($textonly && $thisrec) { $buffer = $texte; } while(count($champs) > $n) { $cn = !empty($champs[$n]) ? ($champs[$n]) : NULL; if($textonly && $thisrec) { $buffer .= !empty($cn) && !empty($donnees->$cn) ? $donnees->$cn : ""; $n++; } else { $texte .= !empty($cn) && !empty($donnees->$cn) ? " ". $donnees->$cn : ""; $n++; } } } else { $c1 = !empty($champs[1]) ? ($champs[1]) : NULL; if($textonly && $thisrec) { $buffer = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; } else { $texte = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; } } if($this->tronque) { $lg = $this->tronque-9; // 9 = longueur de "... / ..." if(($lg % 2) != 0) { $lg++; } if(strlen($texte) > $lg) { $texte = substr($texte,0,$lg/2) . "... / ..." . substr($texte,strlen($texte)-($lg/2),$lg/2); } if(strlen($buffer) > $lg) { $buffer = substr($buffer,0,$lg/2) . "... / ..." . substr($buffer,strlen($buffer)-($lg/2),$lg/2); } } if(!$textonly) { echo "<option value=\"".!empty($donnees->champs[0])."\""; if($thisrec) { echo " selected"; } echo ">".$texte; } } } if($textonly) { echo $buffer; } else { echo "</select>\n"; } } // ======================================================================== // 30/09/2005. Méthode retournant la liste des champs en prenant en compte les alias // de champ possibles (ex: ..., DATE_FORMAT(date, '%d/%m/%Y') AS debut, ...) // ou les champs précédés du nom de table (ex: ..., ac_Personnes.idpers, ...) function getfieldnames($champs) { $fields = explode(",", $champs); for($n=0; $n<count($fields); $n++) { if(strstr(strtolower($fields[$n]), ".")) { $nfields = explode(".", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1]; } if(strstr(strtolower($fields[$n]), " as ")) { $nfields = explode(" ", $fields[$n]); $fields[$n] = $nfields[count($nfields)-1]; } } $rfields = $fields[0]; for($n=1; $n<count($fields); $n++) { $rfields .= ",".$fields[$n]; } return $rfields; } // ======================================================================== // 11/07/2003. Methode affichant le nombre de lignes d'un résultat, // en fait le nombre d'éléments qu'il y aura dans la liste. function nbelements() { return $this->nbrecs; } // ======================================================================== // 27/03/2004. Méthode servant à changer le nom par défaut du contrôle 'select'. // Si elle est utilisée, elle doit l'être avant la méthode write(). function changename($ctrlname) { $this->ctrlname = $ctrlname; } // ======================================================================== // 05/10/2005. Méthode destinée à définir le style à utiliser dans la liste. // Si elle est utilisée, elle doit l'être avant la méthode write(). function usestyle($style) { $this->style = $style; } // ======================================================================== // 04/07/2003. Méthode initialisant la longueur maximale des éléments de la liste. // Si elle est utilisée, elle doit l'être avant la méthode write(). function tronque($nbcar) { $this->tronque = $nbcar; } // ======================================================================== // Méthode destinée au débuggage. Sert à afficher la requête à exécuter. function display() { echo $this->sql; } // ======================================================================== // 03/07/2003. Méthode retournant la version de la classe function version() { return "version $this->version ($this->release).<br>\n" ."Released under the GNU Public License<br>\n" ."© $this->auteur.\n"; } // ======================================================================== // 03/07/2003. Méthode retournant le numéro de la version de la classe function numversion() { return $this->version; } // ======================================================================== // 04/07/2003. Méthode testant si la version en cours est la dernière // Le paramètre passé est "intranet" ou "internet" function checkversion($lan="internet") { $msg = "The checking could'nt be done. " . "Do you are on the good network ?\n"; if($lan == "internet") { $url = $this->internet; } if($lan == "intranet") { $url = $this->intranet; } $url .= "dev/cliste/lastver.liste.txt"; if(!@$hf = fopen($url,"r")) { echo "$msg<br>\n"; exit; } $version = fgets($hf,100); $version = chop($version); $release = fgets($hf,100); $release = chop($release); $feature = fgets($hf,1000); $feature = chop($feature); $download = fgets($hf,1000); $download = chop($download); fclose($hf); if($version == $this->version) { echo "No new version since the $this->version (this one).\n"; } else { echo "<font color=\"#FF0000\"><b>New</b></font> : "; echo "version $version ($release).<br>\n"; echo "Features : $feature<br>\n"; echo "Download from : $download\n"; } } // ======================================================================== // 15/07/2003. Méthode affichant la documentation de la classe function showdoc($lan="internet") { if($lan == "internet") { $url = $this->internet; } if($lan == "intranet") { $url = $this->intranet; } $url .= "index.php?p=cliste.doc.php"; $style = "style='text-decoration: none'"; echo "<a href='$url' $style>French documentation</a>"; } // ======================================================================== // 05/10/2005. Méthode pour l'affichage des variables. function debug() { $style = "font-family:verdana; font-size:9pt; border-style:solid; " . "border-color:red; border-width:1px"; if($this->ctrlname) { $ctrlname = $this->crtlname; } else { $ch = explode(",",$this->champs); $ctrlname = $ch[0]; } echo "<table border=\"0\" cellpadding=\"2\" bgcolor=\"#FFFFA0\"><tr>"; echo "<td style=\"$style\">"; echo "<b>CLASS liste:</b><br>"; echo "Version: " .$this->version."<br>"; echo "Release: " .$this->release."<br>"; echo "Author: " .$this->auteur."<br>"; echo "URL-intranet: " .$this->intranet."<br>"; echo "URL-internet: " .$this->internet."<br>"; echo "<b>ATTRIBUTES:</b><br>"; echo "champs: " .$this->champs."<br>"; echo "texte: " .$this->texte."<br>"; echo "ctrlname: " .$ctrlname."<br>"; echo "tronque: " .$this->tronque."<br>"; echo "option: " .$this->option."<br>"; echo "style: " .$this->style."<br>"; echo "onchange: " .$this->onchange."<br>"; echo "limit: " .$this->limit."<br>"; echo "nbrecs: " .$this->nbrecs."<br>"; echo "objet: " .$this->obj."<br>"; echo "sql: " .$this->sql."<br>"; echo "</td></tr></table>"; } } ?>