Souci de Undefined index dans un comptage Mysql
Résolu/Fermé
Sebas22
Messages postés
110
Date d'inscription
jeudi 13 mai 2010
Statut
Membre
Dernière intervention
24 juillet 2018
-
28 mars 2017 à 18:05
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 - 29 mars 2017 à 17:53
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 - 29 mars 2017 à 17:53
A voir également:
- Mysql a répondu : documentation connexion impossible : paramètres incorrects.
- Gmail connexion - Guide
- Hotmail connexion - Guide
- Facebook connexion - Guide
- Ouvrir paramètres - Guide
- Connexion chromecast - Guide
4 réponses
ThEBiShOp
Messages postés
8378
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 566
29 mars 2017 à 16:29
29 mars 2017 à 16:29
Pour ta première question.
Comme je disais dans mon 1er message, il faut que tu comprennes d'où vient tes données.
Les variables $_POST et $_GET permettent de récupérer des données qui sont passées par une requête HTTP, typiquement, ça peut venir d'un formulaire. Dans ton formulaire, tu définies la méthode qui peut être post ou get, et les données seront passées à la page cible de ton formulaire suivant cette méthode.
En post, les données sont passées dans la requête HTTP, c'est la méthode la plus utilisée.
En get, les données sont passées dans l'url de la form http://www.url.com?champ1=truc&champ2=bidule
tu pourras donc récupérer $_GET['champ1'] et $_GET['champ2']
Tu peux utiliser les get directement en les ajoutant dans le href d'un lien, c'est très pratique d'ailleurs.
Comme tu travailles avec une requête SQL, ce n'est pas ce que tu veux, il ne faut donc pas utiliser ça.
Ensuite, pour comprendre
Il s'agit d'un opérateur ternaire.
Cette ligne équivaut exactement à ceci que tu auras plus facilité à compprendre :
Evite peut être ce genre de syntaxe pour l'instant...
Du coup ta variable $counter avait forcément une valeur, et c'était NULL vu que $_POST['counter'] n'existe pas.
D'une façon plus générale, n'utilise un code que si tu le comprends. Il y a toujours plusieurs manière de faire une même chose, et utiliser du code que tu ne comprends pas te posera des problèmes.
Et pour ta 2ème question, c'est difficile de répondre sans savoir ce que tu as dans ta base de données, mais si tu obtiens ce que tu veux dans phpmyadmin, vas-y, ton tableau semble correct.
Par contre, retire les lignes :
pour les raisons que je viens de cité, ça ne sert à rien vu que tu n'utilises pas $counter1 et $counter2 ensuite et ça n'a pas de sens parce que tu n'as pas de $_POST (si j'ai bien compris ton code...)
Comme je disais dans mon 1er message, il faut que tu comprennes d'où vient tes données.
Les variables $_POST et $_GET permettent de récupérer des données qui sont passées par une requête HTTP, typiquement, ça peut venir d'un formulaire. Dans ton formulaire, tu définies la méthode qui peut être post ou get, et les données seront passées à la page cible de ton formulaire suivant cette méthode.
En post, les données sont passées dans la requête HTTP, c'est la méthode la plus utilisée.
En get, les données sont passées dans l'url de la form http://www.url.com?champ1=truc&champ2=bidule
tu pourras donc récupérer $_GET['champ1'] et $_GET['champ2']
Tu peux utiliser les get directement en les ajoutant dans le href d'un lien, c'est très pratique d'ailleurs.
Comme tu travailles avec une requête SQL, ce n'est pas ce que tu veux, il ne faut donc pas utiliser ça.
Ensuite, pour comprendre
$counter = !empty($_POST['counter']) ? $_POST['counter'] : NULL;il faut que tu comprennes ce que cette ligne veut dire.
Il s'agit d'un opérateur ternaire.
Cette ligne équivaut exactement à ceci que tu auras plus facilité à compprendre :
if (!empty($_POST['counter'])) { $counter = $_POST['counter']; } else { $counter = NULL; }
Evite peut être ce genre de syntaxe pour l'instant...
Du coup ta variable $counter avait forcément une valeur, et c'était NULL vu que $_POST['counter'] n'existe pas.
D'une façon plus générale, n'utilise un code que si tu le comprends. Il y a toujours plusieurs manière de faire une même chose, et utiliser du code que tu ne comprends pas te posera des problèmes.
Et pour ta 2ème question, c'est difficile de répondre sans savoir ce que tu as dans ta base de données, mais si tu obtiens ce que tu veux dans phpmyadmin, vas-y, ton tableau semble correct.
Par contre, retire les lignes :
$counter1 = !empty($_POST['counter1']) ? $_POST['counter1'] : NULL; $counter2 = !empty($_POST['counter2']) ? $_POST['counter2'] : NULL;
pour les raisons que je viens de cité, ça ne sert à rien vu que tu n'utilises pas $counter1 et $counter2 ensuite et ça n'a pas de sens parce que tu n'as pas de $_POST (si j'ai bien compris ton code...)
ThEBiShOp
Messages postés
8378
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 566
28 mars 2017 à 18:24
28 mars 2017 à 18:24
Salut,
Si ton counter est une colonne du résultat de ta requête, tu dois récupérer cette valeur dans le parcours de tes résultats.
La tu essaies de récupérer ton counter dans un $_POST, ce qui veut dire que cette donnée provient d'un formulaire (pour faire simple).
Je ne pense pas que c'est ce que tu veux.
Il faudrait plutôt que tu mettes $row["counter"] dans ton echo au lieu de $counter.
Il faut que tu te représentes bien d'où viennent tes données et comment les manipuler.
Après il faut aussi que tu sois sûr que ta requête te donne ce que tu veux et que tu saches comment l'exploiter. Ce n'est pas parce que tu obtiens quelque chose dans phpmyadmin que c'est correct pour autant
Si ton counter est une colonne du résultat de ta requête, tu dois récupérer cette valeur dans le parcours de tes résultats.
La tu essaies de récupérer ton counter dans un $_POST, ce qui veut dire que cette donnée provient d'un formulaire (pour faire simple).
Je ne pense pas que c'est ce que tu veux.
Il faudrait plutôt que tu mettes $row["counter"] dans ton echo au lieu de $counter.
Il faut que tu te représentes bien d'où viennent tes données et comment les manipuler.
Après il faut aussi que tu sois sûr que ta requête te donne ce que tu veux et que tu saches comment l'exploiter. Ce n'est pas parce que tu obtiens quelque chose dans phpmyadmin que c'est correct pour autant
Sebas22
Messages postés
110
Date d'inscription
jeudi 13 mai 2010
Statut
Membre
Dernière intervention
24 juillet 2018
5
29 mars 2017 à 15:00
29 mars 2017 à 15:00
Bonjour ThEBishop,
Merci beaucoup.
Il fallait remplacer
Et çà marche nickel!
Je me disais bien que c’était pas grand chose, mais à mon niveau mes connaissances ne sont pas hyper-solides et à un moment je ne « vois » plus rien.
Pour mon apprentissage puis-je avoir ton feedback sur la question de :
//$counter = $_POST['counter']; ou _GET
Car j’obtiens
Notice: Undefined index: counter in D xxxx.php on line 79
Par rapport à (qui marche… mais je pige pas pourquoi)
$counter = !empty($_POST['counter']) ? $_POST['counter'] : NULL;
Et 2ème point… je prévois idéalement de faire un tableau à 4 colonnes au lieu de 2 (mais à ce stade je ne peux pas le tester car il faut que je crée un nouveau champ dans ma base de donnée intitulé Full_genus_valid_sp
Ma requête simple serait :
Et donc si je veux mon tableau à 4 colonnes, le code deviendrait (c’est là que j’ai besoin de tes corrections y compris sur la requête globalisée notamment pour GROUP BY)
Bon ce n’est pas incontournable car je peux toujours faire des tableaux à 2 colonnes qui se suivent!
Encore merci!
A+,
Seb
Merci beaucoup.
Il fallait remplacer
'</i></td><td>'. $counter . '</td></tr>'; Par <code php> '</i></td><td>'. $row ["counter"] . '</td></tr>';
Et çà marche nickel!
Je me disais bien que c’était pas grand chose, mais à mon niveau mes connaissances ne sont pas hyper-solides et à un moment je ne « vois » plus rien.
Pour mon apprentissage puis-je avoir ton feedback sur la question de :
//$counter = $_POST['counter']; ou _GET
Car j’obtiens
Notice: Undefined index: counter in D xxxx.php on line 79
Par rapport à (qui marche… mais je pige pas pourquoi)
$counter = !empty($_POST['counter']) ? $_POST['counter'] : NULL;
Et 2ème point… je prévois idéalement de faire un tableau à 4 colonnes au lieu de 2 (mais à ce stade je ne peux pas le tester car il faut que je crée un nouveau champ dans ma base de donnée intitulé Full_genus_valid_sp
Ma requête simple serait :
$requete = $connexion->prepare("SELECT Full_genus_valid_sp, COUNT(Full_genus_valid_sp) AS counter FROM taxabase2 WHERE Full_genus_valid_sp is not null and trim(Full_genus_valid_sp) != '' GROUP BY Full_genus_valid_sp ORDER BY Full_genus_valid_sp");
Et donc si je veux mon tableau à 4 colonnes, le code deviendrait (c’est là que j’ai besoin de tes corrections y compris sur la requête globalisée notamment pour GROUP BY)
$requete = $connexion->prepare("SELECT Full_genus_valid_sp, COUNT(Full_genus_valid_sp) AS counter1, Full_subgenus_valid_sp, COUNT(Full_subgenus_valid_sp) AS counter2 FROM taxabase2 WHERE Full_genus_valid_sp is not null and trim(Full_genus_valid_sp) != '' and Full_subgenus_valid_sp is not null and trim(Full_subgenus_valid_sp) != ''GROUP BY Full_genus_valid_sp and Full_subgenus_valid_sp ORDER BY Full_genus_valid_sp"); $counter1 = !empty($_POST['counter1']) ? $_POST['counter1'] : NULL; $counter2 = !empty($_POST['counter2']) ? $_POST['counter2'] : NULL; $requete->execute(); $result[1] = $requete->fetchAll(); foreach ($result[1] as $row) { echo '<tr><td><i>' . $row["Full_genus_valid_sp"] . '</i></td><td>'. $row ["counter1"] . ‘<td><td><i>' . $row["Full_subgenus_valid_sp"] . '</i></td><td>'. $row ["counter2"] . '</td></tr>'; }
Bon ce n’est pas incontournable car je peux toujours faire des tableaux à 2 colonnes qui se suivent!
Encore merci!
A+,
Seb
Sebas22
Messages postés
110
Date d'inscription
jeudi 13 mai 2010
Statut
Membre
Dernière intervention
24 juillet 2018
5
29 mars 2017 à 17:18
29 mars 2017 à 17:18
Bonjour ThEBishop,
Merci beaucoup.
Tout est limpide et je marque 'résolu'.
En fait je me complique souvent la vie pour rien (par exemple avec ces $_Get ou $_Post sans formulaire)... heureusement tu es mon ange gardien!
J'apprend lentement et parfois en tâtonnant... mais (pour moi) c'est mieux.
Et produire c'est plus gratifiant (toujours pour moi) que tout comprendre avant.
Seb
Merci beaucoup.
Tout est limpide et je marque 'résolu'.
En fait je me complique souvent la vie pour rien (par exemple avec ces $_Get ou $_Post sans formulaire)... heureusement tu es mon ange gardien!
J'apprend lentement et parfois en tâtonnant... mais (pour moi) c'est mieux.
Et produire c'est plus gratifiant (toujours pour moi) que tout comprendre avant.
Seb
ThEBiShOp
Messages postés
8378
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 566
29 mars 2017 à 17:53
29 mars 2017 à 17:53
Tant que tu te poses les questions, que tu essaies et que tu cherches à comprendre, moi ça me va. Il y a tellement d'utilisateurs sur ce forum qui demandent des réponses toutes pondues sans maitriser les bases et sans vouloir chercher à comprendre...
J'aiderai toujours quelqu'un qui montre de la bonne volonté donc continue comme ça.
Bon courage
J'aiderai toujours quelqu'un qui montre de la bonne volonté donc continue comme ça.
Bon courage