Attention empty est positif avec les zéros ! L'élève sera bien content de voir que le zéro qu'il a eu en cours de géographie n'est pas compté dans sa moyenne trimestrielle… 
Moi j'utiliserais plutôt isset. Et je crois qu'on n'a pas d'autre choix que de vérifier explicitement que le champ a été rempli en vérifiant qu'il n'est pas strictement égal à la chaîne vide (*) :
1 2 3
| if (isset($_GET['compo1']) AND $_GET['compo1'] !== '') {
...
} |
Je dis bien strictement, avec le !==, pour éviter une conversion de type malheureuse : en comparaison non stricte, 0 == ''.
(*) Edit: et il y a peut-être aussi un trim à déposer pas trop loin.
De toute façon cette suite de if (empty(
)) me semble bien trop maladroite. Pourquoi ne pas utiliser le résultat de isset comme des nombres ?
$nombreNotes = isset($compo1) + isset($note1) + isset($note2) + isset($note3);
Tu saisis l'idée ?
Autre chose, il vaut mieux convertir le type des notes. Les données de formulaires arrivent toujours comme chaînes. Là ça part dans ta BDD donc c'est pas grave, mais si tu veux faire des opérations avec dans ton code PHP, je te conseille de les convertir avec floatval ou quelque chose dans ce goût-là.
Attention aussi aux injections SQL. Actuellement, tu envoies directement les données GET dans ta BDD. C'est mal. Une simple conversion avec floatval te permet déjà d'éliminer le code malicieux qui pourrait t'être envoyé.
Quand tu renvoies au client les données issues de GET, le risque d'injection SQL se transforme en risque d'attaque XSS. En l'occurence $note['note1'] et consœurs proviennent de ta BDD, et comme tu n'as pas toujours protégé les données qui y ont été insérées, il se pourrait qu'elle contienne du code malicieux, par exemple un XSS snippet destiné à voler des données à tes visiteurs ou introduire des malwares sur leurs ordinateurs.
Quant au mauvais placement du while signalé par Dendrite… Eh bien c'est pire, maintenant il y en a deux !
Une dernière chose, que je rappelle souvent car apparemment les gens sont mal informés : quand il n'y a pas de variables ni de séquences d'échappement dans une chaîne, il faut préférer les guillemets simples. Non seulement c'est plus efficace pour l'interpréteur PHP, mais également, une fois qu'on a pris l'habitude, ça renforce la cohérence du code : quand on voit des guillemets simples on sait que la chaîne n'est pas censée contenir des variables, et réciproquement. En choisissant sciemment le type de guillemets, on exprime son intention sur le devenir de la chaîne. C'est plus rigoureux et ça ne demande que peu d'efforts.
Partager