PHP : Condition ternaire en doublon

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par sff, 31 Mai 2018.

  1. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Bonjour,

    je suis en train de coder un petit site et j'ai un soucis avec 2 conditions identiques "(isset($_SESSION['id']))". Je ne sais pas comment je pourrais les rassembler afin de faire plus propre. Si quelqu'un à une idée je suis preneur :

    Code:
    try{
    
        switch (key($_GET)) {
            
        case 'mes_logements':
            include('templates/pages/mes_logements.php');   
            break;
            default :
            include (isset($_SESSION['id'])) ? 'templates/pages/home.php' : 'templates/pages/login.php';
            break;
            
        }
        
    } catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br>'; die(); }
    
    echo $view-> render((isset($_SESSION['id']))? 'templates/layouts/primary.php' : 'templates/layouts/login.php');
    Merci d'avance
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 782
    J'aime reçus:
    240
    En définissant une autre variable qui contient la valeur du isset(), mais ce n'est pas spécialement plus propre.
    Par contre l'indentation (p-e tronquée par le forum, je n'en sais rien) et le non respect des normes PSR, ça oui c'est pas propre.
     
  3. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    J'ai fais ceci finalement. Ca fait plus propre :

    Code:
        if(!isset($_SESSION['id'])){
    
            switch ($_GET) {
                
            case 'my_homes':
                include('templates/pages/my_homes.php');   
                break;
                default :
                include ('templates/pages/dashboard.php');
                break;
            }
            
            echo $view-> render('templates/layouts/primary.php');
            
        }else{
            
            include ('templates/pages/login.php');
            
            echo $view-> render('templates/layouts/login.php');   
        }
     
  4. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 782
    J'aime reçus:
    240
    PHP:
    switch ($_GET) {
    $_GET est un array

    Alors j'aurais plutôt fait comme ceci:
    PHP:
    <?php
    $layout 
    'login';
    $page 'login';

    if (!isset(
    $_SESSION['id'])) {
        
    $layout 'primary';
        
    $page key($GET) === 'my_homes' 'my_homes' 'dashboard';
    }

    include 
    "templates/pages/{$page}.php";
    echo 
    $view->render("templates/layouts/{$layout}.php");
     
    #4 spout, 31 Mai 2018
    Dernière édition: 31 Mai 2018
  5. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 782
    J'aime reçus:
    240
    Pardon, je px plus éditer :
    PHP:
    key($_GET)
     
  6. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    J'avais pas pensé à cette solution. Par contre j'ai un doute concernant cette ligne :

    $page = key($GET) === 'my_homes' ? 'my_homes' : 'dashboard';

    Plus tard j'aurais bien plus qu'une condition, j'aurais toujours my_homes, mais il y en aura egalement une dizaine d'autres dont la page et le layout auront toujours le meme nom.

    Un switch n'est pas préférable ?
     
  7. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 782
    J'aime reçus:
    240
    S'il y en a plusieurs, je ferais un array des pages valides:
    PHP:
    <?php
    $pages 
    = ['my_homes''page_foo''page_bar'];
    if (
    in_array(key($_GET$pages))) {...}
     
  8. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    J'avais pensé à ca car dans ta solution précédente il n'y a pas de défaut si $_GET est vide

    Code:
    $layout = 'login';  
    
    if(isset($_SESSION['id'])){
       
        $layout = 'primary';
       
        $page = (($_GET) != null) ? $_GET : 'dashboard' ;
       
    }else
    
    $page = (($_GET) != null) ? $_GET : 'login' ;
    
    include ('templates/pages/'.$page.'.php');
    
    echo $view->render("templates/layouts/{$layout}.php");
     
  9. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    J'aime reçus:
    0
    Peut-on optimiser le code ?
     
  10. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 782
    J'aime reçus:
    240
    Attention que $_GET est tjs un array.
     
Chargement...
Similar Threads - PHP Condition ternaire Forum Date
conditions php Développement d'un site Web ou d'une appli mobile 19 Mars 2017
Améliorer une suite de conditions php Développement d'un site Web ou d'une appli mobile 10 Novembre 2016
Condition mysql/php Développement d'un site Web ou d'une appli mobile 12 Mai 2014
Condition php sur un formulaire qui ne passe pas? Développement d'un site Web ou d'une appli mobile 14 Mai 2013
[PHP] Condition et include Développement d'un site Web ou d'une appli mobile 31 Janvier 2013
[Wordpress] Php tag conditionnel Développement d'un site Web ou d'une appli mobile 8 Avril 2012
Condition php pour exclure un département Développement d'un site Web ou d'une appli mobile 5 Mars 2012
Aide pour des conditions php Développement d'un site Web ou d'une appli mobile 31 Janvier 2012
Nofollow sur phpbb3 sauf si condition remplie ? Développement d'un site Web ou d'une appli mobile 6 Octobre 2010
[Résolu] Php condition avec test sur url Développement d'un site Web ou d'une appli mobile 14 Janvier 2010
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice