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 :

requete de mise a jour dans fonction recursive


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 132
    Points : 47
    Points
    47
    Par défaut requete de mise a jour dans fonction recursive
    bonjour a tous ,

    je suis un peu debutante dans le domaine de la recursivite

    voila, je traite une arborescence de types de documents

    dont le schema general est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    type parent A 
       sous type a
          sous sous type 1
       sous type b
          sous sous type 1
          sous sous type 2
    type parent B
    c'est juste un exemple pour dire que on a une arborescence de types et que chaque type peut avoir autant de sous types "qu'il veut " et ainsi de suite

    dans ma base de donnée , j'ai un attribut ordre type asoocié a chaque type et je dois ecrire une fonnction qui met a jour cet ordre dans la base de deonnées

    de la sorte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    parent 1
     
       sous 0
          sous sous 0
          sous sous 1
       sous 1
       sous 2
          sous sous 0
     
    parent 2

    merci d'avance

  2. #2
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Tout d'abord, tu devrais prendre l'habitude d'indenter proprement ton code, ça t'aidera à coder et nous à te relire.

    Ensuite, tu utilises une variable $tree qui n'est pas définie : tu veux sans doute parler de $tab.

    Je pense que tu devrais d'abord écrire ton algorithme récursif, prouver sa terminaison, montrer qu'il marche, avant de l'implémenter en PHP.

    Il apparait dans ton code une requête SQL, dont tu ne fais absolument rien. Si tu veux la passer à un serveur MySQL, tu devrais lire attentivement le tuto dans ma signature.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 132
    Points : 47
    Points
    47
    Par défaut
    ah oui desolé pour la variable $tree c'est bien $tab et pour le passage au serveur , oui j'ai oublié de mettre ces lignes la , je vais comme vous l'avez dit commencer par reviser et bien reécrire mon algorithme

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 132
    Points : 47
    Points
    47
    Par défaut
    bonjour !

    voila ce que j'ai pu essayer
    maintenant s'il vous plait j'ai besoin d'aide pour voir si c'est correct merci d'avance

    <?php
    function update_ordre_type ($tab){
    &#160;&#160;&#160;if(
    $tab==NULL) return NULL;
    &#160;&#160;&#160;
    &#160;&#160;&#160;
    $childArray = array();&#160;&#160;
    &#160;&#160;&#160;
    $cpt = 0; // La numérotation commence à 0

    &#160;&#160;&#160;
    foreach ($tab as $element) {
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $element&#91;"childs"] = update_ordre_type($element&#91;"childs"]); // on met à jours les fils
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $requete = "UPDATE type_document SET ordre_type =".$cpt." WHERE num_type=".$element&#91;'id'];
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $resultat = db_send_query($lang_error&#91;'sql update failed'], $requete);

    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $childArray&#91;$cpt] = $element;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $cpt ++;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $element&#91;'ordre_type']=$cpt;&#160;&#160;&#160;//je ne suis pas dutout sure pour cette ligne est ce que c'est correcte et faut il bien la mettre la?
    &#160;&#160;&#160;
    }

    &#160;&#160;&#160;if(
    sizeof($childArray)>0)
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return
    $childArray;
    &#160;&#160;&#160;else
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return
    NULL;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    }

    ?>
    Colorez votre code PHP sur les forums grâce à Developpez.com


    si ca peut vous aider voici quelques colonnes de ma table type_document qui contient la liste de tous les types et sous types

    et je voudrai avoir la numerotation que je ecrite a la main dans la photo du post precedent

    merci pour votre aide

  5. #5
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par eclipse012
    maintenant s'il vous plait j'ai besoin d'aide pour voir si c'est correct merci d'avance
    C'est à toi de nous dire si tu obtiens les bons résultats ou pas ! Si ça n'est pas le cas, dis-nous quel est le problème.
    C'est à toi de tester ton programme, tu es le mieux placé pour savoir s'il fonctionne correctement ou pas.

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 132
    Points : 47
    Points
    47
    Par défaut
    euhh oui excusez moi , j'oubliai les regles..du forum ...et de logique....

    oui ca marcheee !!

    merci a tous !

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 132
    Points : 47
    Points
    47
    Par défaut
    j'ajoute une reponse ...c'est a la suite de ce que j'ai fait

    en fait maintenant que les ordres_types de la table type_document sont mis a jour je me suis dit ce serait bien pratique si je peux sur mon interface avoir 2 fleches boutons a cote de chaque type pour pouvoir monter ou descendre un type et pour que en meme temps dans la base de donnes ca change automatiquement l'ordre

    et a chaque fois que on clique ca remonterait d'un niveau donc pour remonter /descendre de plusieurs niveaux il faudrait cliquer autant de fois que necessaire

    quelque chose comme ca



    j'ai deja les images des fleches en.gif

    je voulais savoir avec quoi on fait ca, et si vous pouviez m'indiquer des tutoriels ou meme un exemple

    merci

  8. #8
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    On ne trouve pas des tutoriels pour chaque opérations spécifique à une application particulière. Des fois, il faut réfléchir et faire les choses soi-même.

    Je suppose que tes images gif seront des liens, qui pointeront vers un script qui s'appellera par exemple mont.php ou desc.php, en passant l'identifiant de ta ligne en paramètre GET.
    Les scripts se chargeront d'identifier l'objet dans la base de données, de voir si on peut le remonter(resp. le descendre) c'est à dire trouver l'identifiant du nouveau conteneur parent, le modifier, et rappeler la page qui affiche l'arbre.

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 132
    Points : 47
    Points
    47
    Par défaut
    je ne voulais pas dire un tutoriel pour voir comment on fait ca , je me suis mal expliquee , mais merci pour les indications

    je vais faire comme ca

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 132
    Points : 47
    Points
    47
    Par défaut
    voila j'ai fait ca mais ca ne marche pas

    en fait ci dessous j'ai le code de la fonction qui affiche la liste des types de document et j'ai inclus dedans la requete de selection du type et l'icone qui correspond a la fleche montante est monter.gif

    <?

    function get_types_org($tab, $option="", $level=0, $parent_string=NULL){&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;

    ....

    foreach(
    $tab as $id => $block){ // Parcours du tableau des types

    switch($option){ /*&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;*
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;* Affichage sous forme de TABLE *&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;*/&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    case 'table' :
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $requete1 = "SELECT ordre_type
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;FROM type_document
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;where&#160;&#160;NUM_TYPE="
    .$id;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $resultat = db_send_query("Erreur lors de la récupération des informations du document.", $requete1);
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $res=mysql_fetch_array($resultat);
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $ordre= $res&#91;'ordre_type'];
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $spaces = ($level>0) ? '<img src="'.ROOT.'img/corner-dots.gif" alt=""/>' : '';
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for(
    $k=1;$k<$level;$k++) $spaces = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$spaces;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $color = (++$color_admin_types%2) ? "color2" : "color1";
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    $tmp .= '
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<tr class="ligne '
    .$color.'" title="'.$lang_common&#91;'view'].'"&#160;&#160;onmouseover="this.className=\'ligne surligne\';" onmouseout="this.className=\'ligne '.$color.'\';">
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<td class="inline" width="120">
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<form id="form_go_up_'
    .$id.'" name="form_go_up_'.$id.'" method="post" action="mont.php" style="padding:0;margin:0;width:0;">
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<button type="submit"><img src="'
    .ROOT.'img/monter.gif" alt="'.$lang_common&#91;'go_up'].'" title="'.$lang_common&#91;'go_up'].'" /></button>
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<input type="hidden" name="numero" value="'
    .$id.'">
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</form>
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</td>
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<td align="left" style="padding-left:10px;" onclick="document.location.href=\'admin.php?section=edit_type&amp;num_type='
    .$id.'\';" onmouseover="this.className=\'tdhover\';" onmouseout="this.className=\''.$color.'\';">'.$spaces.'&nbsp;'.$block&#91;'name'].'</td>
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</tr>
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'
    .get_types_org($block&#91;'childs'],$option,$level+1);
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;
    ...&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    ?>
    Colorez votre code PHP sur les forums grâce à Developpez.com

    le truc c'est que meme ma requete de selection de ordre_type dans la fonction get_types_org elle ne marche pas


    mont.php

    <?php

    $requete2
    = "UPDATE type_document SET ordre_type =".$ordre ++." WHERE NUM_TYPE=".$id;
    $resultat2 = db_send_query($lang_error&#91;'sql update failed'], $requete2);

    }
    ?>
    Colorez votre code PHP sur les forums grâce à Developpez.com

Discussions similaires

  1. [AC-2003] retour chariot dans une requete de mise a jour
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/08/2010, 17h35
  2. incorpore requete suivi d'une requete mise a jour dans vba
    Par popofpopof dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 24/03/2008, 20h35
  3. Requete De Mise A Jour Inseree Dans Une Macro
    Par tereda dans le forum Access
    Réponses: 1
    Dernier message: 10/05/2006, 12h34
  4. Plantage SQL Server sur requete de mise a jour
    Par Laurent_75000 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/09/2005, 10h00
  5. Requete SQL permettent une mise a jour dans la base
    Par themagaly dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/06/2004, 09h32

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