Javascript array

var voiture = ['Saab', 'Volvo', 'BMW'];   
var cars = new Array('Saab', 'Volvo', 'BMW'); // même chose syntaxe trop lourde
//plus lisible pour les longues listes
var voiture = [
    'Saab',
    'Volvo',
    'BMW'
];

voiture[0] // contient Saab

var mesvoiture[1] = voiture; // on peut tout stocker dans une ligne de tableau, un autre tableau, un objet, une fonction ...
var mesvoiture[3] = ['Saab','Peugeot', 'Fiat'] ; // un tableau stocké dans un tableau

typeof voiture;             // returns object  et pas array  utiliser plutôt :
Array.isArray(voiture);     // true  
var camion = [];   // -> création du tableau camion vide

// ne pas utiliser si on veut un tableau -> voir objets
var person = {firstName:'John', lastName:'Doe', age:46};   // un peu comme un tableau, mais un objet -> les propriétés tableau ne s'y appliquent pas
voiture['marque']='peugeot'' //  voiture est devenu un objet -> ne pas faire

/********************************************************/
var x = voiture.length;            // x -> 3 

var voiture_tri = voiture.sort();  // une copie de voiture triée par ordre alpha
voiture.push('Renault');           // ajoute à la fin du tableau et retourne la longeur du tableau
unshift()                          // idem début du tableau
var tt=voiture.pop();              // enlève le dernier élément du tableau  et le met dans tt
var tt=voiture.shift();            // idem premier element

voiture.splice(2, 0, 'Fiat', 'Citroen');  // se positionne en 2 dans voiture, enlève 0 élement et insère Fiat, Citroen

var a = voiture.indexOf('Volvo');      // 1  voiture[1] = 'Volvo' permet de tester si une valeur est dans un tableau -1 si pas trouvé
var a = voiture.lastIndexOf('Volvo');  // comme indexOf mais parcours le tableau en partant de la fin

/***********************************************************/
// parcourir le tableau
var index;
for (index = 0; index < voiture.length; index++) {
    console.log(voiture[index]);
} 

// la même chose
function aff(item, index){ console.log(item);}
voiture.forEach(aff);


// parcour tout le tableau applique une fonction et retourne le résultat dans un tableau
var v2 = voiture.map(
            function(valeur, index){return valeur + 'tt';}
         );   //v2 -> ["Saabtt", "Volvott", "BMWtt"]

// idem mais retourne une seule valeur
var v2 = voiture.reduce(
            function(total, valeur){return total + '--' + valeur;}  // total est le return du calcul précedent
         );   //v2 -> "Saab--Volvo--BMW"
reduceRight() ; // la même chose mais parcour le tableau de droie à gauche

voiture.reverse();  //['Saab', 'Volvo', 'BMW']  -- > ['BMW', 'Volvo', 'Saab'];

/************************************************************/
var voiture_txt = voiture.join();  //  -> "Saab,Volvo,BMW"  toutes les valeur du tableau dans une chaîne

var vehicule = voiture.concat(camion);    // faire un tableu avec deux

// recherche le premier sur critère (saute les valeurs vides)
var ages = [3, 10, 18, 20];
function checkAdult(age) {
    return age >= 18;
}
var adult = ages.find(checkAdult);  // retourne 18 : la première réponse true de la fonction checkAdult
var adult ages.findIndex(checkAdult); // même chose mais retourne l'index : 2

les array sont aussi des objets -> voir les possibilité des object

liens

w3schools

CSS sélecteur

<link rel="stylesheet" type="text/css" href="style.css">


* {font-size: 14px;color:orange;}    /* selectionne tout ne sert à rien seul */
h1 { color: navy; }                  /* une balise*/
li a {font-size: 10px;}              /* espace -> sélectionne tous les a contenu dans un li, ne sélectionne pas le li */
p > img {text-align: center;}        /* La même chose, mais ne prends img que si tout de suite après p, pas d'autres balises sur le chemin */
h1, h2, h3 {background-color: red;}  /* sélectionne toutes les h1 et h2 et h3*/

.message{ 
   border: 1px solid black; 
   background: white;
}
<div id="prix" class="message"> ... </div>              /* affecte la class message au div*/
<div id="qte"  class="message"> ... </div>              /* même class sur un autre div*/

#msg2{ border: 1px solid black; }                       /* comme une classe mais doit être unique */
<div id="mesg2">      ... </div>                        /* affecte le style mesg2 au div*/

