8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un souci, ce que j'aimerais faire c'est updater une base de donnée en utilisant une boucle for comme suit :

for($i=0; $i<=4; $i++)
{
	requete('UPDATE regie_location_galeries_images 
		
	SET galeries_images_galerie=\'\', galeries_images_ordre=\''.$i.'\' 
		
	WHERE galeries_images_galerie=\''.$_GET['galerie'].'\'', $connexion);
}


Mon problème est que la variable $i ne fait pas ce que elle devrait c'est à dire augmenter de 1 à chaque fois pour arriver à 4...

Si quelqu'un avait une idée, ça serait sympa de la partager...

ça m'embête beaucoup que cela ne fonctionne pas, car ce code est pour donner un ordre à des images et suivant cette ordre certaine de mes balises sont fermées, si ça ne fonctionne pas, mon code devient non valide Smiley bawling ...

Merci beaucoup!!!
Modifié par le rouge (10 Jan 2008 - 13:29)
En fait, il faudrait que ma requête prenne les éléments de la table 1 à 1 et pas tout les éléments à la fois qui sont définit par le get de la galerie...

++
Salut le rouge Smiley cligne ,

je ne vois aucune raison pour que $i ne soit pas incrémenté de 0 à 4 Smiley rolleyes ... Par contre, comme $_GET['galerie'] ne varie pas, la clause WHERE n'est jamais modifiée et du coup seule la dernière valeur (4) va effectivement être utilisée pour l'UPDATE...

A+
Justement, c'est bien ça le problème. D'ailleurs je l'ai compris, mais je n'arrive pas à le résoudre... Smiley ohwell

Tu aurais une idée? Ou quelqu'un d'autre?

Merci pour ta réponse.
Tu pourrais expliquer la règle que tu veux utiliser pour déterminer l'ordre de 0 à 4 qu'il faut mettre ?
La règle? Je sèche là...

Ce que j'aimerais faire, c'est que lorsque la fonction est appelée, l'update se fasse de façon récursive à chaque élément visé par le Where. Et pas tous en même temps...

En gros que :

l'élément 1 prenne la valeur 1 pour l'ordre
l'élément 2 la valeur 2 pour l'ordre
l'élément 3 la valeur 3 pour l'ordre
etc.

Si tu veux des précisions, je suis là...

Merci beaucoup
Modifié par le rouge (10 Jan 2008 - 12:45)
Ah OK... je crois que j'ai compris :

- pour une galerie sélectionnée ($_GET['galerie']). Récupérer les 5 enregistrements qui existent et incrémenter l'ordre de 0 à 4 ?

J'ai bon Smiley murf ?
Modifié par Heyoan (10 Jan 2008 - 12:50)
Oui, enfin presque oui...

Effectivement pour une galerie donnée, récupérer les enregistrements, mais 4 pas 5 et incrémenter de 1 à 4. En sachant que ils ont déjà un ordre assigné, donc il faut faire un update.

C'est bon là?

Merci bien...
Modifié par le rouge (10 Jan 2008 - 12:56)
mais tu as defini des triggers dans ta bases de données?

sinon je n'arrive pas a comprendre pourquoi le fait d'executé ta requete tout d'un coup ou un par un ferait la moindre difference.

ici tu fais mets moi machin a 1 puis machin a 2 puis machin a 3 puis machin a 4 donc au final machin est a 4.

si tu veux que quand la base de données vaut 1 ca fasse quelquechose faut que tu execute du code php l'utilisant

ou alors y a des procedures stockées declenché par un trigger quelque part?
edit : ou alors c'est le where qui est faux. là tu ne precise que la galerie...donc tu update toute kes images de la galerie en même temps a chaque fois.

si tu veux changer l'ordre des images tu dois affiné ton where pour qu'il traite chaque image une par une.
Modifié par CPascal (10 Jan 2008 - 13:03)
Oui, c'est juste, c'est mets moi machin 1 à 1 puis à 2 puis à 3 etc.

