Convertir un tableau en chaîne de caractères en php

Résolu/Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 17 févr. 2023 à 20:01
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 20 févr. 2023 à 09:27

Bonjour, je viens vous demander de l'aide concernant une erreur que je n'arrive pas à résoudre. Cette erreur concerne 4 lignes différentes. Voici la page correspondantes aux erreurs. Je vous remercie. Cordialement.

Warning: Array to string conversion in C:\wamp64\www\gestion\libs\class.liste.php on line 105
Warning: Array to string conversion in C:\wamp64\www\gestion\libs\class.liste.php on line 107
Warning: Array to string conversion in C:\wamp64\www\gestion\libs\class.liste.php on line 111
Warning: Array to string conversion in C:\wamp64\www\gestion\libs\class.liste.php on line 124
<?php
//error_reporting(E_ALL ^ E_NOTICE);
//error_reporting(E_ALL);
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."'": "";
        $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();
		}
        
        //var_dump(count($resultat));
        
        $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; }
                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->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 "requete: "        .$this->sql."<br>";
        echo "</td></tr></table>";
    }
}
?>
A voir également:

9 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 17 févr. 2023 à 20:24

Bonjour

Fais donc des var_dump de tes variables

Par exemple, pour la ligne 105, tu peux regarder ce que contient

var_dump($idnum);
var_dump( $donnees->$champs[$idnum]);

pour la ligne 107 tu peux regarder ce que contient

var_dump($donnees->$champs[1]);

.Vu le message d'erreur,  $donnees->$champs contient lui même des array ...  c'est donc normal que tu aies ces messages d'erreur..


0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
17 févr. 2023 à 21:06
var_dump($idnum);
C:\wamp64\www\gestion\libs\class.liste.php:106:int 1

var_dump($donnees->$champs[$idnum]);
C:\wamp64\www\gestion\libs\class.liste.php:107:null

var_dump($donnees->$champs[1]);
C:\wamp64\www\gestion\libs\class.liste.php:110:null

var_dump($donnees->$champs[0]);
C:\wamp64\www\gestion\libs\class.liste.php:128:null


Bonjour voici les retours des var_dump. Comment résoudre cela s'il vous plait. Je vous remercie.

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

Applique le contenu du lien suivant plus particulièrement la partie concernant la récupération propre des variables avant de les utiliser

https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

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

Bonjour, malheureusement je n'arrive pas à résoudre mes erreurs. En ce qui concerne la récupération des variables avant de les utiliser il y a pas de problème, je l'ai utilisé pour d'autres pages mais pour les variables concernées j'ai essayé plusieurs solutions mais sans résultat. Voici une capture du résultat et la page concernée. Je vous remercie de votre aide.

<?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; }
        //if($this->style) { $style = " class=\"$this->style\""; }
        $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();
		}
        
        //var_dump(count($resultat));
        
        //$this->nbrecs = mysql_num_rows($resultat);
        $this->nbrecs = !empty($resultat) ? count($resultat) : 0;
        //if($text && $indice) { $textonly = 1; } else { $textonly = 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; }
                $idnum = $indice/1 ? 0 : 1;
var_dump($idnum);                
                //if($indice == $donnees->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }
                $thisrec = $indice ? 1 : 0;
                if (count($champs) > 2) {
                    $texte = !empty($donnees->$champs[1]); $n = 2;
var_dump($champs[1]);
                    if($textonly && $thisrec) { $buffer = $texte; }
                    while(count($champs) > $n) {
                        if($textonly && $thisrec)   { $buffer .= " ".!empty($donnees->$champs[$n]); $n++; 
                        } else                      { $texte  .= " ".!empty($donnees->$champs[$n]); $n++; }
                    } 
                } else {
                    if($textonly && $thisrec)   { $buffer = !empty($donnees->$champs[1]); }
                    else                        { $texte  = !empty($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=\"".!empty($donnees->$champs[0])."\"";
var_dump($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 "requete: "        .$this->sql."<br>";
        echo "</td></tr></table>";
    }
}
?>
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
18 févr. 2023 à 19:59

Tu n'as pas bien écrit la répcupération propre des variables.... tu n'as utilisé qu'un tiers de la ligne de code qu'il est nécéssaire d'écrire....

Voici un exemple à analyser pour pouvoir l'appliquer pour la suite

//$mavariable = macondition ? valeur_si_condition_vraie : valeur_si_condition_fausse
  $texte = !empty($donnees->$champs[1]) ? $donnees->$champs[1] : ""; 

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

oui je l'avais bien écrite comme ça également mais j'avais toujours le même message.

$texte = !empty($donnees->$champs[1]) ? $donnees->$champs[1] : ""; $n = 2; //ligne 114
var_dump($champs[1]); // ligne 115

( ! ) Warning: Array to string conversion in C:\wamp64\www\gestion\libs\class.liste.php on line 114

C:\wamp64\www\gestion\libs\class.liste.php:115:string 'nom' (length=3)
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
18 févr. 2023 à 21:06

Je viens de voir un truc auquel je devais pas fait attention juste avant...

Tu as un dollar en trop devant le mot champs ... $donnees->$champs

Pour moi ça serait plutôt

$donnees->champs 

Fais donc un verre d'homme de ta variable $donnees et montre-nous ce qu'elle contient

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

oui je suis content je n'ai plus d'erreur mais par contre j'ai fait un var_dump de $donnees et voici ce que cela affiche dans le formulaire ???

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

Peux tu montrer le code exacte que tu as tapé pour obtenir ceci ?

Et si c'est bien juste un var_dump($donnees), tu peux voir que c'est un objet qui contient deux infos, l' ID et son LIBELLE

Après relecture de ton code, il semble que tu veuilles accéder à la propriété de l'objet $donnees en fonction d'une variable $champs

Il faut donc  écrire : ($donnees->$champ)

par contre, si tu fais un var_dump($champ)  obtiens tu un array ou juste une string ?

Si c'est juste une string, les [] ne servent à rien. 

Si c'est un array, il faut utiliser la syntaxe

$c1 = !empty($champ)[1]) ? $champ)[1] : NULL;
$text = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : "";

 Ceci devrait t'aider à convertir ton code en > php7 (du moins pour cette partie)

