Vous n'êtes pas identifié(e).
Pages :: 1
Bonsoir,
J'ai un petit souci pour mettre à jour une table mysql qui comprend 7 champs.
Voici le bout de code
Ca fonctionne très bien si je modifie les 7 enregistrements.
Seulement, si je ne modifie pas tous les enregistrements, les modifications se font sur les premiers champs dans l'ordre des ID de ceux ci.
Par ex, si je modifie seulement les champs 3, 6 et 7, soit 3 champs seulement, les modifs se font sur 1 2 et 3...
Je comprends bien mon erreur mais je ne vois pas comment faire ma boucle.
Quelqu'un a une idée svp ?
Hors ligne
Bonsoir,
Je pense que pour répondre à cette question, il faudrait aussi l'extrait du formulaire correspondant, car selon comment il est fait, il peut y avoir un comportement différent pour cette boucle.
@+
la v2, c'est tabou, on en viendra tous a bout
Hors ligne
Bonjour,
Je vais essayer d'être le plus clair possible. Mon formulaire utilise de l'ajax.
Voici un morceau du code
La fonction js
et le fichier scores.php où sont prises les valeurs
Ensuite en gros, si la personne prend l'equipe recevante vainqueur, ajax propose 30, 31 ou 32. Dans le cas contraire, c'est 03, 13 et 23 qui sont proposés.
La personne a donc 7 mini listes déroulantes dynamiques proposées pour ses pronostics.
Tout ceci fonctionne très bien si la personne pronostique pour les 7 listes déroulantes puisque ma fameuse boucle (dans mon 1er msg de ce topic) fait une série de 7 update consécutifs.
Seulement où ca cloche, c'est si elle laisse des vides. Par ex, elle pronostique seulement sur les rencontres 1 4 et 7. L'update à cause de cette fichue boucle se fait sur les champs 1 2 et 3.
A noter que mon problème est identique sur un INSERT en cas de pronostic initial.
C'est donc là que je cherche une solution pour faire un update multiple en "omettant" des champs.
J'espère être assez clair dans mes explications et ne pas avoir trop surchargé le message de code.
Hors ligne
Saluton,
Je pense que la solution consiste à forcer toi-même l'indexation de score[XX] dans scores.php.
XX correspondant à l'identifiant de la rencontre.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Plop,
En effet, c'est ce que je soupsonnais aussi.
Pour mieux faire comprendre le problème de la non indexation manuelle, il faut ajouter un petit élément : lors de la soumission d'un formulaire tel que celui la, quand un champs n'est pas rempli, il n'est pas créé dans les paramètres POST.
Autrement dit, si la personne ne pronostique que 3 rencontres, cela ne créé que trois éléments POST score[], donc l'indexation faite par php est 1, 2, 3
Il faut donc faire l'indexation manuellement comme le conseil MK.
Au passage, je serai partisan de modifier également la boucle de parcours du resultat, pourquoi parcourir 7 éléments quand il n'y en a que 3 par exemple
Ca donnerai quelque chose comme :
Idéalement, si le XX indiqué par MK est directement l'id du match, il peut meme y avoir un id_match="'.$c.'" directement.
ATTENTION
Ce code n'est pas du tout sécurisé, et est un bon candidat pour une injection SQL. En effet, seul le fait que le score ne soit pas vide est vérifié, par du tout ce qu'il peut contenir. Si quelqu'un force manuellement un score à '; DELETE FROM matable -- (par exemple), ben la table est vide (et encore, il a été gentil, il n'a pas fait un drop sur la base de données). Le nom de la table n'est pas si dur a obtenir, il suffit de faire un score qui provoque une erreur de requete, et elle s'affichera vu le code.
Il est donc très important, comme toujours, de s'assurer que les valeurs passées a une requete mysql soient un minimum filtrées, surtout quand elles viennent de l'utilisateur (POST, GET). Une petit expression rationnelle (régulière pour ceux qui préférent) pour vérifier que les variables utilisées pour la requete mysql ne sont que des chiffres serait une bonne idée dans ce cas.
@+
la v2, c'est tabou, on en viendra tous a bout
Hors ligne
Finalement j'ai entièrement revu mon code, très nettement simplifié et ça fonctionne du tonnerre
Hors ligne
Pages :: 1