IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

notion de position avec php/mysql


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 16
    Points
    16
    Par défaut notion de position avec php/mysql
    bonjour à tous,

    j'ai un petit souci par rapport à un système de menu que j'essaie de développer dans le cadre d'un stage.

    J'ai une table qui contient mes menus principaux :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE `parents_menus` (
      `id_menu_parent` int(11) NOT NULL auto_increment,
      `nom_menu` varchar(50) default NULL,
      `image_fond` varchar(50) default NULL,
      `publie` int(11) NOT NULL default '0',
      `position` int(11) NOT NULL default '0',
      PRIMARY KEY  (`id_menu_parent`)
    )

    J'ai développé sans pb l'ajout et la suppression de menu mais maintenant, j'aimerais mettre la notion de position. C'est à dire que je pourrais décider si le menu x sera en 2eme, 3eme ou 4eme position. Mais le vraiment problème, c'est qu'il faut que les autres menus d'adaptent au changement d'une position.

    C'est à dire que si j'avais le menu y en 3eme place et que je souhaite mettre le menu x en 3eme place, je voudrais que le menu y et le menu z soit décalé. Comment faire?

    Merci d'avance pour votre réponse

  2. #2
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Hum, moi ce que je ferais:
    -Je récupère dans la table tous les menu a partir de la nouvelle position:

    0*Menu1
    1*Menu2
    2*Menu3
    3*Menu4

    Si je veut mettre le Menu4 en position 1, je récupère de Menu2 à Menu4.
    Ensuite, j'ajoute 1 a la position de chaque Menu, ce qui donne
    2*Menu2
    3*Menu3
    4*Menu4

    Et la je sait que le Menu4 va en postion 1, donc je change sa postion et je met 1.

    Par contre si j'avais eu:
    0*Menu1
    1*Menu2
    2*Menu3
    3*Menu4
    4*Menu5
    5*Menu6
    6*Menu7

    Toujours Menu4 en position 1. Je prend donc tout ca:
    1*Menu2
    2*Menu3
    3*Menu4

    Je leur ajoute 1, sauf a ceux qui sont après:
    2*Menu2
    3*Menu3
    4*Menu4

    Je change la postion de Menu4 en lui mettant 1 et j'obtient:
    0*Menu1
    1*Menu4
    2*Menu2
    3*Menu3
    4*Menu5
    5*Menu6
    6*Menu7
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    oui là dessus, on est d'accord, mais comment?

  4. #4
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Moi je voit ca comme ca:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    $position_arrivee = 1;
    $menu_a_deplacer = 'menu4';
    $position_actuelle = 3;
    $res = mysql_query('SELECT nom_menu, position FROM parents_menus WHERE position BETWEEN '. $position_arrivee .' AND '. $position_actuelle .' ORDER BY position');
     
    $menudep = array();
    while($menu = mysql_fetch_assoc($res)) {
    	$menu['position']++;
    	if($menu['nom_menu'] == $menu_a_deplacer)
    		$menu['position'] = $position_arrivee;
    	array_push($menudep, $menu);
    }
     
    foreach($menudep as $menuarr) {
    	mysql_query('UPDATE parents_menus SET position = '. $menuarr['position'] .' WHERE nom_menu ="' . $menuarr['nom_menu'] .'"');
    }
    J'ai ete un peu vite y a pal mal d'erreur meme si le principe est la je corrige

    Edit: Voila corrigé et testé ca marche parfaitement
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    ok merci je teste ça demain, là j'ai fini le taf mais je te dis quoi en tout cas merci de ton aide

  6. #6
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Oki tient nous au courant J'ai corriger une faute donc pense bien a reprendre le code Un espace oublié mais la requête marche pas sinon
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  7. #7
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Bon voila version amélioré:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $position_arrivee = 3;
    $menu_a_deplacer = 'menu4';
    $res = mysql_query('SELECT position FROM parents_menus WHERE nom_menu="'. $menu_a_deplacer .'"');
    $pos = mysql_fetch_assoc($res);
    $position_actuelle = $pos['position'];
    $position_arrivee > $position_actuelle ? $sup = TRUE : $sup = FALSE;
    if($sup)
    	$res = mysql_query('SELECT nom_menu, position FROM parents_menus WHERE position BETWEEN '. $position_actuelle .' AND '. $position_arrivee .' ORDER BY position');
    else
    	$res = mysql_query('SELECT nom_menu, position FROM parents_menus WHERE position BETWEEN '. $position_arrivee .' AND '. $position_actuelle .' ORDER BY position');
     
    $menudep = array();
    while($menu = mysql_fetch_assoc($res)) {
    	$sup ? $menu['position']-- : $menu['position']++;
    	if($menu['nom_menu'] == $menu_a_deplacer)
    		$menu['position'] = $position_arrivee;
    	mysql_query('UPDATE parents_menus SET position = '. $menu['position'] .' WHERE nom_menu ="' . $menu['nom_menu'] .'"');
    }
    Tu a juste a préciser la nouvelle place et le menu a déplacer.
    On récupère la position actuelle dans la table, et ensuite on vérifie si on doit incrémenter ou décrémenter pour le déplacement
    J'ai testé ca marche parfaitement
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    ca marche nickel, merci bcp Par contre je vais te demander autre chose. En fait à ces différents menu principaux, j'ai associé des sous-menus.

    Voici la table :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE `navig_menu` (
      `id_item` int(11) NOT NULL auto_increment,
      `menu_parent` int(11) default NULL,
      `id_element` int(11) default NULL,
      `type` int(11) default NULL,
      `designation` varchar(50) NOT NULL default '',
      `position` int(11) default NULL,
      `publie` int(11) default '0',
      PRIMARY KEY  (`id_item`)
    )

    en fait, ils sont associés a des menu_parents donc là table avec laquelle on a travaillé précedemment. Comment procéder? La technique est-elle la même?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    oubliez ce que j'ai mis au dessus, j'ai trouvé la solution. Par contre maintenant, un souci se pose. Si je supprime un élément, comment faire pour que tout les autres éléments se décalent.

    Exemple :
    a la base j'ai :

    Menu B (position1)| Menu A (position2) | Menu D (position 3) | Menu C (position 4) | Menu E (position 5)

    et je supprime le menu A, je veux obtenir :

    Menu B (position1)| Menu D (position 2) | Menu C (position3) | Menu E (position 4)


    Comment faire... Merci d'avance

  10. #10
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Et ben c'est simple...
    Si tu supprime Menu A tu selectionne dans ta table tout ce qu'il y a apres donc de Menu D à Menu E. Et tu décrémente leur postion ^o) je voit pas ou est le probleme... D'ailleur meme chose si tu veut un inserer un nouveau... Tu incrémente...
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    c'est quoi la requète sql que je peux utiliser?

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/03/2007, 18h42
  2. Formulaire Flash avec Php Mysql
    Par achos dans le forum Flash
    Réponses: 2
    Dernier message: 23/03/2007, 10h17
  3. [SGBD] Gérer des droits avec php/mysql
    Par pontus21 dans le forum Administration
    Réponses: 9
    Dernier message: 04/05/2006, 19h56
  4. Quel SGBD avec PHP : MySQL ou Postgres
    Par charliejo dans le forum Requêtes
    Réponses: 6
    Dernier message: 25/01/2006, 12h13
  5. multi update avec php/ mysql
    Par arnoweb dans le forum Administration
    Réponses: 1
    Dernier message: 17/11/2005, 22h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo