8722 sujets

Développement web côté serveur, CMS

Pages :
Bonsoir,

J'ai un script avec un "array_multisort" qui fonctionne très bien en local et une fois tranféré chez mon hébergeur, il me raconte sa vie :



Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in
 .../onglet_gestion_revers_per_trt.php on line 83   Warning: Invalid argument supplied for foreach() in
 .../majeurs/onglet_gestion_revers_per_trt.php on line 180   
Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in .../majeurs/onglet_gestion_revers_per_trt.php on line 187   
Warning: Invalid argument supplied for foreach() in .../majeurs/onglet_gestion_revers_per_trt.php on line 189   
Warning: Invalid argument supplied for foreach() in .../majeurs/onglet_gestion_revers_per_trt.php on line 233   
Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in .../majeurs/onglet_gestion_revers_per_trt.php on line 239



Il y a quelque chose de particulier avec ce type de traitement ?
Modifié par lodan (04 Nov 2006 - 23:19)
Bonjour.
Les messages d'erreur indiquent que la fonction ne reçoit pas correctement son parametre tableau.

Est-ce que ce tableau est une variable globale ? Parce que dans ce cas, l'hébergeur a certainement limité l'accès aux variables globales.

Il faudrait vérifier comment est traité le tableau avant d'être transmis à la fonction.
Voici le code :

require_once("../files/lire_maj_revers_lignes.php");


// Tri du tableau résultat $requete
// Obtient une liste de colonnes
foreach ($requete as $key => $row) 
{
   $exec_annee[$key]  = $row['exec_annee'];
   $exec_mois[$key] = $row['exec_mois'];
   $revers_regle_ordre[$key] = $row['revers_regle_ordre'];
}
// Tri les données
array_multisort($exec_annee, SORT_ASC, $exec_mois, SORT_ASC, $revers_regle_ordre, SORT_ASC, $requete);


Je récupère "$requete" du require_once du "lire_maj_revers_lignes.php"..

Dans cette partie de script, je fais une lecture de table.

Tous mes accès aux tables se fait de cette manière.

$requete n'est pas défini comme une variable globale.
La fonction array_multisort plante parce qu'un ou plusieurs tableaux ne sont pas valides.

$exec_annee ne doit pas être initialisé, et ne doit rien contenir.

Donc, il faut vérifier que $requete contient bien quelque-chose. Sinon, le problème est en amont.
lodan a écrit :

foreach ($requete as $key => $row) 
{
   $exec_annee[$key]  = $row['exec_annee'];
   $exec_mois[$key] = $row['exec_mois'];
   $revers_regle_ordre[$key] = $row['revers_regle_ordre'];
}



J'ai d'énormes doutes sur cette portion de code !
D'où vient $row['exec_annee'] par exemple ?
MDR !
Soit tu n'as pas compris la question, soit tu te fout de moi. Smiley ohwell
Dans un cas comme dans l'autre, relis le code et dis-moi d'où vient $row['exec_annee'] ?

A moins que ce foreach ne soit précédé de ce fameux tableau associatif ou pire, ce foreach placé dans un while (affreux), je ne vois pas comment cela est alimenté.
Il vient du tableau associatif $requete,
tout comme $row['exec_mois'] et $row['revers_regle_ordre'].

foreach ($requete as $key => $row)


C'est le résultat habituel d'une requête MySql. Il n'y a pas de while.

Qu'est-ce que je ne comprend pas ?
GeorgesM a écrit :
Qu'est-ce que je ne comprend pas ?
Je crois qu'en l'occurrence, ce n'est pas toi qui a des problèmes de compréhension. Smiley cligne
Eldebaran a écrit :
Je crois qu'en l'occurrence, ce n'est pas toi qui a des problèmes de compréhension. Smiley cligne

Au lieu de me prendre pour le demeuré de service, lisez le code svp !

foreach ($requete as $key => $row) 

{

   $exec_annee[$key]  = $row['exec_annee'];

   $exec_mois[$key] = $row['exec_mois'];

   $revers_regle_ordre[$key] = $row['revers_regle_ordre'];

}
Igor a écrit :


Merci de modérer tes propos. Ce salon n'est pas un salon php au sens traditionnel. A relire: A lire avant de poster dans ce salon !

J'ai omis le smiley après "demeuré", désolé.

Pour le reste, je veux bien admettre tout ce que tu dis concernant ce salon.
La question est :
- sous prétexte de ne pas être un vrai forum php, faut-il laisser passer tout et n'importe quoi ?

Si je pose des questions, ce n'est pas parce que je ne comprends pas, c'est juste pour faire réagir le posteur et les intervenants.

Je veux bien mettre le doigt directement sur le sujet qui pose problème, mais je ne le fais rarement. Si la personne s'implique dans son sujet, il va recevoir de ma part toute l'aide appropriée.

S'il ne le fait pas, c'est qu'il s'en fout et je ne perds pas mon temps.

Enfin, bref... pas grave ! Smiley cligne
Je te signale qu'ils sont deux sur mon dos quand même ! Smiley langue
Bison a écrit :

J'ai omis le smiley après "demeuré", désolé.


Cà arrive.

a écrit :

Pour le reste, je veux bien admettre tout ce que tu dis concernant ce salon.
La question est :
- sous prétexte de ne pas être un vrai forum php, faut-il laisser passer tout et n'importe quoi ?


