Catégorie : Programmation Web

programmation Web

  • Calculatrice d’abonnement dynamique

    Suite à mon article sur Leaflet et a la création de cercle dynamique, j’ai décidé de partager avec vous un autre de mes scripts.

    C’est une petite fonctionnalité qui permet de calculer dynamiquement des abonnements, à partir de 2 paramètres :

    • le type d’abonnement (annuel ou mensuel), avec son tarif
    • Le nombre d’abonnements choisi.

    C’est une petite fonctionnalité que j’ai pu développer en peu de temps, et qui est facile à faire évoluer.
    Les seules dépendances sont bootstrap 4, et Jquery 3.

    Il suffit juste de choisir le type d’abonnement que vous souhaitez, et un nombre d’utilisateurs, et la calculatrice donnera directement le résultat.

    Voici ce que donne le visuel :

    Calculatrice d'abonnement dynamique.

    Dites-moi ce que vous en pensez !

  • Cercle dynamique dans Leaflet

    Créer un cercle dynamique dans Leaflet
    Marker & circle in Leaflet

    Aujourd’hui, je continue ma lancée dans le partage de code, mais avec une petite différence. Le code d’aujourd’hui ne contiendra pas de PHP, mais du JavaScript.

    Vous pouvez retrouver ce code sur codepen, sous le titre Dynamical circle in leaflet.

    Comme vous pouvez le voir dans cette exemple codepen, j’ai fait en sorte de relier deux champs d’un formulaire avec une forme géométrique d’une carte Leaflet (un cercle, dans mon exemple).

    Il faut prendre en compte que ces 2 mêmes champs sont aussi relié entre eux. Si l’un des deux change, le deuxième change à la volée. Ils sont limité tous les 2 entre les valeurs 0 et 100.
    Le cercle se modifiant en direct, dès que la valeur des champs input change.

    J’ai fait en sorte que le code soit le plus simple possible. On peu le faire évoluer rapidement et facilement.

    Les dépendances CSS/JS de ce code sont : Bootstrap (3 ou 4), Jquery 3.5, et Leaflet 1.7.1
    Il est possible de s’abstraire de Bootstrap et Jquery, en faisant quelques modifications dans le HTML et le Javascript.
    Par contre, il est obligatoire d’utiliser les dépendances CSS et JS de Leaflet, pour la carte.

    Qu’en pensez-vous ?

  • Comment insérer un élément au milieu d’un tableau PHP ?

    Comment insérer un élément au milieu d’un tableau PHP ?

    Lors d’une demande de développement PHP, je devais créer une fonction qui répondait à la question suivante :

    Comment insérer un élément au milieu d’un tableau ?

    Je n’ai pas trouvé de fonction PHP spécifique à cette demande.
    Par contre, j’ai découvert une réponse qui me permettrai de créer une fonction de ce genre.
    Le code est le suivant :

    //Soit le tableau contenant pomme, poire, pêche, kiwi. On veut insérer abricot au milieu de ce tableau
    $tab = array ("pomme", "poire", "pêche", "kiwi");
    $tab1 = array_slice ($tab, 0, 2); //Récupère pomme et poire
    $tab2 = array_slice ($tab, 2); //Récupère tous les éléments à partir de l'indice 2
    array_push ($tab1, "abricot"); //Ajoute à la fin du tableau l'élément abricot
    $tab = array_merge ($tab1, $tab2); //Fusionne les deux tableaux
    echo '<pre>'; print_r($tab); echo '</pre>';

    Pour expliquer le code en quelques mots

    • on extrait une (ou plusieurs) portion(s) du tableau avec array_slice().
    • On empile un ou plusieurs éléments à la fin d’un tableau avec array_push()
    • On fusionne un ou plusieurs tableaux avec array_merge().

    Cela affiche le tableau suivant :

    Array([0] => pomme [1] => poire [2] => abricot [3] => pêche [4] => kiwi)

    Voici ce que redonne le même code ci-dessus, mais factoriser dans une fonction.

    function add_middle($tab, $add_element, $indice_tab) {
        $tab1 = array_slice ($tab, 0, $indice_tab);
        $tab2 = array_slice ($tab, $indice_tab);
        array_push ($tab1, $add_element);
        $tab = array_merge ($tab1, $tab2); //Fusionne les deux tableaux
    
        return $tab;
    }
    
    //Soit le tableau contenant pomme, poire, pêche, kiwi.
    // On veut insérer abricot au milieu de ce tableau
    $tab = array ("pomme", "poire", "pêche", "kiwi");
    $add_element = 'abricot';
    
    $tab = function add_middle($tab, 'abricot', 2);
    
    echo '<pre>'; print_r($tab); echo '</pre>';

    Que pensez-vous de cette technique ? Et connaissez-vous des fonctions natives permettant de faire ce genre de chose ?
    N’hésitez pas à venir le partager avec moi.

    PS : Quelques heures après la parution de cet article, Frédéric Bouchery me proposait une solution avec une fonction native en PHP. Je peux le remercier.
    Voici cette solution :

    <?php
    $array = ['pomme', 'poire', 'pêche', 'kiwi'];
    array_splice($array, 2, 0, ['abricot']);
    print_r($array);
    
    Array
    (
        [0] => pomme
        [1] => poire
        [2] => abricot
        [3] => pêche
        [4] => kiwi
    )
  • array_rand – Prendre des clés au hasard dans un tableau

    En PHP, et dans les autres langages aussi, il existe les fonctions générant de l’aléatoire.
    En premier lieux, pour ces fonctions-là, nous pensons souvent à rand et mt_rand. Elles sont les plus courantes, générant des valeurs aléatoires et nous retournant des chiffres.

    Il existe d’autres fonctions, basé sur l’aléatoire, mais qui ne nous retourne pas des chiffres. Je vais prendre l’exemple de array_rand.

    array_rand : comment ça marche

    J’ai rencontré cette fonction il n’y a pas très longtemps.
    array_rand prend une ou plusieurs clés, au hasard dans un tableau, et retourne la ou les clés de ces valeurs.

    Voici un exemple de cette fonction :

    <?php
    $input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
    $rand_keys = array_rand($input, 2);
    echo $input[$rand_keys[0]] . "\n";
    echo $input[$rand_keys[1]] . "\n";
    ?>

    Ce code nous donnera en sortie, 2 des noms de personnage de la saga Matrix contenu dans le tableau.

    Chose importante, il faut savoir que cette fonction ne convient pas pour de la cryptographie.

    Un problème réel

    Comme je disais plus haut, j’ai connu cette fonction il n’y a pas longtemps, pour la création du bot Twitter @1animalparjour.

    Ce bot a pour but de donner, chaque jour, une photo d’animal mignon.
    Pour faire cela, j’ai cherché ou créé différentes API qui contenaient les photos des différents animaux.
    Les URLs des différentes API ont ensuite été mises dans un tableau PHP.

    $ar = [
        'https://random.dog/woof.json',
        'https://randomfox.ca/floof/',
        'http://randomanimal.guillaume-richard.fr/animals/bunny/',
        'http://randomanimal.guillaume-richard.fr/animals/cat/',
        'http://randomanimal.guillaume-richard.fr/animals/hedgehog/'
    ];
    $rand_keys  = array_rand($ar);
    $infos      = $ar[$rand_keys];
    
    var_dump($infos); // réponse possible : https://random.dog/woof.json

    Ce code en lui-même ne sert pas à grand chose. C’est juste pour l’exemple.
    La suite de mon script de mon bot récupère ce lien, et lit les informations qui y sont contenu.
    Je récupère le lien de l’image, télécharge cette dernière image, puis l’upload sur le fil Twitter tous les matins.

    Use Case

    Je ne peux pas forcément montrer de réel Use Case de mon script. Comme vous pouvez le comprendre, la finalité de ce script étant l’upload d’image sur le fil Twitter.
    Je ne peux que monter certaines des photos qui sont déjà sur ce fil Twitter.

    Conclusion

    J’ai créé ce compte Twitter pendant mon chômage partiel. Je voulais voir ce qu’il était possible de faire dans ce cas-là.
    Cela m’a permis d’apprendre à connaitre cette fonction, et ce qui était possible de faire avec.

    Il est tout à fait possible d’améliorer cette fonction, et même de la refaire complètement en quelques lignes. Je compléterai cette article quand j’aurai fait cette partie.

    J’espère que cette exemple vous à plus.

  • Implode en PHP

    Malgré le fait que PHP soit mal aimé, il reste majoritairement utilisé pour la création de site Web.
    Même après des années d’expériences dans ce langage, on découvre toujours de nouvelles fonctions. Dans certains cas, on les améliore pour qu’ils correspondent à nos besoins.

    implode : comment ça marche.

    A priori, 99% des développeurs PHP connaissent cette fonction, qui permet de rassembler les éléments d’un tableau en une chaîne.
    Voici un petit exemple issu de la documentation de PHP :

    $array = array('lastname', 'email', 'phone');
    $comma_separated = implode(",", $array);
    
    echo $comma_separated; // lastname,email,phone

    Comme vous pouvez le voir, tous les éléments du tableau $array se regroupent dans la chaîne de caractère $comma_separated.
    Tous les éléments de la chaîne de caractère, se retrouvent dans le même ordre que dans le tableau.

    Un problème réel

    J’ai eu l’occasion, fin 2019, de créer un bot Twitter simple qui donne les prix d’essence les moins chères en Haute-Garonne.
    Dans certains cas, plusieurs villes pouvaient avoir le prix le moins cher, selon le type d’essence.

    https://twitter.com/EssenceHg/status/1262260894094053376

    Comme je récupérais le nom de ces villes dans un tableau, et que je devais les ajouter dans un tweet, l’utilisation de la fonction implode était obligatoire.

    De plus, entre les 2 dernières villes, je ne voulais pas mettre la même séparation que les autres éléments.
    En l’occurrence, je voulais mettre un ‘et’ à la place d’une virgule. La fonction finale donne :

    /**
     * Join a string with a natural language conjunction at the end.
     * @param string $glue
     * @param array $pieces
     * @param string $conjonction
     * @return string $str
     */
    function implode_cjt(string $glue, array $pieces, string $conjonction = 'et'):string {
      $str = array_pop($pieces);
      if ($pieces) {
        $str = implode($glue, $pieces).' '.$conjonction.' ' $str;
      }
      return $str;
    }

    Comme vous pouvez remarquer, ma fonction récupère 3 paramètres :

    • une chaîne de caractère glue, liaison des infos du tableau.
    • la tableau pieces, qui est le tableau de chaînes à rassembler.
    • conjonction, qui est la liaison des 2 derniers éléments du tableau.

    La fonction est simple.

    • On retire d’abord le dernier élément du tableau, avec un array_pop.
    • Si le tableau pieces contient encore des éléments, on les regroupe avec un implode (sans oublier notre conjonction et la valeur récupérée dans le Step 1)

    Use Case

    Voici deux exemples d’utilisations de cette fonction :

    $villes = ["Paris", "Bordeaux", "Toulouse", "Marseille"];
    $str = implode_cjt(',', $villes);
    echo $str; // Paris, Bordeaux, Toulouse et Marseille
    
    $villes = ["Blois", "Paris", "Toulouse", "Castres"];
    $str = implode_cjt(',', $villes, 'ou');
    echo $str; // Blois, Paris, Toulouse ou Castres

    Conclusion

    Je voulais inaugurer ce concept d’articles avec un exemple simple.
    J’espère que cet article vous à plus. Si vous en voulez d’autres, n’hésitez pas à me le dire.