div[tarif] { color: blue; }                             /* tous les div qui ont un attribut tarif*/
<div id="mesg3" tarif="3.20"> ... </div>                /* affecte le style mesg3 au div*/

div[code_postal="38500"] { color: red; }                /* tous les div dont l'attribut code_postal vaut 38500*/
<div id="mesg3" code_postal="38500"> ... </div>         /* affecte le style mesg3 au div*/

div[code_postal=^"38"] { color: pink; }                /* tous les div dont l'attribut code_postal commence pas 38*/
div[code_postal=~"38"] { color: pink; }                /* tous les div dont l'attribut code_postal contient  38*/
<div id="mesg3" code_postal="38 75 33 01"> ... </div>  /* affecte le style mesg3 au div*/

a {}  a:hover {}  a:visited  a:active .menu a:hover {}  div:hover

p:first-child /* premier sous-element*/
p i:first-child  /* premier sous-truc des i qui sont dans des p */

/* si plusieurs règles s'appliquent à un même élément  c'est la moins générale, la plus précise, qui l'emporte*/
p{color:red;}
.message{color:green;}
<p class="message"></p>  /* sera green*/

/*                            */

 

PHPExcel

PHPExcel

Lecture ecriture de fichiers Excel en PHP

<?php 
require_once($_SERVER[DOCUMENT_ROOT]."/monchemin/class/PHPExcel.php");
require_once($_SERVER[DOCUMENT_ROOT]."/monchemin/class/PHPExcel/IOFactory.php");
$modele  = $_SERVER[DOCUMENT_ROOT]."/monchemin//modele/excel_modele.xls";
$excelReader = PHPExcel_IOFactory::load($modele); //charge le fichier excel
$excelReader->setActiveSheetIndex(1);   // sélection deuxième onglet (1) facultatif

$excelReader->getActiveSheet()->SetCellValue("C2", "test");   // Mets "test" dans la cellule C2

// acces aux cellule en numérique pratique pour des boucles
$excelReader->getActiveSheet()->setCellValueByColumnAndRow(1, 3, "test");   // Mets "test" dans la cellule B3

// mets une date MySQL dans la cellule C4
$bidon=faire_date($row["DATE"],$excelReader, "C4" );

// force le format texte pour afficher par exemple un code barre
$excelReader->getActiveSheet()->setCellValueExplicit("F5", $row[GENCOD], PHPExcel_Cell_DataType::TYPE_STRING);

// envoi le fichier excel au navigateur
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment;filename=mon_nouveau_fichier.xls");
header("Cache-Control: max-age=0");
$objWriter = PHPExcel_IOFactory::createWriter($excelReader, "Excel5");
  
$objWriter->save("php://output");

// ou pour sauver dans un fichier sur le disque (sans les header)
$objWriter->save("monfichier.xls");


function faire_date($dt,&$excelReader, $cel ){
	$date1 = explode("-",$dt);
	$time1 = PHPExcel_Shared_Date::FormattedPHPToExcel($date1[0], $date1[1], $date1[2]);
	$excelReader->getActiveSheet()->getStyle($cel)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY);
	$excelReader->getActiveSheet()->SetCellValue($cel, $time1); 
}
?>

Microsoft excel affiche parfois des messages concernant l’intégrité ou la sécurité des fichiers produits. Préparer les modèles avec Libreoffice évite ce problème

quelques liens

exemples de code

SVG dessin vectoriel utilisable sur le web

https://inkscape.org/fr/

https://www.animatron.com  pour faire des animations directement en ligne, mixe son vidéos, objets vectoriels, export divers format dont le svg, ou pack HTML5

http://svgcircus.com/  création d’animations SGV en ligne le source est dispo

https://jakearchibald.com/2013/animated-line-drawing-svg/ animation de SGV en javascript, explications

http://tympanus.net/codrops/2014/12/15/elastic-svg-elements/   menu animés en SGV et javascript

 

Javascript pivot table TCD tableaux croisés dynamique

http://orbjs.net/

 

pivottable-js    examples  github

webpivottable  deux versions dont une payante environ 1500€  utilise Node.js sur le serveur

http://webix.com/  pivot + autres aplli js à tester  une version free d’autres payantes

pivot.js  pas un TCD, mais plutôt présentation des données avec regroupement

 