Ce n'est pas un forum php, on n'y traite pas de ce langage, mais uniquement des raports que celui-ci peut entretenir avec une conception orientée "standards", ce qui n'est pas le cas de ce sujet et de bien des sujets depuis quelques temps. Sujet que personnelement je fermerais dès la question, mais l'équipe de modération estime que ce salon peut se laisser vivre à peu de frais si des membres veulent bien répondre aux questions purement serveur. Et que la vigilance n'est pas toujours au top.

Ce qui n'empêche pas de rester cordial Smiley cligne .

a écrit :
Si je pose des questions, ce n'est pas parce que je ne comprends pas, c'est juste pour faire réagir le posteur et les intervenants.


J'avais bien saisi ton intention, et la pédagogie employée Smiley ravi .

a écrit :
Je veux bien mettre le doigt directement sur le sujet qui pose problème, mais je ne le fais rarement. Si la personne s'implique dans son sujet, il va recevoir de ma part toute l'aide appropriée.

S'il ne le fait pas, c'est qu'il s'en fout et je ne perds pas mon temps.

J'adopte également cette attitude sur d'autres domaines Smiley cligne , inciter à creuser les questions proposer une démarche d'apprentissage et pas de fast-food.

a écrit :

Enfin, bref... pas grave ! Smiley cligne
Je te signale qu'ils sont deux sur mon dos quand même ! Smiley langue


Il suffit juste de ne pas omettre les smilleys Smiley cligne ou de laisser tomber.
Bonsoir à tous,

Bon j'ai cherché à comprendre avant de repointer le bout de mon nez.

Ce code fonctionne en local et ne fonctionne pas chez mon hébergeur avec les mêmes données. Donc j'avais pensé à un problème de niveau de version de code, mais je n'imaginais pas sucsité autant d'intérêt.

Oui, je suis preneur pour mon erreur syntaxique que je ne vois pas, et que je ne suis pas le seul à voir.

Donc NOUS sommes intéressé par la vue de Bison sur ce code et merci pour d'avance pour tes explications.
lodan a écrit :

Ce code fonctionne en local et ne fonctionne pas chez mon hébergeur avec les mêmes données. Donc j'avais pensé à un problème de niveau de version de code, mais je n'imaginais pas sucsité autant d'intérêt.


Peut-être les différentes versions de php entre ton serveur de développement et celui mis à ta disposition par ton hébergeur seraient-elles une information utile ? Smiley cligne
Modifié par Igor (03 Nov 2006 - 21:36)
Revenons aux messages d'erreur.

Ils indiquent que les tableaux fournis à la fonction sont invalides.
Hors, ces tableaux sont générés à partir de la lecture du tableau $requete.

Comme ce tableau est fournit par le script "lire_maj_revers_lignes.php", il est fortement probable que le problème se situe à ce niveau là.

Pour me faire une idée, j'ai réalisé le test suivant :

// Construction de deux enregistrements de $requete
$requete[] = array("exec_annee" => 2006, "exec_mois" => 5, "revers_regle_ordre" => 3);
$requete[] = array("exec_annee" => 2005, "exec_mois" => 3, "revers_regle_ordre" => 1);

// exécution de la boucle
foreach ($requete as $key => $row)
{
   $exec_annee[$key]  = $row['exec_annee'];
   $exec_mois[$key] = $row['exec_mois'];
   $revers_regle_ordre[$key] = $row['revers_regle_ordre'];
}

// Tri les données
array_multisort($exec_annee, SORT_ASC, $exec_mois, SORT_ASC, $revers_regle_ordre, SORT_ASC, $requete);

// impression de résultats
foreach($exec_annee as $s)
	echo "<pre>$s</pre>";


Et j'obtiens bien:
2005
2006

soit le contenu trié de $exec_annee

Je suis sous php 5.1, mais rien n'empêche ce script de tourner sous 4.4

Donc, plutôt que de mettre en cause cette portion de script, (quelle erreur syntaxique, svp, bison Smiley eek ), il serait plus productif d'examiner le script fournissant $requete.
J'ai regardé en profondeur et effectivement, j'avais un petit problème plus haut dans mon code.
J'ai qu'en même ajouté un test au cas où pour les prochaines fois.

Merci, cela fonctionne maintenant.

Mais je suis dans l'attente de Bison pour la suite ...
Je suis aussi dans l'attente de l'explication de Bison, dans la mesure où je n'ai pas réussi à dormir correctement cette nuit, à cause des doutes dont il m'a farci la tête... Smiley mur
ça serait quand même sympa d'être plus clair et plus didactique dans la mesure où la syntaxe foreach ($requete as $key => $row) n'est absolument pas évidente pour un non-expert.

alors

a écrit :
J'ai d'énormes doutes sur cette portion de code !
D'où vient $row['exec_annee'] par exemple ?


mérite quand même des précisions quand à la nature des doutes, non?

a écrit :
S'il ne le fait pas, c'est qu'il s'en fout et je ne perds pas mon temps.

... dit-il...
Modifié par GeorgesM (04 Nov 2006 - 08:47)
J'espère qu'il va se réveiller, parceque je suis aussi impatient. j'utilise souvent cette syntaxe, alors si c'est un non sens, il faut vite connaître "la vérité"

Je laisse le post ouvert jusqu'à lundi soir dans l'attente.
Pages :