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 13/01/2011, 08h58   #1
Invité régulier
 
Inscription : juin 2010
Messages : 61
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juin 2010
Messages : 61
Points : 7
Points : 7
Envoyer un message via MSN à andaman
Par défaut UPDATE MULTIPLE EN MYSQL

Bonjour,

Faire une INSERT INTO est simple. Cependant, je voudrais faire un UPDATE sur 4 enregistrements à la fois en passant en GET l'id_group(voir ci dessous).
Est ce que c'est possible? Si oui quelle syntaxe dois-je utiliser en MYSQL? j'ai déjà essayé pas mal de choses mais rien de convainquant

En sachant que je travaille avec un input text unique + champs cachés en javascript (pour l'INSERT et cela fonctionne) + liste déroulante pour le choix de la langue. Je voudrais faire la même chose pour l'UPDATE.

Merci d'avance.

Voici la structure de la table:



Le type de formulaire:

andaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 09h02   #2
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Code sql :
UPDATE ta_table SET id_country = valeur, iso_code = valeur, name_country = valeur WHERE id_group = valeur

Maintenant si tu veux modifier plusieurs enregistrements (et non plusieurs champs) il faut que tu fasses une boucle.
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 09h10   #3
Invité régulier
 
Inscription : juin 2010
Messages : 61
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juin 2010
Messages : 61
Points : 7
Points : 7
Envoyer un message via MSN à andaman
Merci de ta réponse.

En fait si tu regardes ma table, j'ai une colonne id_group. Qui est en fait une pseudo clé pour des listes déroulantes liées. L'id_group ne changera jamais.

En fait, lors de l'update, je voudrais qu'il modifier les 4 langues(Champ name_country).

Comment faire une boucle avec un update?

Merci d'avance
andaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 09h19   #4
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Bonjour,

tu dis que les champs cachés ont une référence au groupe, mais il manque la référence à la langue...

il faudrait que tu puisses faire une boucle avec un update du genre :


Code sql :
UPDATE 'matable' SET 'name_country' = 'valeur de l'input' where id_group = 'valeur id groupe' and lang='valeur langue';

seulement, on n'a pas assez d'info sur ton code pour te répondre objectivement.

__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 09h25   #5
Invité régulier
 
Inscription : juin 2010
Messages : 61
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juin 2010
Messages : 61
Points : 7
Points : 7
Envoyer un message via MSN à andaman
Merci de vos réponses.
Voici les éléments qui manquent:

Un bon de javascript pour mes champs cachés:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
function ChangeCountry(){
	var a = document.getElementById("country_fr");
	var b = document.getElementById("country_nl");
	var c = document.getElementById("country_uk");
	var d = document.getElementById("country_th");
 
	if(document.insert_country.lang_country.value =="fr"){
		if(a.style.display == "none")
			a.style.display = "inline";
	}else{
		a.style.display="none"
	}
	if(document.insert_country.lang_country.value =="nl"){
		if(b.style.display == "none")
			b.style.display = "inline";
	}else{
		b.style.display="none"
	}
	if(document.insert_country.lang_country.value =="uk"){
		if(c.style.display == "none")
			c.style.display = "inline";
	}else{
		c.style.display="none"
	}
	if(document.insert_country.lang_country.value =="th"){
		if(d.style.display == "none")
			d.style.display = "inline";
	}else{
		d.style.display="none"
	}
}
Et les input du form:

Code :
1
2
 
<input type="text" id="country_th" name="country_th" style="display: none" value="<?php echo $country_th?>"/>
andaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 11h19   #6
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
ben voilà...

donc si tu passe ton id_group en get, dans la page php qui effectue l'update tu devrais faire un truc du genre :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
if(isset($_GET['id_group'])) {
 
   $th= (isset($_POST['country_th'])) ? ($_POST['country_th']) : ("");
   $nl= (isset($_POST['country_nl'])) ? ($_POST['country_nl']) : ("");
   $fr= (isset($_POST['country_fr'])) ? ($_POST['country_fr']) : ("");
   $uk= (isset($_POST['country_uk'])) ? ($_POST['country_uk']) : ("");
   $id_group= ($_GET['id_group']);
 
   $datas= array(
         "th" => $th,
         "nl" => $nl,
         "fr" => $fr, 
         "uk" => $uk
   );
 
   foreach($datas as $key => $data) {
 
      // creation de la requete
      $sql= "UPDATE matable SET name_country = '".$data."' WHERE id_group = ".$id_group." AND lang='".$key."'";
 
      // execution la requete
 
 
   }   
 
 
}
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 11h54   #7
Invité régulier
 
Inscription : juin 2010
Messages : 61
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juin 2010
Messages : 61
Points : 7
Points : 7
Envoyer un message via MSN à andaman
Super ;-) Merci je vais tester cela et je te dis quoi.
andaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 12h43   #8
Invité régulier
 