http://www.jbpivot.org/#  A voir aussi

 

http://gumption.org/2004/pivot_table/test_page.html   vieux truc simple efficace à fouiller

 

http://ukman.github.io/   simple à etudier

MySQL Numéroter les lignes d’une facture

                   A partir de cette table                           Obtenir ce résultat

NUM REF QTE PRIX    LN NUM REF QTE PRIX
F114895 BOITE12 5 5,00 €   1 F114895 BOITE12 5 5,00 €
F114895 VIS 4 6,00 €   2 F114895 VIS 4 6,00 €
F114895 COCA 1 7,00 €   3 F114895 COCA 1 7,00 €
F114896 BOIT16 1 8,00 €   1 F114896 BOIT16 1 8,00 €
F114896 PAPIER 10 9,00 €   2 F114896 PAPIER 10 9,00 €
F114896 BOITE20 22 10,00 €   3 F114896 BOITE20 22 10,00 €
F114896 BIC 1 11,00 €   4 F114896 BIC 1 11,00 €
F114897 FIC15 45 12,00 €   1 F114897 FIC15 45 12,00 €
F114897 COCA 1 13,00 €   2 F114897 COCA 1 13,00 €
F114897 PAIN 10 14,00 €   3 F114897 PAIN 10 14,00 €
F114897 FROMAGE 12 15,00 €   4 F114897 FROMAGE 12 15,00 €

La requête MySQL :

UPDATE CDE AS a
LEFT JOIN 
(
	SELECT NUM  FROM CDE
	GROUP BY NUM
) AS b ON b.NUM=a.NUM 

SET LN = @ordre := IF(a.NUM= @NUM_mem, @ordre+1, ( @NUM_mem:=b.NUM) OR @ordre:=1)
WHERE b ON b.NUM=a.NUM

Si vous avez plus simple je suis peneur

Diffuser une vidéo en direct 3G / 4G

Il faut

1) un compte Twitter  par exemple « monbeautwit« 

2) Installer sur un smartphone, l’appli periscope ANDROID    ou Iphone  en utilisant le compte twitter

3)  bouton rouge en bas -> le téléphone filme et tout passe en direct sur le net via  3G ou 4G

4) https://www.periscope.tv/monbeautwit depuis n’importe où dans le monde on peut voir vos vidéos y compris celle en direct

Les vidéos sont aussi twittées ->  si on « follow » monbeautwit  on peut afficher la vidéo en cliquant sur le tweet

exemple https://www.periscope.tv/Aka_skinnyy

Encore mieux depuis février 2016 avec une Gopro HERO4 et son appli Iphone permettent de diffuser les vidéos « live » depuis la caméra fixée à un casque, ou sur le rétro d’une bagnole… l’appli Android devrait suivre.

Pour supprimer une vidéo, uniquement depuis l’appli mobile

 

L’appli concurrente est meerkatapp   même fonctionnement, toujours avec twitter  @StreamReporter

younow  pas mal non plus

plussh  Le petit dernier français, à suivre

A surveiller, toutes ces applis devraient rapidement évoluer début 2016 

APACHE URL rewriting

Permet de faire par exemple :
http://mapage.php?client=418899&ref=f78957 –> http://facture/418899/carte

Le lien que vois PHP –> le lien qui circule sur le WEB et dans les pages

Utilisé à une époque pour améliorer le référencement, il reste encore utile dans bien des cas
L(URL normale plein de paramètre est remplacée par des choses plus parlante, ou au contraire masquée derrière des codes
Les lien dans la page web peuvent être normaux ou réécrit. Le lien qui arrive dans PHP (ou autre) est celui avec les ?client=418899&facture=f78957 … dans la mesure ou les règles de réécriture sont bien faites

Placer ces règles soit dans un .htaccess pour faire la mise au point ou sur un mutualisé, soit dans le fichier de conf d’Apache (mieux)

Options FollowSymLinks
RewriteEngine on
RewriteBase /

RewriteRule ^facture/([0-9]+)/([a-zA-Z]+)/(.*)$ mapage.php?client=$1&ref=$2&par=$3 [L]

Ecplication : toute URL commençant par http://facture/ des_chiffres / des_lettres / n_importe_quoi deviendra
mapage.php?client=des_chiffres&ref=des_lettres&par=n_importe_quoi

le motif est une expression régulière

plus de détails ICI