Récupération des données

Résolu/Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 10 mars 2023 à 17:40
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 17 mars 2023 à 15:43

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 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
15 mars 2023 à 19:00

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 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481
15 mars 2023 à 21:45

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 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
15 mars 2023 à 21:50

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

Merci

0
yg_be Messages postés 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481
16 mars 2023 à 09:09

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

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

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 38173 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mai 2024 4 665
16 mars 2023 à 15:12

@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 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481 > jordane45 Messages postés 38173 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mai 2024
16 mars 2023 à 17:16

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

0
jordane45 Messages postés 38173 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mai 2024 4 665 > yg_be Messages postés 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024
16 mars 2023 à 17:47

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 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481 > jordane45 Messages postés 38173 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mai 2024
16 mars 2023 à 18:08

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 38173 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mai 2024 4 665 > yg_be Messages postés 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024
16 mars 2023 à 18:59

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

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

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 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481
16 mars 2023 à 21:53

montre alors le code de la version antérieure.

0
yg_be Messages postés 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481
16 mars 2023 à 21:55

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 38173 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mai 2024 4 665 > yg_be Messages postés 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024
16 mars 2023 à 22:23

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 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
16 mars 2023 à 22:25

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 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
16 mars 2023 à 23:21

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 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
16 mars 2023 à 23:27

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

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

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 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481
17 mars 2023 à 09:00

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

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

C'est fait encore Merci

0