Mais ce que j'aimerais c'est mets moi machin1 à 1 puis machin2 à 2 puis machin3 à 3 puis machin4 à 4... C'est toucher des éléments différents qui sont dans la même galerie...
Si tu n'as aucune règle pour attribuer l'ordre de 1 à 4 excepté l'ordre de récupération des enregistrements, tu pourrais tout simplement faire ça en 2 fois :

1) faire une requête : récupération des id de tous les enregistrements ayant comme galerie $_GET['galerie']

2) $i = 1
pour chaque id trouvé faire un UPDATE et incrémenter $i de 1.
Si $i >4 ==> $i = 1

Edit: tiens ! J'ai loupé un échange Smiley biggol !
Modifié par Heyoan (10 Jan 2008 - 13:02)
CPascal a écrit :
edit : ou alors c'est le where qui est faux. là tu ne precise que la galerie...donc tu update toute kes images de la galerie en même temps a chaque fois.

si tu veux changer l'ordre des images tu dois affiné ton where pour qu'il traite chaque image une par une.


Ok, mais comment le faire justement?

Bon je vais déjà essayer la méthode à Heyoan...

Marci!
heyoan t'as expliquer un truc juste me semble.

je reviens juste sur un truc d'avant

tu faisais

SET galeries_images_galerie=\'\' ........ 		
	WHERE galeries_images_galerie=\''.$_GET['galerie'].'\''


dans ta boucle. donc logiquement même seul le premier update s'executait puisqu'apres avoir fais le premier update il n'existait plus dans la base de données d'enregistrement qui repondait a la condition du where
Modifié par CPascal (10 Jan 2008 - 13:11)
Je sais, il me mettait comme ordre à tout les éléments la valeur 1.

Ce qui est normal. Le principe je l'ai compris, je ne vois juste pas comment le faire...

D'ailleurs, je ne veux pas abuser, mais je n'arrive pas à faire la méthode de Heyoan, si tu pouvais m'aiguiller, ou me montrer un bout de code?

Merci en tout cas, c'est vraiment chouette!
CPascal a écrit :
seul le premier update s'executait puisqu'apres avoir fais le premier update il n'existait plus dans la base de données d'enregistrement qui repondait a la condition du where
Ah oui ! Exact Smiley langue !
Un truc dans ce style :
<?php
$sql = "Select id from regie_location_galeries_images WHERE galeries_images_galerie='".$_GET['galerie']"'";
$res = mysql_query($sql) or die (mysql_error());
$increment = 1;
while ($row = mysql_fetch_array($res)) {
	$sql2 = "Update regie_location_galeries_images SET galeries_images_galerie='', galeries_images_ordre='".$increment."' WHERE id='".$row['id']"'";
	$res2 = mysql_query($sql2) or die (mysql_error());
	$increment +=1;
	if ($increment > 4) $increment = 1;
}
?>
en remplaçant id par le vrai nom de l'identifiant
Modifié par Heyoan (10 Jan 2008 - 13:29)
Youpi, j'ai réussi grâce à la méthode de Heyoan...

Merci merci!!!

Si jamais :


// ON MET A JOUR LES AUTRES IMAGES //

while($message = objetsuivant($requete))
{
	// ON RECUPERE L'ORDRE MAX //

	$ordre_max = requete('SELECT MAX(galeries_images_ordre) 
		
	FROM regie_location_galeries_images 
		
	WHERE galeries_images_galerie=\'\'', $connexion);

	$ordre_max = mysql_result($ordre_max , '0', 'MAX(galeries_images_ordre)');

	// SI IL Y A PAS D'IMAGE UPLOADE //

	if(!isset($ordre_max))
	{
		$ordre_max = '0';
	}

	$nouvelle_ordre = $ordre_max + 1;

	requete('UPDATE regie_location_galeries_images 
			
	SET galeries_images_galerie=\'\', galeries_images_ordre=\''.$nouvelle_ordre.'\' 
			
	WHERE galeries_images_id=\''.$message->galeries_images_id.'\'', $connexion);
}


Ou requete est une fonction mysql_query.

Ha je suis content, une bonne chose de faite...

Edit : Je t'ai devancé... Mais je vais regarder ce que tu a mis, voire si je peux améliorer ma fct...
Modifié par le rouge (10 Jan 2008 - 13:24)