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 :

Petite optimisation à faire… tit bug en perspective ! [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 62
    Points : 30
    Points
    30
    Par défaut Petite optimisation à faire… tit bug en perspective !
    J’ai une base de donnée contenant des fonctions utilisateur qui vont de 1 à 99. Comme elles sont enregistrée a la suite les une des autres, celles qui sont déjà prises ne doivent pas apparaître dans ma page de création de fonction.

    Ma table postes_utilisateur ressemble à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    fonction / poste occupée 
    10/utilisateur	
    99 / administrateur
    Pour le moment, elle ne contient que ces deux entrées pour les tests. Ma page d’enregistrement elle contient un sélect qui va de 1 à 99 avec une boucle for tout ce qu’il y a de plus classique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for ($i = 1; $i <= 99; $i++)
    {
         if($i != $row_fonctions['fonction'])
         {
              echo $i."<br />";
         }
    }
    Ici j’ai simplifié mon affichage sans le sélect mais le principe revient au même.

    Ceci dit la ou ca bloque c’est que j’aimerais sélectionner ma table comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $select = "SELECT fonction FROM postes_utilisateur WHERE 1";
    $req = mysql_query($select, $connect);
    $row_fonctions = mysql_fetch_assoc($req);
    $row_fonctions contient un tableau et j’arrive pas a regarder dedans pour que si une fonction est entrée, elle n’apparaisse pas dans le select.

    Bref faut que je face un truc qui regarde dans la base et qui compare avec le contenu du tableau afin de mettre ou non le chiffre venu du for

    Et bien voila.
    Je vous remercie par ailleurs de votre aide.

    Amitiés.

  2. #2
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Alors il y aurait moyen de faire ça je pense
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    $select = "SELECT fonction FROM postes_utilisateur";
    $req = mysql_query($select, $connect);
    $row_fonctions = mysql_fetch_array($req); 
    echo "<select>";
    for ($i = 1; $i <= 99; $i++)
    { 
    if(array_search($i, $row_fonction)!==false) 
              continue;
    echo "<option value=$i> Fonction $i </option>";
    }
    echo "</select>";
    ?>
    Enfin il y a peut etre plus simple..

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Alors, je pense qu'il y a un petit souci : $row_fonctions est effectivement un tableau mais il n'a qu'un champ qui s'appelle `fonction` et qui n'est pas un tableau, lui, mais une chaîne de caractères car issu de la BDD.
    Est-ce que `fonction` contient le nom d'une seule fonction ou bien de toutes celles de l'utilisateur ? D'après ton code, j'ai l'impression que c'est un identifiant, ce qui laisse supposer qu'il peut y avoir plusieurs enregistrements de la même table pour un seul utilisateur et, donc, qu'il faut tous les parcourir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $select = "SELECT fonction FROM postes_utilisateur WHERE 1";
    $req = mysql_query($select, $connect);
    while($tmp = mysql_fetch_assoc($req)){
       $fonctions[] = $tmp['fonction'];
    }
    //...
    if(!in_array($i, $fonctions)){
       // echo
    }
    Cela dit, je ne suis pas certain d'avoir bien compris ce que tu souhaites faire.

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Non je pense avoir compris que quand un membre s'inscrivait il prenait une fonction (lol : la prochaine fois évite de l'appeler fonction c'est assez ambigu en programmation) et à l'inscription il faut faire un select regroupant toutes les fonctions restantes.

    Du coup dans la base de donnée il y a une table nommée fonction avec au moins 1 champ contenant toutes les fonctions déjà prises (il peut y avoir une deuxième champ contenant l'id associé mais on s'en fiche un peu )

    Donc voilà ^^

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Bonjour,
    Ce n’est pas ambigu par ce que les fonctions regroupent le niveau de l’user.
    Ensuite plusieurs membres peuvent avoir la même fonction dan mon system de gestion, inversement il ne peut exister qu’un niveau a la fois avec sa description, du coup ce n’est plus ambigu vue que chaque user a un niveau donc une fonction établi.

    Donc en fait oui ça parait peu compréhensible pour vois mais moi je m’y retrouve comme cela.

    Merci des quelques indications si dessus.

    PS : mon problème porte bien sur le $row_fonctions !

    Amitiés.

  6. #6
    Membre habitué Avatar de ciesco
    Inscrit en
    Février 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 110
    Points : 127
    Points
    127
    Par défaut
    Nou je pense qu'il veut dire qu ec'est ambigu car... Fonction ou function c'est quand meme un des mots les plsu utilises du vocabulaire du developpeur....

  7. #7
    Débutant
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Vue comme ca

    Au pire je peux changer pour Fonction_de_l_user si y faut !

    Moi ca me dérange pas de toute facon !

    A plus

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Bon alors avec le code qui ma été donné j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $select = "SELECT fonction FROM postes_utilisateur WHERE 1";
    $req = mysql_query($select, $connect);
    while ($temp = mysql_fetch_assoc($req))
    	{
    		$fonctions[] = $temp['fonction'];
    	}
    	for ($i = 1; $i <= 99; $i++)
    	{
    		if(!in_array($i, $fonctions))
    		{
    			echo $i."<br />";
    		}
    	}
    Ca marche par contre j'aurais besoin d'un peu d'aide pour commenter mon code par ce que j'avais jamais fait de code de cette facon la et peut être j'aurais mis des mauvais commentaires. Donc si quelqu'un peu encore un peu m'aider la dessus je serais super content.

    Merci d'avance pour votre aide.

    Amitiés.

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Oh, d'aucuns argumentent qu'il est inutile de commenter du code bien écrit... Pour ma part, je pense qu'il n'est pas fondamental de commenter cette portion-ci dont le déroulement n'est pas très obscur. Peut-être l'usage de $tmp est-il un peu particulier (mais néanmoins utile), à toi de voir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petite requête à faire
    Par SQLpro dans le forum Oracle
    Réponses: 8
    Dernier message: 08/02/2008, 18h10
  2. Petite requête à faire
    Par SQLpro dans le forum SQL
    Réponses: 7
    Dernier message: 22/01/2008, 17h38
  3. [ASE]Petite requête à faire
    Par SQLpro dans le forum Adaptive Server Enterprise
    Réponses: 3
    Dernier message: 18/01/2008, 09h43
  4. p'tit bug d'affichage
    Par skalimer0 dans le forum OpenGL
    Réponses: 24
    Dernier message: 12/10/2007, 14h50
  5. Petite optimisation de code
    Par Konrad Florczak dans le forum Langage
    Réponses: 4
    Dernier message: 27/09/2006, 17h37

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