https://www.php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling.indirect

Décents jusqu'au chapitre : Changes to the handling of indirect variables, properties, and methods

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

Bonjour, Voici le code complet. Donc sur mes 4 formulaires seul 1 formulaire où l'affichage n'est pas correct il y a uniquement que le nom il manque le prenom. pourtant lorsque je fait un var_dump ($donnees); j'ai bien toutes les infos. voir capture. Par contre si je fait un var_dump ($champs) j'obtiens une string. Les 3 autres formulaires l'affichage est correct. Merci.

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; }
        //if($this->style) { $style = " class=\"$this->style\""; }
        $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();
		}
        
        //var_dump(count($resultat));
        
        //$this->nbrecs = mysql_num_rows($resultat);
        $this->nbrecs = !empty($resultat) ? count($resultat) : 0;
        //if($text && $indice) { $textonly = 1; } else { $textonly = 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) {
            //var_dump($donnees);
                $indice = (int)$indice; //Convertir une chaîne en un entier.
                //if($indice/1) { $idnum = 0; } else { $idnum = 1; }
                $idnum = $indice/1 ? 0 : 1;             
                //if($indice == $donnees->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }
                $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;
                    var_dump($donnees);
                    if($textonly && $thisrec) { $buffer = $texte; }
                    while(count($champs) > $n) {
                        if($textonly && $thisrec)   { $buffer .= " ".!empty($donnees->champs[$n]); $n++; 
                        } else                      { $texte  .= " ".!empty($donnees->champs[$n]); $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 : ""; }
                    //var_dump($donnees);
                }
                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])."\"";
                    //var_dump($donnees);
                    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 "requete: "        .$this->sql."<br>";
        echo "</td></tr></table>";
    }
}
?>
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
19 févr. 2023 à 15:20

Visiblement, à la ligne 23, tu es dans le cas où ta variable n'est pas un tableau... Il ne faut donc pas chercher à récupérer l'indice 1 de cet élément... Mais bien l'élément lui-même.

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

tu peux juste me donner la ligne 23 s'il te plait merci.

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
19 févr. 2023 à 19:12

123

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

Bonjour, OUF j'ai finalement trouvé à résoudre tous mes soucis d'affichage de mes formulaires enfin je veux dire nous avons....Un très grand merci pour ton aide. Tout à l'air de fonctionner correctement. Je te joins la fonction concerné. Encore merci.

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

        $champs = explode(",",$this->champs); $idctrl = $champs[0];
        if($this->ctrlname) { $idctrl = $this->ctrlname; }
        $style = !empty($this->style) ? " class='".$this->style."'": "";
        $onchange = !empty($this->onchange) ? " onchange='javascript:".$this->onchange."' ": "";
            
        if(!empty($this->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])."\"";
                    //var_dump($donnees);
                    if($thisrec) { echo " selected"; } echo ">".$texte;
                }
            }
        }
        if($textonly) { echo $buffer; } else { echo "</select>\n"; }
    }
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
20 févr. 2023 à 09:27

Bonjour, je reviens vers toi pour un tout petit dernier problème. En fait entre le nom et le prenom il n'y a pas un espace je ne vois pas comment le créé. Si tu peux jeter un œil, je te remercie. Je pense que c'est autour de les lignes 40 à 45 mais je ne suis pas sur j'ai bien tout essayer. Merci.

0