Récupération des données

Résolu
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   -  
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour à vous tous, Après avoir cherché pas mal de temps et essayé pas mal de trucs je suis désespéré. En fait je cherche à récupérer les données appropriée pour écrire les listes déroulantes.

Je vous remercie très sincèrement pour votre aide.

Voici la fonction de la classe liste.

    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) {
                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($this->champs) && is_array($this->champs) && $indice == $this->champs[$idnum] ? 1 : 0 ;
                    var_dump($indice, $this->champs);
                }
                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"; }
    }

voici la capture concernant le retour du var_dump($indice, $this->champs)

29 réponses

LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 

Bonjour je me permet de revenir une fois vers toi, toujours pour le même soucis. Peux tu me dire comment résoudre cette erreur s'il te plait, peut-être que cela va m'aider à solutionner mon problème. je te remercie.

Notice: Array to string conversion in C:

Je crois comprendre que j’essaye d'afficher une chaine de caractère alors que c'est un tableau ?

Merci

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

Il s'agit, en effet, d'un avertissement, qui te prévient que tu essaies de convertir un tableau en une chaîne de caractères.

0
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 

Peux tu me donner un conseil pour pouvoir résoudre se problème s'il te plait.

Merci

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

Moi je commencerais par faire des var_dump() des variables impliquées dans l'instruction qui cause cet avertissement.

0
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 

Bonjour petit bout de code où j'ai fait les var_dump sur mes 3 variables concernées.

                if (!empty($indice) && (is_array($indice)  || is_object($indice))) {
                    echo "la variable indice ne contient pas la bonne valeur ?";
                    $idnum = 1;
                    $thisrec = 0;
                } else {
                    $idnum = ($indice/1) ? 0 : 1;
                    var_dump($indice);
                    var_dump($champs);
                    var_dump($idnum);
                    $thisrec = !empty($donnees->$champs) && is_array($donnees->$champs) && $indice == $donnees->$champs[$idnum] ? 1 : 0 ;
                }

Voici le retour.

Notice: Array to string conversion in C:\wamp64\www\gestion\libs\class.liste.php on line 10

C:\wamp64\www\gestion\libs\class.liste.php:7:string '14' (length=2)

C:\wamp64\www\gestion\libs\class.liste.php:8:
array (size=3)
  0 => string 'idaut' (length=5)
  1 => string 'nom' (length=3)
  2 => string 'prenom' (length=6)

C:\wamp64\www\gestion\libs\class.liste.php:9:int 0
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 

@yg_be  au cas où, pour t'aider à lui répondre .. voici  ce que je lui ai déjà indiqué à plusieurs reprises

 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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 

@jordane45 Il reste $donnees->$champs, je peine à comprendre ce que cela faisait dans la version antérieure de php.

0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

justement...   c'est bien là son souci... ( les accolades/parenthèses indiquant a quel "ensemble" s'applique l'array )

$foo->$bar['baz']	

//en php 5
$foo->{$bar['baz']}	


//en php 8
($foo->$bar)['baz']
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 

Oui, cela peut résoudre $donnees->$champs[$idnum].

Mais en ce qui concerne is_array($donnees->$champs), je peine à comprendre ce que cela faisait dans la version antérieure de php.

0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

Ça c'est un ajout qui a été fait pour PHP 8

0
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 

Bonjour, j'ai bien pris connaissance du lien en français en ce qui concerne "$donnees->$champs[$idnum]" à propos des accolades /parenthése mais je n'ai pas réussi à résoudre mon problème.

Expression 	Interprétation PHP 5 	Interprétation PHP 7
$$foo['bar']['baz'] 	${$foo['bar']['baz']} 	($$foo)['bar']['baz']
$foo->$bar['baz'] 	$foo->{$bar['baz']} 	($foo->$bar)['baz']
$foo->$bar['baz']() 	$foo->{$bar['baz']}() 	($foo->$bar)['baz']()
Foo::$bar['baz']() 	Foo::{$bar['baz']}() 	(Foo::$bar)['baz']()

non is_array($donnees->$champs) n'était pas dans la version antérieure...

$thisrec = !empty($donnees->$champs) && is_array($donnees->$champs) && $indice == ($donnees->$champs)[$idnum] ? 1 : 0 ;
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

montre alors le code de la version antérieure.

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

Je suis surpris: tu as mis les parenthèses au mauvais endroit.  que penses-tu de ceci:

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

0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

Sûrement mieux avec des accolades

0

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

Posez votre question
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 

voici le code de la version antérieure qui fonctionne.

if($indice/1) { $idnum = 0; } else { $idnum = 1; }
if($indice == $donnees->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }

cela me renvoie une erreur

Parse error: syntax error, unexpected '(', expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in C:\wamp64\www\gestion\libs\class.liste.php on line 233
                if (!empty($indice) && (is_array($indice)  || is_object($indice))) {
                    echo "la variable indice ne contient pas la bonne valeur ?";
                    $idnum = 1;
                    $thisrec = 0;
                } else {
                    $idnum = ($indice/1) ? 0 : 1;
                    var_dump($indice);
                    var_dump($champs);
                    var_dump($idnum);
                    $thisrec = !empty($donnees->$champs) && is_array($donnees->$champs) && $indice == $donnees->($champs[$idnum]) ? 1 : 0 ;
                }

je te remercie

0
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 

toujours pas de résultat, même avec les accolades.

if (!empty($indice) && (is_array($indice)  || is_object($indice))) {
echo "la variable indice ne contient pas la bonne valeur ?";
$idnum = 1;
$thisrec = 0;
} else {
$idnum = ($indice/1) ? 0 : 1;
var_dump($indice);
var_dump($champs);
var_dump($idnum);
$thisrec = !empty($donnees->$champs) 
&& is_array($donnees->$champs) 
&& $indice == 
$donnees->{$champs[$idnum]} ? 1 : 0 ;
                }

toujours la même erreur concerne la ligne 10

Notice: Array to string conversion in C:
0
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 

Je viens peut-être de trouver la solution je fais des vérification et vous redis...

0
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 

Je suis content je vous remercie je n'aurai jamais trouvé à propos des accolades. MERCI

au lieu de

$thisrec = !empty($donnees->$champs) && is_array($donnees->$champs) && $indice == $donnees->{$champs[$idnum]} ? 1 : 0 ;

c'est cela

$thisrec = $indice == $donnees->{$champs[$idnum]} ? 1 : 0 ;
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

peux-tu alors marquer la discussion comme résolue?

0
LaChaux78 Messages postés 583 Date d'inscription   Statut Membre Dernière intervention   32
 

C'est fait encore Merci

0