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

yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
10 mars 2023 à 21:18

bonjour,

peux-tu partager du texte, et pas des images?

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

Excuse moi mais c'est sur ma liste déroulante donc je ne peux pas faire une sélection pour du texte! ou alors je ne sais pas comment?

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
Modifié le 11 mars 2023 à 10:55

Tu peux sans doute récupérer du texte dans la source HTML de ta page.

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

Bonjiour j'ai changé l'emplacement du var_dump

C:\wamp64\www\gestion\libs\class.liste.php:258:int 14

C:\wamp64\www\gestion\libs\class.liste.php:258:string 'idaut,nom,prenom' (length=16)

par contre je ne comprends pas pourquoi vous ne souhaitez pas de capture image?

Je vous remercie.

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
11 mars 2023 à 11:00

le var_dump te permet-il de déterminer ce qui ne fonctionne pas?

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

Bonjour, non en fait le var_dump ne m'en dis pas plus malheureusement. Je pense que c'est la ligne 38 qui pose problème. J'ai modifié cette ligne et voilà ce que cela donne!

$thisrec = !empty($donnees->$champs) && is_array($donnees->$champs) && $indice == $donnees->$champs[$idnum] ? 1 : 0 ;
Notice: Array to string conversion in C:\wamp64\www\gestion\libs\class.liste.php on line 38
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
11 mars 2023 à 17:09

Que contenait la ligne 38?

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
11 mars 2023 à 17:49

Merci pour ton aide.

$thisrec = !empty($donnees->$champs) && is_array($donnees->$champs) && $indice == $donnees->$champs[$idnum] ? 1 : 0 ;
var_dump($indice, $donnees->$champs);
C:\wamp64\www\gestion\libs\class.liste.php:226:int 14

C:\wamp64\www\gestion\libs\class.liste.php:226:null
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
11 mars 2023 à 17:57

Je ne vois pas ce qui a changé dans la ligne 38.

Tu as le message d'avertissement, "notice", suivi de l'affichage par le var_dump()?

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

Excuse moi je ne comprends pas ? que veux tu que je fasses?

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
11 mars 2023 à 19:45

Tu as modifié la ligne 38.  Tu as partagé en #6 la nouvelle instruction.

En #7, je t'ai demandé ce que cette ligne contenait avant le changement.

En #8, tu partages la même chose qu'en #6, donc je me demande ce qui as changé.

Je me demande aussi si le message d'avertissement "Notice..." précède l'affichage que tu montres en #8.  Comme tu montres chaque fois des petits morceaux, pas évident de se faire une vue d'ensemble.

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

Oui en effet j'ai été brouillon, excuse moi! Je recommence du départ. Ci dessous la ligne comme le montre la fonction du début du post que je suppose qui pose problème.

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

avec l'affichage du var_dump

var_dump($indice, $this->champs);

C:\wamp64\www\gestion\libs\class.liste.php:258:int 14

C:\wamp64\www\gestion\libs\class.liste.php:258:string 'idaut,nom,prenom' (length=16)

Par contre j'ai aucune erreur ni notice ni aucune autre.

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
11 mars 2023 à 21:12

En réalité, quel est le problème?

Ton programme fait autre chose que ce que tu souhaites?

Que fait-il?  Que souhaites-tu?

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
11 mars 2023 à 21:14

Et donc, l'avertissement "Notice ...", il vient d'où, il est parti où?

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

Alors en fait j'ai des listes déroulantes qui n'affichent pas les valeurs souhaitées. Comme je l'ai précisé au début du post cette fonction sert à récupérer les données appropriée pour écrire les listes déroulantes.

L'avertissement 'Notice' est venue lorsque j'ai modifié ma ligne qui je pense pose problème. Au lieu d'écrire "$this" je l'ai remplacé par '$donnees' et oui j'essaie de trouver le problème mais sans trop savoir.

Au lieu de "$this->champs" j'ai essayé "$donnees->$champs" dans ce cas il y a une erreur 'Notice'
$thisrec = !empty($donnees->$champs) && is_array($donnees->$champs) && $indice == $donnees->$champs[$idnum] ? 1 : 0 ;

Avec l'erreur 'Notice' et l'affichage du var_dump

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

C:\wamp64\www\gestion\libs\class.liste.php:39:int 14

C:\wamp64\www\gestion\libs\class.liste.php:39:null

Merci j'espère que c'est assez explicite pour que tu puisses me sortir de ce mauvais pas.

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
12 mars 2023 à 07:59

Tu as écrit une nouvelle fonction pour récupérer les données appropriée pour écrire les listes déroulantes?

Que retourne cette fonction?

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

Bonjour non je n'ai pas écrit de nouvelle fonction! qu'est ce qui te fait dire cela?

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
12 mars 2023 à 08:43

