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 :

Simplifier une grosse condition IF


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut Simplifier une grosse condition IF
    Bonjour,

    Voilà, j'ai fait un petit code, un simple affichage de boutons allant de 0 à 9 (sous forme de formulaire), afin d'entrer un code caché.

    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    <?php
    session_start();
    $code='085208'; // Déclarer le code
    $code=str_split($code); // Mettre le code dans un tableau
    if(isset($_POST['send'])){
        if(isset($_SESSION['chiffre5'])) {
            if(isset($_POST['send']) && $_POST['send']==$code[5]){ // Chiffre 6
                $_SESSION['chiffre6'] = $_POST['send'];
                echo 'Code complété : ' . $_SESSION['chiffre1'] . ' ' . $_SESSION['chiffre2'] . ' ' . $_SESSION['chiffre3'] . ' ' . $_SESSION['chiffre4'] . ' ' . $_SESSION['chiffre5'] . ' ' . $_SESSION['chiffre6'];
                echo '<br>Félicitations, vous avez débloqué le <a href="Shifumi/index.php" target="_blank">shifumi</a>';
            } else {
                unset($_SESSION['chiffre1']);
                unset($_SESSION['chiffre2']);
                unset($_SESSION['chiffre3']);
                unset($_SESSION['chiffre4']);
                unset($_SESSION['chiffre5']);
                echo $fail;
            }
        } else {
            if(isset($_SESSION['chiffre4'])) {
                if(isset($_POST['send']) && $_POST['send']==$code[4]){ // Chiffre 5
                    $_SESSION['chiffre5'] = $_POST['send'];
                    echo $_SESSION['chiffre1'] . ' ' . $_SESSION['chiffre2'] . ' ' . $_SESSION['chiffre3'] . ' ' . $_SESSION['chiffre4']  . ' ' . $_SESSION['chiffre5']  . ' _';
                } else {
                    unset($_SESSION['chiffre1']);
                    unset($_SESSION['chiffre2']);
                    unset($_SESSION['chiffre3']);
                    unset($_SESSION['chiffre4']);
                    echo $fail;
                }
            } else {
                if(isset($_SESSION['chiffre3'])) {
                    if(isset($_POST['send']) && $_POST['send']==$code[3]){ // Chiffre 4
                        $_SESSION['chiffre4'] = $_POST['send'];
                        echo $_SESSION['chiffre1'] . ' ' . $_SESSION['chiffre2'] . ' ' . $_SESSION['chiffre3'] . ' ' . $_SESSION['chiffre4']  . ' _ _';
                    } else {
                        unset($_SESSION['chiffre1']);
                        unset($_SESSION['chiffre2']);
                        unset($_SESSION['chiffre3']);
                        echo $fail;
                    }
                } else {
                    if(isset($_SESSION['chiffre2'])){
                        if(isset($_POST['send']) && $_POST['send']==$code[2]){ // Chiffre 3
                            $_SESSION['chiffre3'] = $_POST['send'];
                            echo $_SESSION['chiffre1'] . ' ' . $_SESSION['chiffre2'] . ' ' . $_SESSION['chiffre3'] . ' _ _ _';
                        } else {
                            unset($_SESSION['chiffre1']);
                            unset($_SESSION['chiffre2']);
                            echo $fail;
                        }
                    } else {
                        if(isset($_SESSION['chiffre1'])){
                            if(isset($_POST['send']) && $_POST['send']==$code[1]){ // Chiffre 2
                                $_SESSION['chiffre2'] = $_POST['send'];
                                echo $_SESSION['chiffre1'] . ' ' . $_SESSION['chiffre2'] . ' _ _ _ _';
                            } else {
                                unset($_SESSION['chiffre1']);
                                echo $fail;
                            }
                        } else {
                            if(isset($_POST['send']) && $_POST['send']==$code[0]){ // Chiffre 1
                                $_SESSION['chiffre1'] = $_POST['send'];
                                echo $_SESSION['chiffre1'] . ' _ _ _ _ _';
                            } elseif (isset($_POST['send']) && $_POST['send']!=$code[0]){
                                echo '_ _ _ _ _ _<br>Raté';
                            }
                        }
                    }
                }
            }
        }
    } elseif(!isset($_POST['send']) && !isset($_SESSION['chiffre6'])) {
        echo '_ _ _ _ _ _';
    } elseif(!isset($_POST['send']) && isset($_SESSION['chiffre6'])) {
        echo 'Code complété : ' . $_SESSION['chiffre1'] . ' ' . $_SESSION['chiffre2'] . ' ' . $_SESSION['chiffre3'] . ' ' . $_SESSION['chiffre4'] . ' ' . $_SESSION['chiffre5'] . ' ' . $_SESSION['chiffre6'];
        echo '<br>Félicitations, vous avez débloqué le <a href="Shifumi/index.php" target="_blank">shifumi</a>';
    }
    if(!isset($_SESSION['chiffre6'])):
    echo '
    <table>
    	<form method="post">
    		<tr>
    			<td><input type="submit" name="send" value="1" class="boutonCache"></td>
    			<td><input type="submit" name="send"  value="2" class="boutonCache"></td>
    			<td><input type="submit"  name="send"  value="3" class="boutonCache"></td>
    		</tr>
    		<tr>
    			<td><input type="submit"  name="send" value="4" class="boutonCache"></td>
    			<td><input type="submit"  name="send"  value="5" class="boutonCache"></td>
    			<td><input type="submit"  name="send"  value="6" class="boutonCache"></td>
    		</tr>
    		<tr>
    			<td><input type="submit"  name="send"  value="7" class="boutonCache"></td>
    			<td><input type="submit"  name="send"  value="8" class="boutonCache"></td>
    			<td><input type="submit"  name="send"  value="9" class="boutonCache"></td>
    		</tr>
            <tr>
                <td></td>
    			<td><input type="submit"  name="send"  value="0" class="boutonCache"></td>
    		</tr>
    	</form>
    </table>';
    else:
        echo '<br><br><a href="?resetJeu">Réafficher le formulaire</a>';
    endif;
    if(isset($_GET['resetJeu'])) {
        unset($_SESSION['chiffre1']);
        unset($_SESSION['chiffre2']);
        unset($_SESSION['chiffre3']);
        unset($_SESSION['chiffre4']);
        unset($_SESSION['chiffre5']);
        unset($_SESSION['chiffre6']);
        header("location: ".$_SERVER["PHP_SELF"]);
    }
    ?>
    Voici donc à quoi ressemble le code et il fonctionne.

    L'utilisateur a donc un code à 6 chiffres à entrer en appuyant sur les boutons du formulaire, et le code s'actualise chiffre par chiffre.

    Je me demandais s'il n'y avait pas une condition plus simple pour effectuer ce genre de test... (je me suis aussi peut-être un peu compliqué la vie en faisant les conditions à l'envers (le premier if test le dernier chiffre du code... oups, mais j'étais plus dans l'optique "si le chiffre 6 n'existe pas, on teste le chiffre 5", etc...)

    J'aimerais voir et comprendre comment l'optimisation de code fonctionne.

    Merci

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu t'es sacrément compliqué la vie dis donc !
    Voici une version qui s'adapte automatiquement à la longueur du code secret à trouver :
    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
    if (empty(session_id())) {
        session_start();
    }
     
    if (isset($_GET['resetJeu'])) {
        $_SESSION['code'] = '';
        header("location:{$_SERVER["PHP_SELF"]}");
        exit;
    } elseif ( ! isset($_SESSION['code'])) {
        $_SESSION['code'] = '';
    }
     
    $secret = '085208'; // code à trouver
    $txt    = implode(' ', array_fill(0, strlen($secret), '_'));
    $fini   = false;
     
    if (isset($_POST['send'])) {
        $pos = strlen($_SESSION['code']);
        $num = $secret[$pos];
     
        if ((int)$_POST['send'] === (int)$num) {
            $_SESSION['code'] .= $num;
            $fini = ($_SESSION['code'] === $secret);
        }
     
        $txt = str_pad(implode(' ', str_split($_SESSION['code'])), strlen($secret) * 2, ' _', STR_PAD_RIGHT);
     
        if ($fini) {
            echo '<br>Félicitations, vous avez débloqué le <a href="Shifumi/index.php" target="_blank">shifumi</a><br>';
        }
    }
     
    echo <<<html
    {$txt}
    <table>
        <form method="post">
            <tr>
                <td><input type="submit" name="send" value="1" class="boutonCache"></td>
                <td><input type="submit" name="send" value="2" class="boutonCache"></td>
                <td><input type="submit" name="send" value="3" class="boutonCache"></td>
            </tr>
            <tr>
                <td><input type="submit" name="send" value="4" class="boutonCache"></td>
                <td><input type="submit" name="send" value="5" class="boutonCache"></td>
                <td><input type="submit" name="send" value="6" class="boutonCache"></td>
            </tr>
            <tr>
                <td><input type="submit" name="send" value="7" class="boutonCache"></td>
                <td><input type="submit" name="send" value="8" class="boutonCache"></td>
                <td><input type="submit" name="send" value="9" class="boutonCache"></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" name="send" value="0" class="boutonCache"></td>
            </tr>
        </form>
    </table>
    <br><br>
    <a href="?resetJeu">Recommencer</a>
    html;
    tu peux même générer aléatoirement le nombre à trouver à chaque nouvelle partie

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut
    Hello,

    Merci pour ta réponse!

    Je ne pense pas comprendre chaque ligne, il faudrait que je me renseigne sur les différentes fonction que tu utilises.
    Surtout ça, ahah :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $txt = str_pad(implode(' ', str_split($_SESSION['code'])), strlen($secret) * 2, ' _', STR_PAD_RIGHT);
    Le seul problème que je retrouve là-dedans, c'est que le code secret n'est pas réinitialisé en cas d'erreur. Je suppose que c'est une petite condition à ajouter mais j'aurais, je pense, un peu de mal à l'ajouter dans le code lol^^

    De plus, une fonction a attiré mon attention :
    Je suppose que les lignes 1 à 3 permettent de vérifier si une session est en cours, et si ce n'est pas le cas, lancer session_start(), est-ce bien ça?

    Encore un grand merci

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par peyau Voir le message
    Je ne pense pas comprendre chaque ligne, il faudrait que je me renseigne sur les différentes fonction que tu utilises.
    La doc PHP est très bien faite et les commentaires en dessous sont souvent une mine d'informations précieuses

    Citation Envoyé par peyau Voir le message
    Le seul problème que je retrouve là-dedans, c'est que le code secret n'est pas réinitialisé en cas d'erreur.
    t'es sûr de toi ? Tu veux que le gars trouve le code exact en un seul coup ? Ça me parait impossible bien que cela soit programmable.

    Citation Envoyé par peyau Voir le message
    Je suppose que les lignes 1 à 3 permettent de vérifier si une session est en cours, et si ce n'est pas le cas, lancer session_start(), est-ce bien ça?
    oui

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut
    t'es sûr de toi ? Tu veux que le gars trouve le code exact en un seul coup ? Ça me parait impossible bien que cela soit programmable.
    Oui, dans le sens où ça force l'utilisateur à recommencer le code depuis le début s'il se trompe, ça rajoute un côté un peu chiant et un peu "je te force à chercher", vu que le code s'affiche en "temps réel" quand il trouve un chiffre, l'utilisateur sait où il en est dans sa recherche du code^^

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    tu sais, moi ce qui est "un peu chiant" je dois t'avouer que je l'évite autant que faire se peut

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

Discussions similaires

  1. [MySQL] Simplifier une équation selon condition
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 16/10/2018, 16h34
  2. Faire une formule simplifiée avec des conditions
    Par Akino974 dans le forum Conception
    Réponses: 0
    Dernier message: 29/07/2014, 14h03
  3. simplifier une condition If avec or
    Par panda78 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/08/2012, 11h20
  4. simplifier une conditions
    Par JackNUMBER dans le forum Langage
    Réponses: 2
    Dernier message: 07/06/2010, 10h38
  5. Réponses: 14
    Dernier message: 17/03/2003, 18h31

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