Tri qui se fait bien avec requête sql, mais plus dans localhost

Résolu/Fermé
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 - 4 avril 2017 à 16:41
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 - 6 avril 2017 à 17:22
Bonjour,

Cela me dépasse.

Voilà j’ai un code dont la requête SQL non seulement marche dans PhpMyAdmin de wamperver, mais en plus affiche le bon tri.
Quand je copie la requête dans mon code php et que je teste le fichier dans localhost, le tableau s’affiche MAIS le tri ne se fait plus.
En réalité il trie sur la 1ère colonne du tableau php, et pas comme avec la requête sql sur substr(Corr_Date, 25, 11) DESC.
Comme le tableau est lui-même triable avec un javascript appelé et par la classe class="sortable" id="you", j’ai essayé de désactiver le js et de changer la classe en classe normale, mais cela ne change rien (le tri reste sur la 1ère colonne du tableau php et le tableau est fixe)

Pouvez-vous me dire où se trouve mon erreur ?

Le code :
echo '<table class="sortable" id="you"><tr><th title="(current trinominal name)">CURRENT TRINOMINAL NAME</th><th title="(included or corrected on )">LATEST CHANGE</th><th title="(date of major syatematic or nomenclatural update)">LAST MAJOR UPDATE</th><th title="(year of description)">YEAR DESCRIPTION</th></tr>';

	$requete = $connexion->prepare("SELECT Year_description, Corr_Date, Current_trinom_name, Major_edition_update, substr(Corr_Date, 25, 5), substr(Corr_Date, 25, 11) FROM taxabase1 left outer join taxabase2 on (taxabase1.Rk_Hist = taxabase2.Rk_Hist) left outer join taxabase3 on (taxabase2.Rk_Hist = taxabase3.Rk_Hist) WHERE taxabase1.Rk_Hist and substr(Corr_Date, 25, 5)>= 2016 ORDER BY substr(Corr_Date, 25, 11) DESC");
		
	$requete->execute();
    $result[1] = $requete->fetchAll();
	$plan16 = '';
	$tabCurrent_update_by_name = array();
		
    	foreach  ($result[1] as $row) 
	{
		$plan16 = explode("|", $row["Current_trinom_name"]);
		foreach ($plan16 as $cellplan16)
		{
			$tabCurrent_update_by_name[$cellplan16][] = 
				array(substr($row["Corr_Date"], 25, 10),
                                       $row["Major_edition_update"],
                                       $row["Year_description"]);
		}	
	}
	ksort($tabCurrent_update_by_name);
	foreach($tabCurrent_update_by_name 
                as $currentname => $tabCurrent_update)
	{
		foreach($tabCurrent_update as $Original_array)
		{
			echo '<tr><td><i>' . $currentname .
                            '</i></td><td>'. $Original_array[0] .
							'</td><td>'. substr($Original_array[1], -4) . ' ['. $Original_array[1] .
							']</td><td>'. $Original_array[2] .  
							'</td></tr>';
		}
	}
	echo '</table>';


Merci d’avance

Seb




3 réponses

jordane45 Messages postés 38304 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
4 avril 2017 à 18:21
Bonjour,

as tu essayé de voir ce que ça donne AVANT le ksort ?

1
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 5
6 avril 2017 à 13:42
Bonjour Jordane45,

Merci de la piste précise.

J’ai simplement désactivé la ligne
ksort($tabCurrent_update_by_name);


et le problème a été résolu!

Bon ce n’était pas une erreur stupide d’inattention et là tu peux peut-être me dire ce que tu en penses.
Mon code est un code valise que j’adapte à chaque page (la requête est, elle, différente à chaque fois, et pour la présente requête j’ai chauffé mes neurones !).

Il marche pour la ligne
$plan16 = explode("|", $row["Current_trinom_name"]);


Sauf que dans le cas présent il n’y a pas de caractère ‘|’ et donc le explode n’est pas indispensable (donc si j’avais maintenu le ksort c’était pour cette raison qui concerne la même variable, pas par étourderie… je reste encore débutant).
Donc maintenant si je remplace cette ligne par
$plan16 = $row["Current_trinom_name"];


J’ai une grosse erreur (répétée x fois) qui apparaît :
Warning: Invalid argument supplied for foreach() in D:\_xxx.php on line 84 qui est

foreach ($plan16 as $cellplan16)


Pourquoi ?
Comment la solutionner ?
Une piste ? (note : c’est pas indispensable, puisque çà marche et que c’est résolu, mais c’est pour ma compréhension… et mon apprentissage).

Merci encore !
A+
Seb
0
jordane45 Messages postés 38304 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
6 avril 2017 à 14:27
Simplement ... avant de faire ton foreach tu peux
- Verifier que la variable est de type "array
- Vérifier que la variable existe et n'est pas vide

En gros :

if(!empty($plan16)){
 if(is_array($plan16)){
    foreach ($plan16 as $cellplan16){
       $tabCurrent_update_by_name[$cellplan16][] =          array(substr($row["Corr_Date"], 25, 10),
                    $row["Major_edition_update"],
                      $row["Year_description"]);
     }
  }else{
       $tabCurrent_update_by_name[$cellplan16][] =          array(substr($row["Corr_Date"], 25, 10),
                    $row["Major_edition_update"],
                      $row["Year_description"]);
  }
}



NB : A l'avenir, lorsque tu as un NOUVELLE question, merci d'ouvrir une NOUVELLE discussion.
La question précédente portant sur ton tri .... et étant traitée ... merci de mettre ce sujet en RESOLU.
0
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 5
6 avril 2017 à 17:22
Bonjour Jordane45,

Ah, mercis !!!
En copiant le code, j’ai eu un message d’erreur, mais ce n’est pas grave car j’ai de quoi creuser dans mes bouquins pour bien comprendre ces différences de type de variable (et en tout cas, ma page marche déjà).

Voilà je marque (bien) résolu.

Seb
0