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

Langage PHP Discussion :

[Tableaux] Multiple test. Simplification ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Par défaut [Tableaux] Multiple test. Simplification ?
    Bonjour à tous.

    Je suis en train de developper une page de formulaire dans la quelle l'utilisateur peut faire un ou plusieurs changement (parmi Nom, Mot de passe, type d'antispam, et activation d'une fonctionnalité).
    Lorsque l'utilisateur presse le bouton valider, je verifie si les infos retournées par le formulaires sont différentes de ma base de donnée. Si oui, l'utilisateur a fait un changement et je change le code etat correspondant(par exemple s'il a changé le nom de compte, je passe la variable $chgname à 1 au lieu de 0)
    Ainsi, a la fin du traitement de mon formulaire, je peux savoir quel(s) modifications a (ont) été effectuée(s) et j'aimerais faire un recapitulatif sur une page de validation. Le truc, c'est que vu qu'il y a 4 changements possible, ça me fait 16 test a faire :
    Code : 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
    0000
    0001
    0010
    0011
    0100
    0101
    0110
    0111
    1000
    1001
    1010
    1011
    1100
    1101
    1110
    1111
    chaque 0 ou 1 correspondant a mon code etat pour mes 4 changements possibles.
    Imaginez si je veux ajouter une fonctionnalité, ce n'est plus 16 test mais 32 et ainsi de suite.

    Donc ma question est : Y a-t'il plus simple pour ce genre de test ?

    J'espere avoir été assez claire, n'hésitez pas à me faire remarquer le contraire. Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 348
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 348
    Billets dans le blog
    17
    Par défaut
    Pas convaincu que la méthode du flag telle que décrite soit pertinente.
    A ta place j'utiliserais une boucle qui, de manière dynamique, récupèrait les champs du formulaire et les comparerait avec les valeurs de la BdD.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Par défaut
    C'est ce que je fais, et une fois fais, si la valeur de la base de donnee a changé, je passe la variable chgname à 1, sinon elle reste à 0 et à la fin de ma fonction je retourne chgname (je fais la meme chose pour les 3 autres)
    C'est dans mon "programme principal", après l'appel de toutes mes fonctions que je fais mes test. Par exemple, si rien n'a changé, j'envoi, $id=code_valid1, si juste le nom a changé, j'envoi $id=code_valid2 etc. pour tous les scnarii possibles.
    Dans ma page de validation, je refais les test dans le sens inverse : Je test la valeur de $id, et en fonction j'affiche le message correspondant.
    Peut être que ça vous a un peu eclaircit...

  4. #4
    Membre chevronné Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Par défaut
    Personnellement je compte 4 tests seulement, un par bit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ($valeur & 1)
      echo '... modifié';
    if ($valeur & 2)
      echo '... modifié';
    if ($valeur & 4)
      echo '... modifié';
    if ($valeur & 8)
      echo '... modifié';

  5. #5
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Par défaut
    Ouai, mais non, la tu ne fais pas tous les test, ou alors, j'ai mal compris qqch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ($valeur & 1)
    //La tu test si le premier a changé
    if ($valeur & 2)
    //La tu test si le 2eme a changé
    if ($valeur & 4)
    //La tu test si le 3eme a changé
    if ($valeur & 8)
    //La tu test si le 4eme a changé
    Moi je veux tout tester :
    Code : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    if ($valeur & 0)
    {
    //Aucun changement : 0000
    $id='code_valid1'
    }
    if ($valeur & 1)
    {
    //Changment du dernier : 0001
    $id='code_valid2'
    }
    if ($valeur & 2)
    {
    //Changment du troisieme : 0010
    $id='code_valid3'
    }
    if ($valeur & 3)
    {
    //Changment du dernier et du troisieme : 0011
    $id='code_valid4'
    }
    if ($valeur & 4)
    {
    //Changment du deuxieme : 0100
    $id='code_valid5'
    }
    if ($valeur & 5)
    {
    //Changment du dernier et du deuxieme : 0101
    $id='code_valid6'
    }
    if ($valeur & 6)
    {
    //Changment du troisieme et du deuxieme : 0110
    $id='code_valid7'
    }
    if ($valeur & 7)
    {
    //Changment du dernier du troisieme et du deuxieme : 0111
    $id='code_valid8'
    }
    if ($valeur & 8)
    {
    //Changment du premier : 1000
    $id='code_valid9'
    }
    if ($valeur & 9)
    {
    //Changment du dernier et du premier : 1001
    $id='code_valid10'
    }
    if ($valeur & 10)
    {
    //Changment du troisieme et du premier : 1010
    $id='code_valid11'
    }
    if ($valeur & 11)
    {
    //Changment du dernier, du troisieme et du premier : 1011
    $id='code_valid12'
    }
    if ($valeur & 12)
    {
    //Changment du premier et du deuxieme : 1100
    $id='code_valid13'
    }
    if ($valeur & 13)
    {
    //Changment du dernier du deuxieme et du premier : 1101
    $id='code_valid14'
    }
    if ($valeur & 14)
    {
    //Changment du troisieme, du deuxieme et du premier : 1110
    $id='code_valid15'
    }
    if ($valeur & 15)
    {
    //Changment des 4 : 1111
    $id='code_valid16'
    }
     
    header("location: validation.php?id=$id);
    Donc ça me fait bien 16 test et ces 16 test sont a refaire dans la page de validation pour connaitre la valeur de id


    J'ai trouvé une autre solution qui me divise le nombre de test par 2 :
    Au lieu de dire que s'il n'y a pas de changement c'est 0 et s'il y en a c'est1, je dis : S'il n'y a pas de changement, les variables sont a 1.
    S'il y a des changement, chgname vaut 2, chgpass vaut 4, chgspam vaut 8 et chgblck vaut16.
    Ainsi, a la fin de l'appel de mes fonctions, je fais la somme de mes 4 variables et je met le resultat dans la variableid queje passe en parametre lors de l'appel de ma page validation.php
    Cette methode, m'oblige toujours a faire mes 16 test dans la page de validation, mais au moins je ne test plus rien dans ma page de formulaire

  6. #6
    Membre chevronné Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Par défaut
    0 test :

    $id = 'code_valid'.$valeur;

    Fait gaffe tu confonds les opérateurs & et ==.

    ($valeur & 1) ne donne pas le meme resultat que ($valeur == 1)

    Si valeur = 3,

    l'expression ($valeur & 1) est vraie alors que ($valeur == 1) est fausse. C'est pour ça que je peux affirmer que j'ai texté tous les flags. Toi tu as 16 test avec un seul qui peut reussir (donc 16 cas possible seulement), moi j'en ai 4 mais les 4 peuvent réussir (4 test, 2 possibilités par test, donc 2 ^ 4 cas, on a donc bien les 16 cas).

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

Discussions similaires

  1. where, indices tableaux et test logique
    Par iznogoud_23 dans le forum Fortran
    Réponses: 6
    Dernier message: 11/05/2010, 20h32
  2. [Tableaux] multiples listes déroulante
    Par -Neo- dans le forum Langage
    Réponses: 4
    Dernier message: 14/06/2007, 15h27
  3. pb tableaux multiples - div - css
    Par jeca dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 26/10/2006, 12h00
  4. Tri de tableaux multiples
    Par hdd dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2006, 17h54
  5. [Tableaux] Problème test script
    Par masseur dans le forum Langage
    Réponses: 6
    Dernier message: 03/12/2005, 18h48

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