Inscription : juin 2010
Messages : 61
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juin 2010
Messages : 61
Points : 7
Points : 7
Envoyer un message via MSN à andaman
Voilà ce que j'ai fait mais cela ne m'affiche qu'un seul input text.
Pourtant il est bien dans ma boucle. Cela fait trop longtemps que je suis sur ce souci LOL
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
<?php
include('tools/menu.php');
$sql = 'SELECT * FROM country WHERE id_group="'.$_GET['id_group'].'"';
$result = mysql_query($sql);
	while($row = mysql_fetch_array($result)){
		$country = $row['name_country'];
	}
if(isset($_GET['id_group'])) {
 
   $th= (isset($_POST['country_th'])) ? ($_POST['country_th']) : ("");
   $nl= (isset($_POST['country_nl'])) ? ($_POST['country_nl']) : ("");
   $fr= (isset($_POST['country_fr'])) ? ($_POST['country_fr']) : ("");
   $uk= (isset($_POST['country_uk'])) ? ($_POST['country_uk']) : ("");
   $id_group= ($_GET['id_group']);
 
   $datas= array(
         "th" => $th,
         "nl" => $nl,
         "fr" => $fr, 
         "uk" => $uk
   );
 
   foreach($datas as $key => $data) {
 
 
      $sql= "UPDATE country SET name_country = '".$data."' WHERE id_group = ".$id_group." AND lang='".$key."'";
      echo '<input type="text"name="country" value="'.$country.'"';
 
 
 
   }   
 
 
}
?>
andaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 18h06   #9
Invité régulier
 
Inscription : juin 2010
Messages : 61
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juin 2010
Messages : 61
Points : 7
Points : 7
Envoyer un message via MSN à andaman
Après avoir essayé pas mal de choses, je ne m'en sors toujours pas :s

J'ai essayé également d'adapter le code que m'avait fait ska_root mais pas moyen de boucler sur mes 4 langues. Il prend toujours la dernière. Cependant ma requête est celle ci-dessous mais il enregistre la valeur de name_country dans tous les id_group 026.

J'ai essayé ma requête directement dans phpmyadmin et cela fonctionne parfaitement.

Quelqu'un aurait une réponse pour m'aider?

Merci d'avance

Code :
1
2
 
UPDATE country SET name_country="Belgiquexsssssa" WHERE id_group="026" AND lang="th"
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
<?php
include('tools/menu.php');
context_title("Modifier un pays");
 
	$language = array("fr","nl","uk","th");
	$id_group= ($_GET['id_group']);
	$id = $_POST['id_country'];
	$country = $_POST['name_country'];
	$sql = 'SELECT * FROM country WHERE id_group="'.$id_group.'"';
	$result = mysql_query($sql);
	$count = mysql_num_rows($result);
 
	echo '<form method="post">';
	echo "\n";
	while($row = mysql_fetch_array($result)){	
		echo '<input type="text" name="name_country" value="'.$row['name_country'].'">';
		echo "\n";
		echo '<input type="hidden" name="country" id="hiddenField" value="'.$row['name_country'].'"/>';
		echo "\n";
		echo '<input type="hidden" name="id" id="hiddenField" value="'.$row['id_country'].'"/>';
		echo "\n";
	}
		echo '<input type="submit" name="Submit" value="Submit">';
		echo "\n";
		echo '</form>';
		echo $sql;
 
