Un souci de finalisation avec explode PHP MySql
Résolu/Fermé
Sebas22
Messages postés
110
Date d'inscription
jeudi 13 mai 2010
Statut
Membre
Dernière intervention
24 juillet 2018
-
14 févr. 2018 à 10:24
yg_be Messages postés 23471 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 - 26 févr. 2018 à 19:03
yg_be Messages postés 23471 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 - 26 févr. 2018 à 19:03
A voir également:
- Explode mysql
- Mysql community server - Télécharger - Bases de données
- Phpmyadmin a tenté de se connecter au serveur mysql, et le serveur a rejeté la connexion. merci de vérifier les valeurs de host, username et password dans la configuration et de s'assurer qu'elles correspondent aux informations fournies par l'administrateur du serveur mysql. ✓ - Forum PHP
- Mysql error 1 ✓ - Forum Réseaux sociaux
- Could not connect to mysql! please check your database settings! - Forum Redhat
- Le serveur mysql est inaccessible. vérifiez votre configuration. ✓ - Forum MySQL
6 réponses
jordane45
Messages postés
38424
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 février 2025
4 734
14 févr. 2018 à 11:48
14 févr. 2018 à 11:48
Bonjour,
Lorsque tu fais un explode... ça te retourne un ARRAY
Tu dois donc boucler dessus...
Un truc du genre
NB: Je t'invite vivement à appliquer le contenu de ce lien : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Ainsi que de celui ci : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Lorsque tu fais un explode... ça te retourne un ARRAY
Tu dois donc boucler dessus...
Un truc du genre
foreach ($result[1] as $row) { $Describer_initials = !empty($row["Describer_initials"]) ? $row["Describer_initials"] : NULL; if($Describer_initials){ $explode1 = explode("|", $Describer_initials); if(!empty($explode1)){ foreach($explode1 as $D){ echo '<tr><td>' . $D . '</td><td>' . $row ["counter"] . '</td></tr>'; } } } }
NB: Je t'invite vivement à appliquer le contenu de ce lien : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Ainsi que de celui ci : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Sebas22
Messages postés
110
Date d'inscription
jeudi 13 mai 2010
Statut
Membre
Dernière intervention
24 juillet 2018
5
14 févr. 2018 à 15:04
14 févr. 2018 à 15:04
Bonjour Jordane45,
Merci beaucoup de cette réaction rapide est précise.
J’ai appliqué et il n’y a plus de bug… mais cela ne fait pas bien le job.
L’explode fonctionne mais il fait comme s’il créait un ‘describer’ nouveau après avoir désaggrégé plusieurs ‘describer’, un peu comme s’il créait des doublons distincts.
Je vais être plus clair (!)… par exemple, voici 5 lignes théoriques du champ :
Jordane P.H.
Pépin A.C.|Jordane P.H.|Dupont N.N.
Pépin A.C.|Dupont N.N.|Jordane P.H.
Martin A.|Jordane P.H.
Jordane P.H.
Alors les résultats sont
Jordane P.H. 2 (et pas 5)
Et plus loin dans le tableau j’aurais
Jordane P.H. 1
Et plus loin encore
Jordane P.H. 1
Et plus loin encore
Jordane P.H. 1
Avec à d’autres endroits dans le tableau
Pépin A.C. 1 (et pas 2)
Puis une autre fois Pépin A.C., plus bas
Et idem pour Dupont N.N.
Donc là ce n’est plus un problème de code, mais plutôt de corrélation entre l’objectif et le résultat.
Avec les 5 lignes précédentes, je voudrais le tableau résultant suivant :
Jordane P.H. 5
Pépin A.C. 2
Dupont N.N. 2
Martin A. 1
Par sécurité je reprend le code avec tes ajouts.
Je me demande si le souci ne serait pas dans le code suivant que je ne comprend pas:
$Describer_initials = !empty($row["Describer_initials"]) ? $row["Describer_initials"] : NULL
A+ Seb
Merci beaucoup de cette réaction rapide est précise.
J’ai appliqué et il n’y a plus de bug… mais cela ne fait pas bien le job.
L’explode fonctionne mais il fait comme s’il créait un ‘describer’ nouveau après avoir désaggrégé plusieurs ‘describer’, un peu comme s’il créait des doublons distincts.
Je vais être plus clair (!)… par exemple, voici 5 lignes théoriques du champ :
Jordane P.H.
Pépin A.C.|Jordane P.H.|Dupont N.N.
Pépin A.C.|Dupont N.N.|Jordane P.H.
Martin A.|Jordane P.H.
Jordane P.H.
Alors les résultats sont
Jordane P.H. 2 (et pas 5)
Et plus loin dans le tableau j’aurais
Jordane P.H. 1
Et plus loin encore
Jordane P.H. 1
Et plus loin encore
Jordane P.H. 1
Avec à d’autres endroits dans le tableau
Pépin A.C. 1 (et pas 2)
Puis une autre fois Pépin A.C., plus bas
Et idem pour Dupont N.N.
Donc là ce n’est plus un problème de code, mais plutôt de corrélation entre l’objectif et le résultat.
Avec les 5 lignes précédentes, je voudrais le tableau résultant suivant :
Jordane P.H. 5
Pépin A.C. 2
Dupont N.N. 2
Martin A. 1
Par sécurité je reprend le code avec tes ajouts.
echo '<blockquote><h3><a id="DESCRIBERS"></a>Statistics by name of describers :</h3></blockquote>'; echo '<table class="sortablenarrow" id="you"><tr><th>NAME OF DESCRIBERS</th><th>COUNTER ALL TAXA</th></tr>'; $requete = $connexion->prepare("SELECT Describer_initials, COUNT(Describer_initials) AS counter FROM taxabase3 WHERE Describer_initials is not null and trim(Describer_initials) != '' GROUP BY Describer_initials ORDER BY COUNT(Describer_initials) DESC, Describer_initials ASC"); $requete->execute(); $result[1] = $requete->fetchAll(); $explode1 = ''; foreach ($result[1] as $row) { $Describer_initials = !empty($row["Describer_initials"]) ? $row["Describer_initials"] : NULL; if($Describer_initials){ $explode1 = explode("|", $Describer_initials); if(!empty($explode1)){ foreach($explode1 as $D){ echo '<tr><td>' . $D . '</td><td>' . $row ["counter"] . '</td></tr>'; } } } } echo '</table>'; echo '<p> </p>'; echo '<p> </p>';
Je me demande si le souci ne serait pas dans le code suivant que je ne comprend pas:
$Describer_initials = !empty($row["Describer_initials"]) ? $row["Describer_initials"] : NULL
A+ Seb
Sebas22
Messages postés
110
Date d'inscription
jeudi 13 mai 2010
Statut
Membre
Dernière intervention
24 juillet 2018
5
16 févr. 2018 à 12:34
16 févr. 2018 à 12:34
Bonjour,
Pas de réaction???
La suppression de la ligne
$Describer_initials = !empty($row["Describer_initials"]) ? $row["Describer_initials"] : NULL;
Entraîne un bug donc c’est pas çà.
Il semble que le tri dans la requête ne s’applique pas au code php.
J’ai regardé le manuel PHP et il semble qu’il faudrait ajouter une ligne du type
ksort($explode1);
J’ai essayé à plusieurs endroits mais cela ne marche pas.
J’ai essayé de passer par un intermédiaire (avant le tri ‘sort’) du type
foreach ($explode1as $cellexplode1) { ksort($cellexplode1);}
Mais cela ne marche pas plus.
J’y ai passé 6 heures !
Je suis mal , là.
Quelqu’un peut-il aider ?
Merci d’avance
Seb
PS : voici le dernier code auquel je suis arrivé pour info pour montrer que je ne suis pas resté les bras croisées, mais c’est plein de bugs.
Pas de réaction???
La suppression de la ligne
$Describer_initials = !empty($row["Describer_initials"]) ? $row["Describer_initials"] : NULL;
Entraîne un bug donc c’est pas çà.
Il semble que le tri dans la requête ne s’applique pas au code php.
J’ai regardé le manuel PHP et il semble qu’il faudrait ajouter une ligne du type
ksort($explode1);
J’ai essayé à plusieurs endroits mais cela ne marche pas.
J’ai essayé de passer par un intermédiaire (avant le tri ‘sort’) du type
foreach ($explode1as $cellexplode1) { ksort($cellexplode1);}
Mais cela ne marche pas plus.
J’y ai passé 6 heures !
Je suis mal , là.
Quelqu’un peut-il aider ?
Merci d’avance
Seb
PS : voici le dernier code auquel je suis arrivé pour info pour montrer que je ne suis pas resté les bras croisées, mais c’est plein de bugs.
$requete->execute(); $result[1] = $requete->fetchAll(); $plan21 = ''; $tabdescriber_counter = array(); foreach ($result[1] as $row) { { $plan21 = explode("|", $row["Describer_initials"]); foreach ($plan21 as $cellplan21) { $cellplan21[$counter][] = array($row[$cellplan21], $row[$counter]); } } ksort($tabdescriber_counter); foreach($tabdescriber_counter as $describer => $tabcounter) { foreach($tabcounter as $Original_array) { echo '<tr><td><b>' . $describer . '</b></td><td><i>'. $Original_array[0] . '</i></td></tr>'; } }
jordane45
Messages postés
38424
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 février 2025
4 734
17 févr. 2018 à 10:06
17 févr. 2018 à 10:06
J'ai du mal à voir ce que tu veux faire.
Pour mieux comprendre... il faudrait que tu nous donnes
- un exemple du résultat obtenu actuellement (le code html.. pas juste du blabla...) + une capture écran de l'affichage
- un exemple du résultat attendu (le code html que tu auras simulé à la main.. pas juste du blabla...)
Dans l'idéal il faudrait aussi nous montrer le contenu de ta variable $result[1] (tu n'as qu'à en faire un print_r )
Pour mieux comprendre... il faudrait que tu nous donnes
- un exemple du résultat obtenu actuellement (le code html.. pas juste du blabla...) + une capture écran de l'affichage
- un exemple du résultat attendu (le code html que tu auras simulé à la main.. pas juste du blabla...)
Dans l'idéal il faudrait aussi nous montrer le contenu de ta variable $result[1] (tu n'as qu'à en faire un print_r )
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
Modifié le 17 févr. 2018 à 12:32
Modifié le 17 févr. 2018 à 12:32
bonjour, je suggère:
- de simplifier le select:
- de faire ensuite:
- de simplifier le select:
SELECT Describer_initials FROM taxabase3 WHERE Describer_initials is not null and trim(Describer_initials) != ''
- de faire ensuite:
$tabcellplan21 = array(); foreach ($result[1] as $row) { foreach (explode("|", $row["Describer_initials"]) as $cellplan21) { $tabcellplan21[] = $cellplan21; } } $compteurs=array_count_values($tabcellplan21); foreach ($compteurs as $describer=>$count) { echo '<tr><td><b>' . $describer . '</b></td><td><i>'. $count . '</i></td></tr>'; }
Sebas22
Messages postés
110
Date d'inscription
jeudi 13 mai 2010
Statut
Membre
Dernière intervention
24 juillet 2018
5
17 févr. 2018 à 17:33
17 févr. 2018 à 17:33
Bonjour Jordane45 et yg_be,
Oui Jordane tu devais être fatigué, c'est exactement ce que j'avais fait dans le post précédent.
Merci vivement (encore!) yg_be, c'est clair et (brillamment) court, mais il y a un petit bug, le pire pour moi car très général (Notice: Undefined)... mais cela doit être simple à corriger.
J'ai le message d'erreur suivant:
Notice: Undefined index: Describer_initials in D:\_Data\Killi-Data\wamp\www\killidataphpmysql\mem221bersmysql\aa-header-stats-counts1.php on line 299
Call Stack
# Time Memory Function Location
1 0.0050 371928 {main}( ) ..\xxxx.php:0
L'erreur est répétée x fois puis cela se termine par le nombre 65
J'ai vérifié 10 fois ton code original et sa copie dans la page, mais c'est pareil.
Par sécurité, je copie mon code ci-après:
J'ai aussi essayé de définir les variables (ici par du code commenté), mais cela ne change rien
A+, Seb
Oui Jordane tu devais être fatigué, c'est exactement ce que j'avais fait dans le post précédent.
Merci vivement (encore!) yg_be, c'est clair et (brillamment) court, mais il y a un petit bug, le pire pour moi car très général (Notice: Undefined)... mais cela doit être simple à corriger.
J'ai le message d'erreur suivant:
Notice: Undefined index: Describer_initials in D:\_Data\Killi-Data\wamp\www\killidataphpmysql\mem221bersmysql\aa-header-stats-counts1.php on line 299
Call Stack
# Time Memory Function Location
1 0.0050 371928 {main}( ) ..\xxxx.php:0
L'erreur est répétée x fois puis cela se termine par le nombre 65
J'ai vérifié 10 fois ton code original et sa copie dans la page, mais c'est pareil.
Par sécurité, je copie mon code ci-après:
$requete = $connexion->prepare("SELECT Describer_initials FROM taxabase3 WHERE Describer_initials is not null and trim(Describer_initials) != ''"); //$Describer_initials = !empty($row["Describer_initials"]) ? $row["Describer_initials"] : NULL; //$cellplan21 = 'Describer_initials'; //$tabcellplan21 = ''; $tabcellplan21 = array(); foreach ($result[1] as $row) { foreach (explode("|", $row["Describer_initials"]) as $cellplan21) //var_dump($Describer_initials); die(); //var_dump($cellplan21); die(); { $tabcellplan21[] = $cellplan21; } } $compteurs=array_count_values($tabcellplan21); foreach ($compteurs as $describer=>$count) { echo '<tr><td><b>' . $describer . '</b></td><td><i>'. $count . '</i></td></tr>'; }
J'ai aussi essayé de définir les variables (ici par du code commenté), mais cela ne change rien
A+, Seb
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
17 févr. 2018 à 17:58
17 févr. 2018 à 17:58
plutôt ainsi:
$requete = $connexion->prepare("SELECT Describer_initials FROM taxabase3 WHERE Describer_initials is not null and trim(Describer_initials) != ''"); $requete->execute(); $result[1] = $requete->fetchAll(); $tabcellplan21 = array(); foreach ($result[1] as $row) { foreach (explode("|", $row["Describer_initials"]) as $cellplan21) { $tabcellplan21[] = $cellplan21; } } $compteurs=array_count_values($tabcellplan21); foreach ($compteurs as $describer=>$count) { echo '<tr><td><b>' . $describer . '</b></td><td><i>'. $count . '</i></td></tr>'; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sebas22
Messages postés
110
Date d'inscription
jeudi 13 mai 2010
Statut
Membre
Dernière intervention
24 juillet 2018
5
21 févr. 2018 à 12:03
21 févr. 2018 à 12:03
Bonjour Jordane45 et yg_be,
A mon tour d'être fatigué!
C'était une grosse boulette d'inattention!
Je marque comme résolu, ton code est parfait yg_be.
Merci à tous les 2.
yg_be, est-ce que je peux te demander encore quelques instants pour ma "formation" en PHP-MySQL (pas urgent).
Si je veux afficher les résultats dans l'ordre croissant ou décroissant pour la colonne 1 ou 2, je dois utiliser (je crois) ksort dans la partie php, mais je ne vois pas comment faire en dehors de la requête sql (et là çà ne marche pas, tu l'as pointé).
J'aimerais aussi comprendre ton raisonnement pour écrire le code des foreach avec des '{' et '}'.
Pourquoi 3 for each? pourquoi l'ouverture de '{' après le 1er?
Si tu devais parler ou écrire ce raisonnement, tu dirais quoi?
En tous cas re-merci!
Vous êtes super tous les 2.
Seb
A mon tour d'être fatigué!
C'était une grosse boulette d'inattention!
Je marque comme résolu, ton code est parfait yg_be.
Merci à tous les 2.
yg_be, est-ce que je peux te demander encore quelques instants pour ma "formation" en PHP-MySQL (pas urgent).
Si je veux afficher les résultats dans l'ordre croissant ou décroissant pour la colonne 1 ou 2, je dois utiliser (je crois) ksort dans la partie php, mais je ne vois pas comment faire en dehors de la requête sql (et là çà ne marche pas, tu l'as pointé).
J'aimerais aussi comprendre ton raisonnement pour écrire le code des foreach avec des '{' et '}'.
Pourquoi 3 for each? pourquoi l'ouverture de '{' après le 1er?
Si tu devais parler ou écrire ce raisonnement, tu dirais quoi?
En tous cas re-merci!
Vous êtes super tous les 2.
Seb
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
21 févr. 2018 à 13:33
21 févr. 2018 à 13:33
pour trier, bien que je n'ai pas compris ce que tu entends pas colonne 1 ou 2, il suffit peut-être d'ajouter
explication du raisonnement:
les accolades encadrent les instructions exécutées dans la boucle foreach
ksort($compteurs);après la ligne 12.
explication du raisonnement:
foreach ($result[1] as $row) // pour chaque ligne de la réponse à la requête sql { foreach (explode("|", $row["Describer_initials"]) as $cellplan21) { // pour chaque initiale présente dans cette ligne $tabcellplan21[] = $cellplan21; } } $compteurs=array_count_values($tabcellplan21); // pour chaque initiale présente dans le tableau $compteurs foreach ($compteurs as $describer=>$count) { echo '<tr><td><b>' . $describer . '</b></td><td><i>'. $count . '</i></td></tr>'; }
les accolades encadrent les instructions exécutées dans la boucle foreach
Sebas22
Messages postés
110
Date d'inscription
jeudi 13 mai 2010
Statut
Membre
Dernière intervention
24 juillet 2018
5
26 févr. 2018 à 18:48
26 févr. 2018 à 18:48
Bonjour yg_be,
Merci! les commentaires m'ont bien aidé à mieux comprendre sur for each!
Pour le tri c'était une question exploratoire, car le tableau inclut un javascript qui permet de trier chacune des colonnes.
J'ai testé le ksort ($compteurs) et çà marche pour la colonne de gauche du tableau.
Pour la colonne de droite j'ai essayé plein de trucs mais pas moyen.
Je pense que le code doit alors être repris complètement!
Mais c'était juste par curiosité (ce n'était pas une nouvelle question)
Merci encore!
Seb
Merci! les commentaires m'ont bien aidé à mieux comprendre sur for each!
Pour le tri c'était une question exploratoire, car le tableau inclut un javascript qui permet de trier chacune des colonnes.
J'ai testé le ksort ($compteurs) et çà marche pour la colonne de gauche du tableau.
Pour la colonne de droite j'ai essayé plein de trucs mais pas moyen.
Je pense que le code doit alors être repris complètement!
Mais c'était juste par curiosité (ce n'était pas une nouvelle question)
Merci encore!
Seb
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
26 févr. 2018 à 19:03
26 févr. 2018 à 19:03
as-tu essayé
asort ($compteurs)?