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 :

instructions conditionnelles -> compatibles avec PHP ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Par défaut instructions conditionnelles -> compatibles avec PHP ?
    Bonjour,
    Ma question concerne l'utilisation des instructions conditionnelles.
    -> Je sais qu'elle permettent (entre autres) de définir si on utilise tel ou tel code selon que l'utilisateur est sous Internet explorer ou Firefox... Mais peut-on les utiliser, par exemple, pour choisir, en PHP, de définir la valeur d'une variable selon le navigateur utilisé (Internet explorer ou autre) ? Ci-dessous un petit exemple bien précis, pour me permettre de vous préciser ce qui m'arrive:
    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
    ?>
    <!--[if gte IE 7]>
    <div id="Layer1" style="position:absolute; width:200px; height:115px; z-index:1; left: 77px; top: 122px"><img src="Video_impression.png" width="130" height="36"></div>
    <?php
     $hauteur=44; 
    ?>
    <![endif]--> 
    <!--[if !IE]><-->
    <div id="Layer1" style="position:absolute; width:200px; height:115px; z-index:1; left: 577px; top: 122px"><img src="Video_impression.png" width="130" height="36"></div>
    <?php
     $hauteur=41; 
    ?>
    <!--><![endif]-->
    <?php
    echo 'HAUTEUR : '.$hauteur;
    -> Quand j'intègre ce code dans une page PHP, sous Internet explorer, mon image s'affiche bien sur la gauche (left: 77px) et sous Firefox, elle s'affiche bien sur la droite (left: 577px) -> Jusque là, tout va bien...
    Seulement, concernant la variable $hauteur, que je sois sous Firefox ou sous Internet explorer, c'est la dernière valeur rentrée
    (ici "HAUTEUR : 41") qui s'affiche à l'écran -> Autrement dit, on dirait que le code PHP n'est pas pris en compte dans les instructions conditionnelles (comme si elles étaient "transparentes" !) -> Pouvez-vous me confirmer ma déduction ? ou m'aider à préciser ce qui se passe vraiment ? En fait, Existe t-il un moyen, en PHP (avec ou sans ces instructions conditionnelles) pour conditionner le choix d'une variable en fonction du navigateur utilisé ?
    En vous remerciant !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    PHP etant executé bien avant le javascript, ca ne peut pas marcher comme ça.
    Une solution est de rediriger vers la même page en passant l'argument dans l'url ; et evidemment n'afficher le javascript que si on a pas déjà l'argument.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    +1

    Dans ton code, $hauteur sera toujours égale à 41 car tu ne fais que réinitialiser cette variable.
    Php est interprété coté serveur, donc en tout 1er.
    Une fois que tout cela effectué, le serveur ne fait que renvoyé un flux HTML/Javascrit, donc que ce type de code.

    Pour faire ce que tu veux, il faut définir la hauteur dans le HTML (ou CSS) selon la version du navigateur.

    Donc 3 solutions à mon sens :
    - Soit utiliser les conditions HTML comme tu as fais (sans Php) mais en y mettant directement les hauteurs selon les conditions.
    Il me semble que c'est uniquement IE qui interprète de genre de condition.

    - Soit utiliser Javascript pour corriger/adapter la hauteur d'une DIV selon le type de navigateur.

    - La dernière solution est celle évoquée par Sabotage.


    A titre personnel, utiliser du Php pour corriger une donnée purement orienté poste client (navigateur) me semble lourd et de plus "casse gueule".
    Si tu as remarqué plusieurs différences entre IE7 et les autres IE, tu peux très bien créer 2 feuilles de style CSS spécifique au 2 cas (1 pour IE7 et l'autre par defaut), ensuite inclure la CSS selon la condition.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Par défaut
    Merci de me permettre de mieux comprendre ce qui s'est passé -> Du fait, à présent, j'éviterai ce genre d'approche !
    Ceci dit, sabotage, si j'ai bien compris, tu me proposes d'utiliser $_GET pour passer ma variable via l'Url, en HTML, entre les fameuses instructions conditionnelles, c'est cela ? Si c'est le cas, l'idée me parait fort intéressante... Après, c'est vrai qu'il faut relancer la page -> ca prend un peu plus de temps, mais comme ma page est essentiellement en PHP, ça devrait y faire coté rapidité... Du fait, je retiens cette perspective... Merci à toi !

    RunCodePhp, merci pour les précisions... J'avais justement utilisé une approche un peu similaire à la première des 3 solutions que tu évoques -> Ca marche impeccable, même si je ne comprends pas vraiment pourquoi (?) En effet, chacune des 2 parties de l'instruction conditionnelle est à présent composée, non plus d'un mélange de PHP et HTML, mais uniquement de PHP et... ca marche ! Après, c'est vrai que ça me double (en l'occurence) la longueur du code concerné par le test, donc, c'est un peu moins lisible, mais bon, ça tient la route quand même !

    Pour la proposition / au javascript, j'y connais (hélas) quasiment rien, aussi, pour l'instant du moins, j'éviterai... à moins que, si j'avais un bout de code javascript "sur mesure" sous la main... A ce propos, si quelqu'un avait une suggestion (ou une adresse à me proposer), Merci bcp !

    Après, l'approche CSS me parait vraiment très pertinente. En effet, rapidité d'exécution, concision et... lisibilité du code
    -> Du fait, je viens d'insérer ce bout de code, juste après ma feuille de style CSS adaptée pour Firefox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <!--[if gte IE 7]>
     
    <style type="text/css">
    .variation_verticale_si_internet_explorer
    {
    	margin-top:2px;
    }
    </style>
     
    <![endif]-->
    -> Ca marche vraiment nickel...
    Grand merci à toi !

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

Discussions similaires

  1. [XML] Classe xml compatible avec php 4.2.0
    Par arsene555 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/05/2011, 16h21
  2. mise en forme conditionnelle d'un csv avec php
    Par hindioriental dans le forum Langage
    Réponses: 3
    Dernier message: 03/05/2011, 09h17
  3. [PowerPc / Power] Instruction Power compatible avec PowerPc
    Par Flow_75 dans le forum Autres architectures
    Réponses: 4
    Dernier message: 11/04/2008, 10h43
  4. Double instructions conditionnelles en php ?
    Par Martyin dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2006, 17h27
  5. Réponses: 3
    Dernier message: 23/08/2004, 18h49

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