if($_POST['id'] != ""){	
 
	foreach($language as $value){	
		$update = 'UPDATE country SET name_country="'.$country.'" WHERE id_group="'.$_GET['id_group'].'" AND lang="'.$value.'"';			
		$result_update = mysql_query($update);		
	}
	if(!$result_update){
		echo 'error<br>';
	}else{
		echo '<br>perfect<br>';
	}
}
	print_r($value)."<br>";
	echo "<br>".$update ."<br>";
	echo "le pays est: ".$country."<br>";
	echo 'le nombre est: ' .$count."<br>";
?>
andaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 18h29   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
c'est normale le $_GET et le $_POST en même temps ? active le mysql.trace_mode aussi :

Code :
ini_set('mysql.trace_mode', true);
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 18h34   #11
Invité régulier
 
Inscription : juin 2010
Messages : 61
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juin 2010
Messages : 61
Points : 7
Points : 7
Envoyer un message via MSN à andaman
Non c'est pas normal...
Je suis dans la semoule et je ne m'en sors pas... Voilà pq je poste ici
andaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 18h41   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par andaman Voir le message
Non c'est pas normal...
Je suis dans la semoule et je ne m'en sors pas... Voilà pq je poste ici
oki, on va déjà vérifier ce qui arrive, au début de ton code fait :

Code :
1
2
echo '<pre>', print_r($_GET, true),  print_r($_POST, true), '</pre>';
exit;
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 19h04   #13
Invité régulier
 
Inscription : juin 2010
Messages : 61
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juin 2010
Messages : 61
Points : 7
Points : 7
Envoyer un message via MSN à andaman
En ayant mis ton code, cela me renvoi ceci:

Code :
1
2
3
4
5
6
7
8
9
 
Array
(
    [section] => update_country
    [id_group] => 026
)
Array
(
)
andaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 19h26   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par andaman Voir le message
En ayant mis ton code, cela me renvoi ceci:

Code :
1
2
3
4
5
6
7
8
9
 
Array
(
    [section] => update_country
    [id_group] => 026
)
Array
(
)
donc que du GET pour le moment, montre ton formulaire
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 19h42   #15
Invité régulier
 
Inscription : juin 2010
Messages : 61
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juin 2010
Messages : 61
Points : 7
Points : 7
Envoyer un message via MSN à andaman
Merci de ta réponse.

Que dois-je faire? Je ne demande pas un réponse tout faite ni qu'on me le code. Pourrait-on m'expliquer par où commencer?
andaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 19h47   #16
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par andaman Voir le message
Merci de ta réponse.

Que dois-je faire? Je ne demande pas un réponse tout faite ni qu'on me le code. Pourrait-on m'expliquer par où commencer?
montre ton formulaire html
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 19h50   #17
Invité régulier
 
Inscription : juin 2010
Messages : 61
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juin 2010
Messages : 61
Points : 7
Points : 7
Envoyer un message via MSN à andaman
Tout est dans ma page avec ce code.

Je travail en MVC mais avant de l'appliquer, je fais des tests.

