Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 23/03/2011, 11h50   #1
Invité de passage
 
Alexandre LABURE
Inscription : janvier 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Alexandre LABURE

Informations forums :
Inscription : janvier 2011
Messages : 8
Points : 1
Points : 1
Par défaut Organiser des pages [PHP5][SQL5]

Bonjour,

J'ai réaliser une petite application qui crée automatiquement des pages. Dans ma base j'ai un champ 'ID', un champ 'Ordre' et je peux organiser à la main l'ordre d'affichage depuis le champ ordre.

La problématique qui me pousse d'abord à trouvé un algorithme valable puis ensuite son développement réel est que je n'arrive pas à automatisé cette tâche.

En effet, lorsque je fait l'affichage, pour l'exemple j'ai
Code :
1
2
3
4
5
6
7
 
ID|Ordre|Page|Bouton Up|bouton Down
1 | 2 | Page 1 | Up | Down
2 | 4 | Page 2 | Up | Down
5 | 6 | Page 5 | Up | Down
4 | 8 | Page 3 | Up | Down
1 | 10 | Page 4 | Up | Down
Si je clique sur sur up, mettons au lien Page 3. Il doit remplacer Page 5 avec le chiffre 6 dans le champ Ordre. Le chiffre 6 dois descendre pour le chiffre 8 dans le champ Ordre. L'ID ne change pas, bien entendu.

Affin d'illustrer le résultat que ça devrais donner:
Code :
1
2
3
4
5
6
7
 
ID|Ordre|Page|Bouton Up|bouton Down
1 | 2 | Page 1 | Up | Down
2 | 4 | Page 2 | Up | Down
4 | 6 | Page 3 | Up | Down
5 | 8 | Page 5 | Up | Down
1 | 10 | Page 4 | Up | Down
J'ai essayer la chose suivante :
-Décaler indépendamment l'ordre, puis UPDATE. Sans succès.
-Décaler d'un cran et refaire le count de 2 en 2. Sans succès.
-Faire du multi-requêtage sir les ID, Sans succès.

Ce que je cherche maintenant :
-Un algorithme pour essayer de faire une automatisation de cette tâche
-Le cas échéant un lien pouvant expliquer cette automatisation. Mes récherches étant infructueuses.

Dans l'attente de votre aide.
Merci
Acanthe.Info est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 12h30   #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 014
Points : 5 014
La solution la plus simple consiste à intervertir le champ "ordre" de deux éléments pour faire monter / descendre un élément par rapport à l'autre.
Tu fais ça très simplement en envoyant deux requêtes UPDATE.
__________________
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 23/03/2011, 13h00   #3
Invité de passage
 
Alexandre LABURE
Inscription : janvier 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Alexandre LABURE

Informations forums :
Inscription : janvier 2011
Messages : 8
Points : 1
Points : 1
Sur le principe, je suis entièrement d'accord avec toi.

Mais voila, il y a un 'mais'...

Je connais l'ID du champ qui donne l'ordre. En revanche je ne connais pas l'ID du second champ qui doit bouger.

Cela supposerais que si je découpe logiquement ce qui devrais être fait, on obtiendrais les étapes suivantes:
  1. Placer Page 3, ordre 8 -1 = 7 dans un update (ok, je sait faire)
  2. Placer Page 5, ordre 6 + 2 dans un update (La je cherche un moyen simple sans requêtes complémentaire pour trouver le bon ID)
  3. Réorganiser de 2 en 2 les ordres en partant de 2 dans un update (Je pense que c'est faisable, mais sous mysqli, c'est moins sûr)
  4. Lancer un affichage du résultat à l'écran (Ok, j'ai ce qui faut sous la main)

Peut-être une piste
Acanthe.Info est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 13h18   #4
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Avec les fonctions min() et max() de SQL tu peux t'en sortir.
Il faut récupérer l'id d'ordre maximum qui est inférieur à ton ordre courant pour remonter ta page.
Et il faut récupérer l'id d'ordre minimum qui est supérieur à ton ordre courant pour descendre ta page.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 13h21   #5
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
Personnellement, j'ai eu un cas similaire:

Réorganiser des lignes de tableau. (Tu peux faire une ligne de tableau = 1 page).

http://www.isocra.com/2008/02/table-...jquery-plugin/

Tu peux utiliser l'exemple du deuxieme tableau. Ca permet le "drag and drop" en js de ligne de tableau (<tr>) et ça appelle une fonction de callback lorsque tu as modifié l'emplacement d'une ligne.

