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 :

Des icones à la place de liens mais avec occultation possible.


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 022
    Points : 308
    Points
    308
    Par défaut Des icones à la place de liens mais avec occultation possible.
    Bonjour les amis :-).
    Rassurez vous, si vous n'avez pas tout compris dans le titre, je ne suis pas sur non plus en relisant de bien comprendre...

    Bon l'histoire est la suivante.
    J'ai un petit code bien sympas élaboré grâce à l'aide précieuse des membres de ce forum qui fait la chose suivante (le code hein, pas les membres du forum).

    1/ Allez chercher des infos dans une page exell et les placer dans des variables.
    2/ Vérifier le contenu des variable et modifier leur contenu s'il y a lieu. (Exemple si $telephone contient 0, il donne à $telcomplet la valeur "Pas de réservation par téléphone".
    3/ Afficher tout ça de manière propre et claire.

    Et ça marche plutôt bien :-).
    Vous pouvez voir le résultat ici : https://www.espaceimagi.com/_agenda_/agenda.php.

    Et voici le code en question :

    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
    <body>
    <?php
    /** Charger la bibliothèque **/ 
    set_include_path(get_include_path() . PATH_SEPARATOR . './Classes/');
    include 'PHPExcel/IOFactory.php';
    /** définir le fichier à examiner*/ 
    $inputFileName = './dates.xlsx';
    /** On "charge le fichier excel*/
    $objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
    /** On dit que c'est la feuille 0 du fichier excell qu'on va utiliser*/
    $worksheet=$objPHPExcel->getSheet(0);
    /** je met à zero la variable qui va compter les lignes*/
    $i=1;
    /** On boucle pour passer les lignes en revue*/
    foreach ($worksheet->getRowIterator() as $row) {
    	$i = $row->getrowindex();	
    	/** Ici je met dans les différentes variables le contenu de la cellule concernée pour la ligne en cours*/
    												$affiche    =$worksheet->getCellByColumnAndRow('0',$i)->getCalculatedValue();
    												$lieu       =$worksheet->getCellByColumnAndRow('1',$i)->getCalculatedValue();
    												$datu       =$worksheet->getCellByColumnAndRow('2',$i)->getCalculatedValue();
    												$heure      =$worksheet->getCellByColumnAndRow('3',$i)->getCalculatedValue();
    												$mail       =$worksheet->getCellByColumnAndRow('4',$i)->getCalculatedValue();
    												$telephone  =$worksheet->getCellByColumnAndRow('5',$i)->getCalculatedValue();
    												$reserve    =$worksheet->getCellByColumnAndRow('6',$i)->getCalculatedValue();
    												$spectacle  =$worksheet->getCellByColumnAndRow('7',$i)->getCalculatedValue();
    												$dati		= PHPExcel_Shared_Date::ExcelToPHP($datu);
    												$dati       =date('d-m-Y',$dati);
    												$dato       =date('d-m-Y');
    												$mailcomplet="Réserver par mail : " . $mail;
    												$telcomplet ="Réserver par téléphone : " . $telephone;
     
    if ($mail=='0')
    					{
    					$mail="";
    					$mailcomplet="Pas de réservation par mail";
    					}
     
    if ($telephone=='0')
    					{
    					$telephone="";
    					$telcomplet="Pas de réservation par téléphone";
    					}
     
    if ((strtotime($dati)>=strtotime($dato)) or (strtotime($dati)>=strtotime($dato) )) /** on regarde si la date de la ligne Excell est dans le passé, si pas on affiche le contenu des variables */
    {
    echo /** On envoi du HTML pour exploiter le contenu des différentes variables et que ça s'affiche bien*/
    <<<HTML
      <div class="spectacle">
        <img class="affiche" src="$affiche" alt="Affiche spectacle">
        <dl>
          <dd class="address">{$lieu}
    	  <dt class="title">{$spectacle}
          <dd class="date">{$dati} à {$heure}
          <dd class="mail"><a href="mailto:{$mail}">{$mailcomplet}</a>
          <dd class="tel"><a href="tel:{$telephone}">{$telcomplet}</a>
          <dd class="reservation"><a href="$reserve" target="_blank"><img src="./btn3.png" alt="Réservation"></a>
        </dl>
      </div>
    </html>
    HTML;
    }}
    $closeFileName = './dates.xlsx';
    ?> 
     
    </body>
    </html>

    Je suis donc heureux sauf qu'on ne va pas se voiler la face : c'est moche


    Ce que je voudrais c'est que cela ressemble à ceci plutôt.

    Nom : infoetresas.jpg
Affichages : 113
Taille : 78,5 Ko

    Vous me direz, simple, il suffit de mettre les icones dans un dossier et de faire des

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="$liendumachin" ><img src="./imagedelicone.png" alt="ce que ça fait"></a>
    Oui sauf que quand il n'y a pas de possibilité de réserver par un certain moyen, je voudrais afficher les icones grisées un peu comme ceci :

    Nom : sansteletmail.jpg