En fait j'ai l'impression que ma boucle ne fonctionne pas

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
<?php
// echo '<pre>', print_r($_GET, true),  print_r($_POST, true), '</pre>';
// exit;
include('tools/menu.php');
context_title("Modifier un pays");
 
	$language = array("fr","nl","uk","th");
	$id_group= ($_GET['id_group']);
	//$id = $_POST['id_country'];
	//$country = $_POST['name_country'];
	$sql = 'SELECT * FROM country WHERE id_group="'.$id_group.'"';
	$result = mysql_query($sql);
	$count = mysql_num_rows($result);
 
	echo '<form method="post">';
	echo "\n";
	while($row = mysql_fetch_array($result)){	
		echo '<input type="text" name="name_country" value="'.$row['name_country'].'">';
		echo "\n";
		echo '<input type="hidden" name="country" id="hiddenField" value="'.$row['name_country'].'"/>';
		echo "\n";
		echo '<input type="hidden" name="id" id="hiddenField" value="'.$row['id_country'].'"/>';
		echo "\n";
	}
		echo '<input type="submit" name="Submit" value="Submit">';
		echo "\n";
		echo '</form>';
		echo $sql;
 
if($_POST['id'] != ""){	
 
	foreach($language as $value){	
		$update = 'UPDATE country SET name_country="'.$country.'" WHERE id_group="'.$_GET['id_group'].'" AND lang="'.$value.'"';			
		$result_update = mysql_query($update);		
	}
	if(!$result_update){
		echo 'error<br>';
	}else{
		echo '<br>perfect<br>';
	}
}
	print_r($value)."<br>";
	echo "<br>".$update ."<br>";
	echo "le pays est: ".$country."<br>";
	echo 'le nombre est: ' .$count."<br>";
?>
andaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 20h23   #18
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
ca c'est ton code PHP, montre ce que ca donne dans ta page HTML, le code source
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 20h26   #19
Invité régulier
 
Inscription : juin 2010
Messages : 61
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juin 2010
Messages : 61
Points : 7
Points : 7
Envoyer un message via MSN à andaman
Autant pour moi
Le voici:
Je n'arrive pas à récupérer la value du champ name_country sauf si je mets:
Code :
1
2
 
$country = $_POST['name_country'];
et cela me donne ceci mais ne prends pas la langue que je veux:

Code :
1
2
 
UPDATE country SET name_country="&#3629;&#3636;&#3605;&#3634;&#3621;&#3637;" WHERE id_group="127" AND lang="th"
code source:
Code :
1
2
3
4
 
<input type="text" name="name_country" value="&#3629;&#3636;&#3605;&#3634;&#3621;&#3637;"> 
<input type="hidden" name="country" id="hiddenField" value="&#3629;&#3636;&#3605;&#3634;&#3621;&#3637;"/> 
<input type="hidden" name="id" id="hiddenField" value="65"/>
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
</div><h1>Modifier un pays</h1> 
<form method="post"> 
<input type="text" name="name_country" value=""> 
<input type="hidden" name="country" id="hiddenField" value=""/> 
<input type="hidden" name="id" id="hiddenField" value="60"/> 
<input type="text" name="name_country" value=""> 
<input type="hidden" name="country" id="hiddenField" value=""/> 
<input type="hidden" name="id" id="hiddenField" value="59"/> 
<input type="text" name="name_country" value=""> 
<input type="hidden" name="country" id="hiddenField" value=""/> 
<input type="hidden" name="id" id="hiddenField" value="58"/> 
<input type="text" name="name_country" value=""> 
<input type="hidden" name="country" id="hiddenField" value=""/> 
<input type="hidden" name="id" id="hiddenField" value="57"/> 
<input type="submit" name="Submit" value="Submit"> 
</form>SELECT * FROM country WHERE id_group="026"<br><br>le pays est: <br>le nombre est: 4<br> 
</div> 
<address>14/01/2011 <a href="mailto:mr.taylordavid@gmail.com">mr.taylordavid@gmail.com</a></address>
andaman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 20h28   #20
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
il on tous le meme nom donc seul le dernier est pris en compte, il faut creer des tableaux

Code :
1
2
3
<input type="text" name="name_country[]" value=""> 
<input type="hidden" name="country[]" id="hiddenField" value=""/> 
<input type="hidden" name="id[]" id="hiddenField" value="60"/>
rajoute le action aussi dans ton form
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h36.


 
 
 
 
Partenaires

Hébergement Web