test l'exemple tu verras. A toi d'adapter la valeur des TR etc...
__________________
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 23/03/2011, 13h30   #6
Invité de passage
 
Alexandre LABURE
Inscription : janvier 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Alexandre LABURE

Informations forums :
Inscription : janvier 2011
Messages : 8
Points : 1
Points : 1
Effectivement l'utilisation du JS est possible mais dans mon cas à éviter à tout prix. Donc je retourne sur l'idée de faire en tout PHP.

Maintenant voyons pourquoi je donne une telle réponse négative.
  1. Déjà il y a le risque que cela ne s'exécute pas correctement partout.
  2. Il y a aussi le risque que le navigateur soit dépourvus de JS ou même désactivé (cas de certaines entreprises)
  3. Il faut songé que c'est une technologie non fiable car c'est un langage exécuté cotès client et d'ont les effets réels ne sont pas vérifiable
  4. Enfin c'est un langage que je ne maitrise pas complètement, donc une modification ne me sera pas aisée

En Php maintenant, je m'interroge sur la fonction max() et min(). Je n'ai pas eu l'occasion de les employés et un exemple pourra peut-être me décider à gratté sur ce sujet.

J'espère que je ne déçois pas trp en faisant une exclusion totale du JS mais je pense que c'est pas fiable à 100%. Je n'ai hélas pas droit à l'erreur, donc un script PHP est obligatoire.
Acanthe.Info est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 14h09   #7
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 014
Points : 5 014
Citation:
Je connais l'ID du champ qui donne l'ordre. En revanche je ne connais pas l'ID du second champ qui doit bouger.
Bien sûr que si ! Quand tu affiche la liste, il te suffit de mettre les deux id dans le lien:
Code :
1
2
3
 
<a href="mon_site/move_page.php?id_page_1=X&id_page_2=Y">Up</a>
<a href="mon_site/move_page.php?id_page_1=Y&id_page_2=X">Down</a>
Après faire les requêtes c'est tout bête.
__________________
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 23/03/2011, 14h33   #8
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
Ok pour le fait que le JS ne soit pas sur tout les navigateurs ou désactivé. Pour ce qui est de la fiabilité, je ne suis pas trop d'accord. (même si ce n'est pas le sujet ^^). Tu fais ton JS (qui ne demande pas énormément de connaissance si ce n'est de placer les ID de page dans les ID de TR.

Ensuite, tu récupères une chaîne varchar de la longueur de l'ordre des TR (que tu as modifié) il te suffit ensuite de faire un explode et de vérifier (regex?) que ce que tu récupères est valide. Foilà. ^^
__________________
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 23/03/2011, 14h40   #9
Invité de passage
 
Alexandre LABURE
Inscription : janvier 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Alexandre LABURE

Informations forums :
Inscription : janvier 2011
Messages : 8
Points : 1
Points : 1
Radical... Cherche pas à me convertir, le JS est de loin le codage qui n'est pas fiable ni exécuté de façon identique partout

Bon j'ai essayer ceci:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
//Si l'ordre est de monter d'un cran
				if($_REQUEST['ordre'] == 'Up') {
 
					$nouvellePositionUp = $ordreOrigine-1;
					$nouvellePositionDown = $ordreOrigine;
					$ordreOld = $ordreOrigine-2;
 
					$set = "
						UPDATE `".$this->table."` SET `Ordre`='$nouvellePositionUp' WHERE `Ordre`='$ordreOrigine'; 
						UPDATE `".$this->table."` SET `Ordre`='$nouvellePositionDown' WHERE `Ordre`='$ordreOld';
					";
					$request = $bdd->multi_query($set);
 
					//Réorganiser ordre
 
				}
Ça fonctionne à un détail prêt. Il faut maintenant que je réorganise le champ ordre.

Avant l'exécution de la requête Up :
Code :
1
2
3
4
 
2  	Up 	Down 	Première page
4 	Up 	Down 	Page de tests
6 	Up 	Down 	Essai de page
Après l'exécution de la reqête Up:
Code :
1
2
3
4
 
3 	Up 	Down 	Page de tests
4 	Up 	Down 	Première page
6 	Up 	Down 	Essai de page
Il faut maintenant que ça réorganise comme ceci:
Code :
1
2
3
4
 
2	Up 	Down 	Page de tests
4 	Up 	Down 	Première page
6 	Up 	Down 	Essai de page
Et le tour est joué
Acanthe.Info 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 21h36.


 
 
 
 
Partenaires

Hébergement Web