Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/07/2011, 12h33   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 57
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 57
Points : 11
Points : 11
Par défaut [UPDATE] Plusieurs ligne d'une même table

Bonjour,

J'ai un souci concernant l'update d'une table où je souhaiterais mettre à jour plusieurs lignes en une seule fois.

J'ai une table "match" et je voudrais mettre à jour les scores de chaque journée.

Les matches s'affichent sous forme de boucle:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
$sql->DatabaseConnexion();
$journee= $_GET['id_journee'];
$journee_matches = $sql->query("SELECT *
WHERE id_journee='$journee' ORDER BY id_match ASC")or die (mysql_error());
while ($results=mysql_fetch_array($journee_matches,MYSQL_ASSOC)) {
static $i = 1;
 
	$tpl->assign_block_vars('journee_matches', array(
					'ID_MATCH' => $results['id_match'],
					'CLUB_DOM' => stripslashes($results['club_dom']),
					'CLUB_EXT' => stripslashes($results['club_ext']),
					'NUM_CHAMPS' => $i++,
					'MOD_SCORE_DOM' => $results['buts_dom'],
					'MOD_SCORE_EXT' => $results['buts_ext'],
					/* Champs HIDDEN */
					'ID_MOD' => $results['id_match'],
					));
 
}
$sql->DatabaseClose();
?>
Sur ce code ci-dessus, je n'ai pas de souci, les matches s'affichent et si je rentre manuellement des scores sur phpMyAdmin, ces derniers s'affichent.

Le souci vient sur ma requête UPDATE.
Je pars de ceci:
Code :
1
2
3
4
5
6
7
8
<?	$sql->DatabaseConnexion();
	// On met a jour le produit
$req = "UPDATE "._TCHAMPMATCH_." SET `buts_dom`='".$_POST['buts_dom']."',
`buts_ext`='".$_POST['buts_ext']."' WHERE id_match='".$_POST['id_match']."'";
$modifier = $sql->query($req); 
$results=mysql_query($req) or die(mysql_error());
 
	$sql->DatabaseClose();?>
J'ai du mal à comprendre comment gérer une boucle avec l'update...

Mon code HTML:
Code :
1
2
3
4
5
6
7
8
<html><form action="" method="post" enctype="multipart/form-data" name="add_resultats" id="form_add_resultats">
			    <!-- BEGIN journee_matches -->
          {journee_matches.CLUB_DOM} <input name="buts_dom" type="text" id ="buts_dom" value="{journee_matches.MOD_SCORE_DOM}" size="2" /> 
 - <input name="buts_ext" type="text" id ="buts_ext" value="{journee_matches.MOD_SCORE_EXT}" size="2" />
 {journee_matches.CLUB_EXT}
<input type="hidden" name="{journee_matches.ID_MATCH}" value="{journee_matches.ID_MOD}" />
<!-- END journee_matches -->
					  <input type="submit" name="submit" value="Valider" /></form></html>
Si je pouvais avoir de l'aide, ça serait super parceque ça fait des semaines que je bloque sur ce truc et ça conditionne tout le reste de mon projet...
Merci beaucoup!
Vinuto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2011, 13h51   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Pas besoin d'une boucle, update fonctionne sur plusieurs tuples si tu sais les discriminer correctement.

Tu peux par exemple mettre à jour plusieurs lignes identifées par id avec une clause IN
Code :
UPDATE table SET colonne=valeur WHERE id IN (1,2,3...)
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2011, 14h03   #3
Membre Expert
 
Avatar de kdmbella
 
Homme Demazy Mbella
Développeur Web
Inscription : août 2010
Messages : 620
Détails du profil
Informations personnelles :
Nom : Homme Demazy Mbella
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : août 2010
Messages : 620
Points : 1 470
Points : 1 470
j'ajouterait que lorsque tu fais plusieurs update faut utiliser une boucle et des transactions car si t'a 10 update et que seul 6 sont réalisés avec succès il faut dans ce cas faire un roolback pour ne pas rendre ta BD incohérente!
kdmbella est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2011, 14h21   #4
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 57
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 57
Points : 11
Points : 11
Citation:
Envoyé par Benjamin Delespierre Voir le message
Pas besoin d'une boucle, update fonctionne sur plusieurs tuples si tu sais les discriminer correctement.

Tu peux par exemple mettre à jour plusieurs lignes identifées par id avec une clause IN
Code :
UPDATE table SET colonne=valeur WHERE id IN (1,2,3...)
A vrai dire, je ne connais pas du tout. J'ai regardé sur le net, j'ai vu que c'était les utilisateurs de PDO qui utilisaient cette méthode.
Vinuto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2011, 15h27   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Peu importe le driver de connexion que tu utilise, c'est au niveau SQL que tu décris ça.

En revanche, les transactions et les requêtes préparées sont plus simples à manipuler avec PDO. Dans tous les cas et si tu le peux, je te recommande d'utiliser PDO.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 08h38   #6
Membre régulier
 
Inscription : juillet 2007
Messages : 62
Détails du profil
Informations personnelles :
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juillet 2007
Messages : 62
Points : 82
Points : 82
Question bête, mais pourquoi t'as besoin d'une boucle? Ton formulaire est simple, les données sont uniques pour un SEUL match ( buts_dom, buts_ext, id_match). Ta requete est bien comme ça elle sert à mettre à jour les données d'un seul match.
kodeya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2011, 12h26   #7
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 57
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 57
Points : 11
Points : 11
Citation:
Envoyé par kodeya Voir le message
Question bête, mais pourquoi t'as besoin d'une boucle? Ton formulaire est simple, les données sont uniques pour un SEUL match ( buts_dom, buts_ext, id_match). Ta requete est bien comme ça elle sert à mettre à jour les données d'un seul match.
Non, en faite, le formulaire me sort la liste des matches de chaque journée en faisant une boucle.
Du coup, pour éviter d'avoir à valider chaque résultat 1 par 1, ce qui serait très très long, je voudrais avoir à valider la journée entière.

Je suis dessus depuis des jours mais j'arrive toujours pas à comprendre pourtant je suis sur que c'est pas si compliqué que ça...
Vinuto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 11h20   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 008
Points : 18 279
Points : 18 279
Envoyer un message via MSN à CinePhil
Tu peux avoir sur ton formulaire un bouton qui valide tous les matches de la journée et ce bouton va déclencher une procédure qui va faire les X requêtes UPDATE nécessaires à la mise à jour des X matches grâce à une boucle sur le tableau PHP des résultats que tu auras renseignés.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h18.


 
 
 
 
Partenaires

Hébergement Web