Affichages : 123
Taille : 76,3 Ko


    Alors du coup, voilà ce que j'ai pensé faire :
    1 Dans la partie des IF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    												$dati       =date('d-m-Y',$dati);
    												$dato       =date('d-m-Y');
    												$mailcomplet="Réserver par mail : " . $mail;
    												$mailimage  ="./mailactif.png";
    												$telcomplet ="Réserver par téléphone : " . $telephone;
     
    if ($mail=='0')
    					{
    					$mail="";
    					$mailcomplet="Pas de réservation par mail";
    					$mailimage=".mailinactif.png";
    					}
    Et dans la partie affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <dd class="mail"><a href="mailto:{$mail}"><img src={$mailimage} alt="mail"></a>

    Est ce que ça vous semble propre et judicieux ?
    Moi il y a 2 trucs qui me contrarient :

    1/ Même si on grise l'icone et qu'aucun numéro de téléphone ne s'affiche, le lien est encore actif, du coup si on click dessus ça va ouvrir lun mail sans adresse dedans.
    Ce que je voudrais c'est que quand l'icone est grisé, la fonction mailto: ne soit plus activée.
    Mais là je nage un peu pour imaginer comment faire ça...

    2/ J'ai quelques problèmes pour faire un joli petit tableau avec les icones alignés, les textes en dessous et que ça reste propre en responsive.
    Est-ce que je dois imaginer ce "tableau" dans le CSS comme un élement unique dans lequel viennent des image ou est ce que chaque élément doit avoir sa classe ?

    Merci de votre aide, je sais que je viens toujours avec des brols étranges mais bon au départ moi je suis un artiste hein

    A fort bientôt...

  2. #2
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Points : 232
    Points
    232
    Par défaut
    Bonjour, en effet les if à répétition sont inélégants. On peut refactoriser ça avec une bonne conception objet. Avez-vous des notions de POO ?

    Sinon avec les if :
    1/ pour désactiver le mailto:, autant conditionner la création du lien :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // Traitement des données
    if ($mail == '0') {
        $mailHtml="<img src='mailinactif.png' alt='mail'>";
    } else {
        $mailHtml="<a href='mailto:{$mail}'><img src='mail_actif.png' alt='mail'></a>"; // je ne connais pas le vrai nom du fichier
    }
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Affichage
    <dd class="mail"><?= $mailHtml ?></a>

    Mais notez que le else rend la solution encore moins élégante. Avec une conception objet, il serait possible de faire un truc du genre $obj->getMailHtml(); avec le même traitement en interne mais une utilisation plus claire...


    2/ J'ai quelques problèmes pour faire un joli petit tableau avec les icones alignés, les textes en dessous et que ça reste propre en responsive.
    Est-ce que je dois imaginer ce "tableau" dans le CSS comme un élement unique dans lequel viennent des image ou est ce que chaque élément doit avoir sa classe ?
    Je ne comprends pas vraiment cette question...
    Vous pouvez faire table.mytab { text-align: center; } par exemple pour aligner globalement les images et textes du tableau au centre de leur cellule.
    Mais les dl/dd ne définissent pas des tableaux mais des listes de définition.


    J'ai aussi une remarque à faire sur la sécurité : dans votre capture d'écran, vous partagez l'URL de votre site en production. En enlevant la dernière partie, je tombe sur la liste de vos fichiers du dossier, pensez à ajouter un .htaccess ou une autre méthode pour empêcher un éventuel individu mal intentionné de récolter des informations sur l'architecture de votre serveur et ainsi lui permettre de le pirater. Là je peux même récupérer directement le fichier xlsx...
    Et ne partagez pas vos URL de production !

  3. #3
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 022
    Points : 308
    Points
    308
    Par défaut
    Merci Trehinos.
    Je n'ai pas de notion de POO et je vais mettre des sales IF en place pour le moment, mais je vais me renseigner.
    Merci de l'info.

    Pour ce qui est de la sécurité je ne comprends pas bien.
    Il y a moyen de récupérer des fichiers comme le xlsx, oui mais et alors ?
    Je n'ai rien de secret sur le site !
    DU moment que personne ne sait rien modifier c'est le principal pour moi.
    Quelqu'un saurait il faire des modifs sans avoir mon login et pass de WP ou de mon FTP ?

    Merci :-)

  4. #4
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Points : 232
    Points
    232
    Par défaut
    Tant que vous ne laissez pas d'informations sensibles dans votre arborescence de fichiers, non, en théorie ça ne suffirait pas.
    Si votre fichier XLSX est un fichier public, alors soit, ça peut même être le mode de distribution de vos fichiers si vous voulez.

    Vu que vous extrayez les informations de ce fichier pour les rendre sur la page, je suis parti du principe que le fichier en lui-même devait rester confidentiel ; si tel est le cas, il vaut mieux ne pas permettre d'y accéder directement.
    Mais si non, non, ce n'est pas nécessaire bloquer l'accès.

    Juste voir une arborescence HTTP, ça me fait tout de suite penser à une fuite d'informations.

  5. #5
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 022
    Points : 308
    Points
    308
    Par défaut
    Merci :-)
    Je vais donc dormir sur mes deux oreilles avant de mettre en place ces vilains IF et avant de me pencher sur le POO :-)

    A fort bientôt...

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

Discussions similaires

  1. [DOM] Création de lien dans des balise en place
    Par Super_baloo8 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 20/04/2007, 10h54
  2. [XSLT] création d'un RSS : diffusion des liens xml avec xslt
    Par elhout dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/03/2007, 16h23
  3. [Java] Script pour formatter un textarea avec des icones
    Par odoobe dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/09/2006, 09h30
  4. Réponses: 1
    Dernier message: 30/06/2006, 16h01
  5. Réponses: 4
    Dernier message: 01/03/2006, 11h35

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