Comme tu n'expliques rien, j'essaie de deviner pourquoi tu modifies ton code et ce qui a causé l'apparition de ces  erreurs.

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

Ha zut je suis désolé je pensais avoir bien expliqué sur mon post 15 C'est juste une modif sur une ligne

"L'avertissement 'Notice' est venue lorsque j'ai modifié ma ligne qui je pense pose problème. Au lieu d'écrire "$this" je l'ai remplacé par '$donnees' et oui j'essaie de trouver le problème mais sans trop savoir"

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
12 mars 2023 à 11:46

Et tout fonctionne bien si tu ne modifies pas cette ligne?

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

hé non sinon j'aurai rien essayé de modifier, si tout fonctionnerai bien!

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
12 mars 2023 à 12:05

Qu'est ce qui ne fonctionne pas?

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

 je cherche à récupérer les données appropriée pour écrire les listes déroulantes.

Ceux qui ne fonctionne pas c'est que je ne récupére pas les valeurs souhaité de ma liste déroulante en l’occurrence dans cette exemple le nom de l'auteur idaut 14.

Revoir ma fonction au début de mes messages.

voilà ce que ça donne.

var_dump($indice, $this->champs);
C:\wamp64\www\gestion\libs\class.liste.php:258:int 14

C:\wamp64\www\gestion\libs\class.liste.php:258:string 'idaut,nom,prenom' (length=16)

j'ai fait également un var_dump(debug_backtrace()) et tout semble ok

C:\wamp64\www\gestion\libs\class.liste.php:198:
array (size=1)
  0 => 
    array (size=7)
      'file' => string 'C:\wamp64\www\gestion\sais_oeuvre.php' (length=37)
      'line' => int 290
      'function' => string 'write' (length=5)
      'class' => string 'liste' (length=5)
      'object' => 
        object(liste)[8]
          public 'sql' => string 'SELECT idaut,nom,prenom FROM cdc_auteurs   ORDER BY nom,prenom ' (length=63)
          public 'champs' => string 'idaut,nom,prenom' (length=16)
          public 'texte' => string '-- Auteurs --' (length=13)
          public 'ctrlname' => string '' (length=0)
          public 'style' => string '' (length=0)
          public 'onchange' => string '' (length=0)
          public 'tronque' => int 0
          public 'option' => string '' (length=0)
          public 'slimit' => string '' (length=0)
          public 'limit' => string '' (length=0)
          public 'nbrecs' => int 204
          private 'objet' => string 'libs/auteurs' (length=12)
      'type' => string '->' (length=2)
      'args' => 
        array (size=1)
          0 => string '14' (length=2)
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
13 mars 2023 à 07:31

Bonjour,

Je vous envoie une capture uniquement pour vous faire voir ce qu'il ne va pas. Vous allez me dire encore une image mais c'est simplement pour vous montrer le soucis. En effet sur mon autre PC tout fonctionne très bien parce que j'ai pas la même version de PHP. Vous voyez le premier input c'est l'oeuvre et le second c'est l'auteur.

Voici le var_dump(debug_backtrace()); et var_dump($indice, $this->champs); avec mon problème

sur le var_dump on voit apparaitre qu'il y a le lien relatif  je suppose que c'est cela qui pose problème car sur la première capture il n'apparait pas.

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

C:\wamp64\www\gestion\libs\class.liste.php:258:string 'idaut,nom,prenom' (length=16)

Peut-être avez-vous une idée de ce problème?

C'est gentil à vous merci.

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
13 mars 2023 à 11:37

Je ne vois pas de lien relatif.

Si l'image est prise dans un navigateur, il est préférable de comparer et partager la source HTML de la page.

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

Bonjour une dernière chose après je démissionne...

Lorsque je fait mon var_dump(debug_backtrace());

        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();
		}

résultat du var_dump(debug_backtrace());

C:\wamp64\www\gestion\libs\class.liste.php:198:
array (size=1)
  0 => 
    array (size=7)
      'file' => string 'C:\wamp64\www\gestion\sais_oeuvre.php' (length=37)
      'line' => int 290
      'function' => string 'write' (length=5)
      'class' => string 'liste' (length=5)
      'object' => 
        object(liste)[8]
          public 'sql' => string 'SELECT idaut,nom,prenom FROM cdc_auteurs   ORDER BY nom,prenom ' (length=63)
          public 'champs' => string 'idaut,nom,prenom' (length=16)
          public 'texte' => string '-- Auteurs --' (length=13)
          public 'ctrlname' => string '' (length=0)
          public 'style' => string '' (length=0)
          public 'onchange' => string '' (length=0)
          public 'tronque' => int 0
          public 'option' => string '' (length=0)
          public 'slimit' => string '' (length=0)
          public 'limit' => string '' (length=0)
          public 'nbrecs' => int 204
          private 'objet' => string 'libs/auteurs' (length=12)
      'type' => string '->' (length=2)
      'args' => 
        array (size=1)
          0 => string '14' (length=2)

