Catégorie : Langages informatique

  • Réaliser un suivi des paquets Coliposte / Colissimo dans votre site internet

    Super Edit :

    J’ai des infos de la poste, ils sont en train de mettre en place une API Officielle.
    Pour cela il faut avoir un compte Inet-Expeditor et le service sera proposé en janvier 2014.
    Il répondra au jolis nom de « colis view ». Je vous conseille de vous rapprocher de votre commercial car l’ancienne API sera supprimée.

    Edit : Apres de nombreuses années sans problèmes, laposte.fr à apparemment fermé son WebService, au jour où j’écris ces lignes (25/04/2013), il ne fonctionne plus.

    Edit 2 : LA poste à mis en place un véritable webService, voici le lien de la documentation :

    https://www.coliposte.fr/pro/docs/docutheque/divers/socolissimo/integrationwsshipping.pdf

    Edit 3 : Tout est revenu dans l’ordre…

    Grâce à ce code très simple on va récupérer sur notre page l’information de suivi Coliposte de votre client sans se connecter au site coliposte.fr.

    <?php
      $ch = curl_init();
      $agent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)";
      $ref = "http://www.laposte.fr";
      $url_de_colissimo_suivi = "www.laposte.fr/outilsuivi/web/suiviInterMetiers.php?method=xml&key=null&code=".$code_colissimo."&width=190&font=Arial&t=1253811351937" ;
        curl_setopt($ch, CURLOPT_USERAGENT, $agent);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_URL, $url_de_colissimo_suivi);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_REFERER, $ref);
        $data = curl_exec($ch);
    
       /* cURL va renvoyer du xml qui sera formaté de cette manière :
    
    	< ?xml version='1.0' ?>
    
    	< ![CDATA[1]]>
    	< ![CDATA[9A00092239388]]>
    	< ![CDATA[Particulier]]>
    	< ![CDATA[22/07/2010]]>
    	< ![CDATA[Votre colis est livré]]>
    	<base_label>< ![CDATA[Coliposte]]>
    								< ![CDATA[http://www.coliposte.net/particulier/suivi_particulier.jsp?colispart=xxxxxxxxxxxxxxxxxxxx]]>
    	< ![CDATA[]]>
    */
    
    // ça sera de l'UTF-8, utiliser utf8_decode si votre page est en ISO*/
    
    $sxml = simplexml_load_string($data);
    $message_du_xml = $sxml->message;
    $date_du_xml = $sxml->date;
    $colissimo_message = utf8_decode($message_du_xml);
    $colissimo_date = utf8_decode($date_du_xml) ;
    echo $colissimo_date;
    echo $colissimo_message;
    
    ?>

    ce code vous sera très utile pour un site de e-commerce.

    Grand maître L

  • Afficher un message en fonction de l’heure et du jour de la semaine en PHP

    Bonjour,

    Grace à ce petit script vous allez pouvoir afficher un message en fonction de la date et de l’heure de votre présence.

    <?php
    
    function planning(array $planningDesFermetures, $heureOuverture, $heureFermeture) {
    
        $heureOuverture = 8; //sert à afficher le script à partir de 9h et non 8h
        $heureFermeture = 20; //sert à afficher le script à partir de 21h
    
        $heureActuelle = date('H', time());
        $jourActuel    = date('w', time());
    
        $planningDesFermetures = array(0, 6); //dans ce tableau on sélectionne les jours de 0 à 6 (lundi au vendredi)
    
        if ((in_array($jourActuel, $planningDesFermetures)) || ( $heureActuelle <= $heureOuverture) || ( $heureActuelle >= $heureFermeture)) {
            echo "C'est fermé ! ";
        } else {
            echo "C'est ouvert";
        }
    }
    
    

    Grand maitre L

  • Le futur de Microsoft Internet Explorer

    Pendant longtemps les créateur de sites internet on été limités par le navigateur utilisé. Cette situation est en parti due aux problèmes qu’a eu Microsoft pour développer le successeur de Windows XP.

    A l’heure où je vous écris (2010), Microsoft assure encore le support du navigateur IE6. Le principal problème de navigateur est qu’il ne respecte pas les standards établis par le W3C, au profit de l’adjonction de ses propres fonctionnalitées. La situation s’est à peine améliorée avec l’arrivée d’IE7 puis d’IE8.

    Aujourd’hui la béta d’Internet Explorer 9 nous montre dans quelle direction la firme de Bill Gates veut aller.

    Nous pouvons citer :

    • Meilleur support des standards du W3C
    • Support du html5
    • Support de CSS3

    Autrement dit une révolution pour Microsoft et un bol d’air pour les développeurs Web.

    Dans cette vidéo on peut voir la dernière version beta d’IE9 manipuler des objets HTML5.
    Get Microsoft Silverlight
    Que du bon en perspective…

    Grand Maître L

  • Ce mardi je vous emmène au casino !

    C’est avec ce code source que vous allez pouvoir jouer au « Bandit manchot ». Il est séparé en deux parties, le Html et le JavaScript.

    Pour voir le résultat, cliquez ici.

    Le code Html :

    <body>
    <br />
    <div id="globale">
    <br />
    <div id="contenu">
    <br />
    <div id="levier2">
    
                    <input type="image" value=" " onclick="lancer_jeu();" id="levier"/>
                </div>
    <p>
    <br />
    <div id="resultat">
    <br />
    <p id="affichage_gains">
                    ---
                    </p>
    <p>
                </div>
    <p>
    <br />
    <div id="pot">
    <br />
    <p class="vert">votre pot <br />est de :
                    </p>
    <p>
    
    <br />
    <p id="affichage_pot">100
                    </p>
    <p>
    <br />
    <p class="vert">mise :
                    </p>
    <p>
    <br />
    <p id="affichage_mise">0
                    </p>
    <p>
                </div>
    <p>
    <br />
    <div id="jackpot">
                    <img name="s1" src="media/theme/slot-vide.png" alt="slot-vide"/>
                    <img name="s2" src="media/theme/slot-vide.png" alt="slot-vide"/>
                    <img name="s3" src="media/theme/slot-vide.png" alt="slot-vide"/>
                </div>
    <p>
    
    <br />
    <div id="boutons">
                    <input onclick="miser();" type="image" src="media/theme/mise-plus.png" id="miser1"/>
                    <input onclick="tout_miser();" type="image" src="media/theme/mise-tout.png" id="miserall"/>
                </div>
    <p>
            </div>
    <p>
        </div>
    <p>
    </body>
    

    Le code JavaScript :

    var mise = 0;
    var pot = 100;
    var gains = 0;
    // nombre de slots
    var nombre_slots = 3;
    // declaration d'un tableau avec "slots" comme valeur
    var slots = new Array(nombre_slots);
    //dclaration de la valeur des slots
    var valeur_des_slots = 0;
    
    function lancer_jeu()
    {
        if (mise == 0) return;
    
        // rinitialisation de la valeur des slots
        valeur_des_slots = 0;
    
        // creation et remplissage du tableau
        for (var index = 0; index < nombre_slots; index++) { slots[index] = tirer_aleatoirement_image(); } s1.src=slots[0]; s2.src=slots[1]; s3.src=slots[2]; calculer_gains(); } //Cette fontion sert pour augmenter la valeur du pot function garder_gains() { if (valeur_des_slots > 0)
        {
            //alert('Vous avez Gagné !!!'); // Affiche une box avec le message "Vous avez Gagné"
            pot = pot + gains;
        }
    }
    
    //fonction pour tirer alatoirement une image
    
    function tirer_aleatoirement_image()
    {
        var nombre_images = 4;
        // nom de toutes les images d'un slot
        var images = new Array("./media/slot/slot-euro.png","./media/slot/slot-cerise.png","./media/slot/slot-etoile.png","./media/slot/slot-couronne.png");
        // tirage de l'alea
        var alea = Math.floor(Math.random()*nombre_images);
        // recuperation du nom de l'image dans le tableau
        var slot = images[alea];
        // mise  jour de la valeur des slots
        valeur_des_slots = (Math.pow(10,alea)) + (valeur_des_slots);
        return slot;
    }
    
    function calculer_gains()
    {
        //je fais un switch case pour savoir quels sont mes gains
        switch(valeur_des_slots)
        {
            case nombre_slots:
                gains = mise*20;
                alert('jackpot');
                garder_gains();
                break;
    
            case nombre_slots * 1000:
                gains =  mise*15;
                garder_gains();
                break;
    
            case nombre_slots * 100:
                gains = mise*10;
                garder_gains();
                break;
    
            case nombre_slots * 10:
                gains = mise*5;
                garder_gains();
                break;
    
            case 12:
            case 102:
            case 1002:
                gains = mise*2;
                garder_gains();
                break;
    
            default:
                gains = 0;
                break;
        }
    // rechargement automatique de la mis tant que le pot est plein (plus ergonomique)
        mise = 0;
        if (pot > 0)
        {
            pot -= 1;
            mise = 1;
        }
        document.getElementById("affichage_pot").innerHTML = pot;
        document.getElementById("affichage_gains").innerHTML = gains;
        document.getElementById("affichage_mise").innerHTML = mise;
    }
    
    function miser()
    {
        if (pot > 1)
        {
            pot -= 1;
            mise += 1;
            document.getElementById("affichage_pot").innerHTML = pot;
            document.getElementById("affichage_gains").innerHTML = gains;
            document.getElementById("affichage_mise").innerHTML = mise;
        }
    }
    function tout_miser()
    {
        if (pot > 1)
        {
            mise += pot;
            pot = 0;
            document.getElementById("affichage_pot").innerHTML = pot;
            document.getElementById("affichage_gains").innerHTML = gains;
            document.getElementById("affichage_mise").innerHTML = mise;
        }
    }
    

    Le code css :

    *
    {
        margin: 0;
        padding: 0;
    }
    p
    {
        font-family: Arial;
    }
    /*------------------divs---------------------*/
    #globale
    {
        width: auto;
        height: auto;
    }
    #contenu
    {
        position: relative;
        top:25px;
        margin-left:auto;
        margin-right: auto;
        background: url(../theme/fond.png) no-repeat;
        width: 642px;
        height: 426px;
    }
    #levier
    {
            float: right;
            width: 96px;
            background: url(../theme/levier-depart.png) no-repeat;
            width:100px;
            height:300px;
    }
    #levier2
    {
            float: right;
            width: 96px;
    }
    #levier:hover
    {
        background: url(../theme/levier-milieu.png) no-repeat;
    }
    #levier:active
    {
        background: url(../theme/levier-jouer.png) no-repeat;
    }
    #jackpot
    {
        float:right;
        top:30px;
        position:relative;
        right:30px;
    }
    
    #resultat
    {
        position: relative;
        background:url(../theme/resultat.png) no-repeat;
        width: 532px;
        height: 61px;
        margin-left:6px;
        top:20px;
    }
    #resultat p
    
    {
        font-size: 30px;
        top:15px;
    }
    
    #result-tirage
    
        {
            position: relative;
            float: right;
            width:auto;
            top:35px;
            right:40px;
        }
    #pot
    {
        position: relative;
        background:url(../theme/mise.png) no-repeat;
        width: 149px;
        height: 199px;
        float:left;
        top:40px;
        margin-left: 7px;
    }
    
    #pot p
    {
        font-size: 15px;
        top:35px;
        margin-top: 10px;
    }
    #boutons
    {
        position: relative;
        top:50px;
        float: left;
        left:90px;
        width: auto;
        height: auto;
    }
    #affichage_gains
    {
        position: relative;
        color:green;
        text-align: center;
    }
     #affichage_pot
    {
            position: relative;
            color:green;
            text-align: center;
    }
    
    #affichage_mise
    {
            position: relative;
            color:green;
            text-align: center;
    }
    /*------------------------------classes--------------------*/
    .vert
    {
            position: relative;
            color:green;
            text-align: center;
    }

    Grand maître L

  • Un code source PHP pour sauvegarder votre base de donnée MySQL

    Voici un code source fonctionnel pour sauvegarder l’intégralité de votre base de donnée Mysql.

    
    <?php
    ################################################################################
    # L'auteur a autorisé la redistribution gratuite et l'inclusion de ce code dans
    # les programmes à condition que cette notice de copyright soit dûment incluse.
    # BackySQL (c)  2010 Brice Sanchez
    # 10/03/2010 Brice SANCHEZ - www.brice-sanchez.com
    #
    # LE CODE COUVERT PAR CETTE LICENCE EST FOURNI « EN L'ÉTAT »,
    # SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, INCLUANT,
    # SANS S'Y LIMITER, LES GARANTIES D'ABSENCE DE DÉFAUT, DE QUALITÉ MARCHANDE,
    # D'ADÉQUATION À UN USAGE PARTICULIER OU DE NON-VIOLATION DE DROITS DE TIERCES
    # PARTIES. VOUS ASSUMEZ TOUS LES RISQUES LIÉS À LA QUALITÉ ET AUX PERFORMANCES
    # DU CODE COUVERT PAR CETTE LICENCE. SI UN DÉFAUT, QUEL QU'IL SOIT, EST DÉTECTÉ
    # DANS LE CODE COUVERT PAR CETTE LICENCE, VOUS (ET NON LE DÉVELOPPEUR INITIAL
    # OU UN CONTRIBUTEUR) ASSUMEZ LE COÛT DES SERVICES D'ASSISTANCE, DES RÉPARATIONS
    # OU DES CORRECTIONS NÉCESSAIRES. CETTE LIMITATION DE GARANTIE CONSTITUE UNE
    # PARTIE ESSENTIELLE DE CETTE LICENCE. LE CODE COUVERT PAR CETTE LICENCE NE PEUT
    # ÊTRE UTILISÉ QUE DANS LE CADRE DE CETTE LIMITATION DE GARANTIE.
    # Vous utilisez ce code à vos propres risques.
    ################################################################################
    ////////////////////////////////////////////////////////////////////////////////
    // @Description
    //  Sauvegarde de base de donnée
    // @Version				0.6
    // @Licence				GNU/GPL3
    //  http://www.gnu.org/licenses/gpl-3.0.html
    // @Publication				Vendredi 12 Mars 2010
    // @Revision				Samedi 13 Mars 2010
    // @Catgorie				Administration
    // @Compatibilite			PHP 4 >= 4.0.1, PHP 5
    // @Auteur				Brice Sanchez
    //  http://www.brice-sanchez.com/
    // @Contributeur			Flashx
    // @Contact
    // @Télechargement
    //  http://www.siteduzero.com/forum-83-498153-p1-sauvegarde-automatique-de-la-base-de-donnee-mysql.html#r4753068
    // @Note
    //  Utiliser un cron job toute les 24 h vers 3heure du matin
    //
    // @changement
    //  Support la sauvegarde de DB differente
    //  Windows compatibility
    //  check config
    //
    // Remerciement
    //  * à M@teo pour héberger gracieusement nos sources,
    //  * à Brice pour l'élan communautaire qu'il a su ranimer,
    //  * aux développeurs de siteduzero.com pour leurs conseils( notamment Sebi57)
    ////////////////////////////////////////////////////////////////////////////////
    
    ////////////////////////////////////////////////////////////////////////////////
    // Configuration
    ////////////////////////////////////////////////////////////////////////////////
    //TODO : céer un object de configuration( ajouter un nom a cette config, donner plus d'option)
    // inclure la configuration : pas de C/C
    
    // Nom de la base de donnée à enregistrer
    $nom_bdd = 'test' ;
    
    // Hôte de la base de donnée ciblé
    $hote = 'localhost' ;
    
    // Port de la base de donnée
    $port = '3306' ;
    
    // Nom d'utilisateur de la base de donnée à enregistrer
    $utilisateur = 'root' ;
    
    // Mot de passe de la base de donnée à enregistrer
    $mot2passe = '' ;
    
    // Exemple : latin1 ou utf8
    $encodage_caracteres_mysql = 'latin1' ;
    
    // Remplir le tableau si on veut sauvegarder uniquement certaines tables
    // Exemple : array('table1','table2','table5')
    $selection_tables_mysql = array();
    
    // Chemin absolu de l'emplacement du site
    $chemin_absolu_site = dirname( __FILE__) . DIRECTORY_SEPARATOR;
    
    // Emplacement sur le FTP du répertoire des sauvegardes
    $repertoire = 'sauvegarde_mysql';
    
    // Nom du fichier ( ex : nomdelabasededonnee_2010-03-01_01-01-01.sql)
    $ext_fichier = 'sql' ;
    
    // Nombre de sauvegardes à garder sur le FTP
    $nbre_sauvegardes_a_garder = 7 ;
    
    define( "CHECK", true);
    define( "FIRST_RUN", true);
    
    ////////////////////////////////////////////////////////////////////////////////
    // Initialisation
    ////////////////////////////////////////////////////////////////////////////////
    $repertoire_sauvegardes = $chemin_absolu_site . $repertoire.DIRECTORY_SEPARATOR;
    
    $nom_fichier = $nom_bdd.'_'.date('Y-m-d_H-i-s').'.'.$ext_fichier ;
    
    ////////////////////////////////////////////////////////////////////////////////
    // Vérification de l'environnement
    ////////////////////////////////////////////////////////////////////////////////
    if( true == CHECK)
    {
    $sapi_type = php_sapi_name();// Context d'execution
    
    if (substr($sapi_type, 0, 3) != 'cli') {
    if( true == FIRST_RUN)
    {
    ?><html><body>
    <p>Il semblerai que vous souhaitez utiliser ce fichier a travers le reseaux.<br/>
    <p>Si tel est votre souhais, Pensez à :
    <ul>
    <li>Autentifier l'attaquant;</li>
    <li>Identifier l'attaquant;</li>
    <li>Modifier périodiquement vos codes d'acces.</li>
    </ul></p>
    </body></html><?php
    }
    exit( );
    }
    if( is_dir ($repertoire_sauvegardes) === FALSE ) {
    if(mkdir ($repertoire_sauvegardes, 0700) === FALSE ) {
    exit('Impossible de créer le répertoire de sauvegarde'.PHP_EOL);
    // TODO : Indiquer une solution
    }
    } else if( is_writable( $repertoire_sauvegardes)===FALSE) {
    exit('Impossible d\'écrire dans le répertoire de sauvegarde'.PHP_EOL);
    // TODO : Indiquer une solution
    }
    
    // tester la connexion Mysql;
    // Que ce passe t-il si MySQL n'est pas en TCP mais en socket file ?
    // Optimiser le mode de compatibilité mysql( interoger mysql)
    // Que ce pass t'il si on se plante dans le nom des table $selection_tables_mysql( interoger mysql)
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    // Sauvegarde de la base de donnée
    ////////////////////////////////////////////////////////////////////////////////
    
    $commande  = 'mysqldump';
    $commande .= ' --host='.$hote;
    $commande .= ' --port='.$port;
    $commande .= ' --user='.$utilisateur;
    $commande .= ' --password='.$mot2passe ;
    $commande .= ' --skip-opt';
    $commande .= ' --compress';
    $commande .= ' --add-locks';
    $commande .= ' --create-options';
    $commande .= ' --disable-keys';
    $commande .= ' --quote-names';
    $commande .= ' --quick';
    $commande .= ' --extended-insert';
    $commande .= ' --complete-insert';
    $commande .= ' --default-character-set='.$encodage_caracteres_mysql;
    $commande .= ' --compatible=mysql40';
    $commande .= ' --result-file='.$repertoire_sauvegardes.$nom_fichier ;
    $commande .= ' '.$nom_bdd ;
    
    if( !empty($selection_tables_mysql) ) {
    $commande .= ' '.implode(' ',$selection_tables_mysql) ;
    }
    
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // WARNING
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // a REVOIR, exec() serrai plus mieux ????????????????
    // Execution de la commande de sauvegarde
    system($commande) ;
    
    // Compression au format GZIP du fichier sauvegardé
    system('cd '.$repertoire_sauvegardes.'; gzip '.$nom_fichier) ;
    // $] gzip: test_2010-03-13_02-31-16.sql.gz already exists; do you wish to overwrite (y or n)?
    // et il me crée *.sql sans le gziper
    // donc verifier les erreur retourner par systeme
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // WARNING
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    
    //TODO choix de la destination de la sauvegarde sur FTP
    
    // Initialisation des variables
    $tableau_sauvegardes = array();
    
    // Ouverture du dossier, Attention au cache du filesysteme???
    if ($repertoire_ouvert = opendir($repertoire_sauvegardes)) {
    // Lecture des entrées
    while( ($fichier_en_cours = readdir($repertoire_ouvert)) !== false) {
    if(is_file($repertoire_sauvegardes.$fichier_en_cours)) {
    if( substr( $fichier_en_cours, 0, strlen( $nom_bdd))!=$nom_bdd ) {
    continue;//
    }
    // Mise en tableau des résultats
    $tableau_sauvegardes[] = $fichier_en_cours;
    }
    }
    // fermeture du dossier
    closedir($repertoire_ouvert) ;
    }
    
    sort($tableau_sauvegardes, SORT_STRING);
    
    // Supprime les fichiers en trop
    $ln = sizeof( $tableau_sauvegardes)-( $nbre_sauvegardes_a_garder-1);
    for($i=0; $i<$ln; $i++) {
    unlink($repertoire_sauvegardes.$tableau_sauvegardes[$i]);
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    // Loger nos actions
    ////////////////////////////////////////////////////////////////////////////////
    //TODO, envoyer un mail : c'est rassurant
    

    Grand maître L

  • Et un test en CSS

    #hello{
    //un commentaire qui dit hello world en css
    color:blue;
    }