Pourquoi il y a ce lien au début également ce n'est pas normal non ??

C:\wamp64\www\gestion\libs\class.liste.php:198:

Merci.

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
13 mars 2023 à 18:49

Le "lien", n'est-ce pas simplement le nom du fichier PHP, suivi du numéro de la ligne où se trouve le var_dump()?

Je ne pense pas que cela puisse être la source de ton problème.  A moins que tu utilises var_dump() en production, et pas pour diagnostiquer les problèmes.

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

oui mais si on retourne à l'image que j'ai posté dans le post24 c'est un var_dump(debug_backtrace()); que j'ai fait et ce lien n'existe pas?? c'est pour cela que je me pose cette question.

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
13 mars 2023 à 22:24

Tes deux sites sont configurés de la même façon?  Tu n'as pas une option "test" sur l'un et "prod sur l'autre?

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
14 mars 2023 à 09:19

var_dump() se comporte différemment sur tes deux sites.

Tu peux vérifier cela en faisant une page qui fait uniquement un var_dump.

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

Non en fait je travaille uniquement sur wampserver.

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

Bonjour c'est gentil d'essayé de m'aider dans ce laborieux problème. Non le site sur mes 2 Pcs ont exactement les mêmes fichiers car j'ai simplement copié collé mes pages .php sur les 2 Pcs à l'identique sauf que celui qui ne fonctionne pas à la version PHP 7.4.33 et l'autre qui n'a aucun problème a le version PHP 5.3.5.

Par contre il y en a 1 où je travaille avec Komodo.edit 6.1 et l'autre j'ouvre mon site avec Notepad++

Et également lorsque je modifie 1 seule ligne de code sur mon fichier class.liste.php les 2 PCs ont le même soucis, c'est cette ligne ci-dessous. J'essaie de te donner le plus d'information possible au cas où....

Sur PC version PHP 5 qui fonctionne
if($indice == $donnees->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }

Sur PC version PHP 7
$thisrec = !empty($this->champs) && is_array($this->champs) && $indice == $this->champs[$idnum] ? 1 : 0 ;

Merci.

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

j'ai fait un var_dump sur une page uniquement ci-dessous capture sur le PC qui va bien

et ici l'autre

Erreur ! La variable sql est vide !!

C:\wamp64\www\gestion\libs\init.php:61:
array (size=2)
  0 => 
    array (size=4)
      'file' => string 'C:\wamp64\www\gestion\libs\init.php' (length=35)
      'line' => int 98
      'function' => string 'executeQuery' (length=12)
      'args' => 
        array (size=2)
          0 => string 'SELECT * FROM cdc_configsite' (length=28)
          1 => null
  1 => 
    array (size=4)
      'file' => string 'C:\wamp64\www\gestion\index2.php' (length=32)
      'line' => int 3
      'args' => 
        array (size=1)
          0 => string 'C:\wamp64\www\gestion\libs\init.php' (length=35)
      'function' => string 'require' (length=7)
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
14 mars 2023 à 19:48

Si je comprends bien, tu utilises le var_dump() non pas pour analyser ce qui se passe en cas de souci, mais pour faire fonctionner ton site.

Est-ce correct?

Je suggère que tu fasses une page php de test, contenant ceci:

<?php
echo 'xdebug.overload_var_dump = ' . ini_get('xdebug.overload_var_dump') . "\n";
ini_set("xdebug.overload_var_dump",1);
echo 'xdebug.overload_var_dump = ' . ini_get('xdebug.overload_var_dump') . "\n";
$x=123;
var_dump($x);
?>
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
14 mars 2023 à 20:56

Bonjour Non j'utilise bien le var_dump uniquement pour voir ce qui se passe. D’ailleurs sur mon PC où il y a le site qui fonctionne je n'ai aucun var_dump. Voici ce que tu m'as demandé de faire.

xdebug.overload_var_dump = This setting has been removed, see the upgrading guide at https://xdebug.org/docs/upgrade_guide#removed-xdebug.overload_var_dump xdebug.overload_var_dump = This setting has been removed, see the upgrading guide at https://xdebug.org/docs/upgrade_guide#removed-xdebug.overload_var_dump

C:\wamp64\www\gestion\libs\class.liste.php:6:int 123

 Je te remercie.

0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
14 mars 2023 à 21:37

Si tu utilises le var_dump() uniquement pour voir ce qui se passe, il n'y a absolument aucune raison de s'inquiéter de la présence de la ligne supplémentaire avec le nom du fichier et le numéro de ligne.

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

ok je n'y avait pas pensé, je me suis axé là dessus alors qu'après réflexion tu as raison. Alors je vais continuer à chercher la faille sinon je ne pourrai pas mettre mon site en prod.

Merci

0