PHP EN UTF-8

htmlentities retourne toute la chaine vide si au moins un accent en UTF-8
autres pb en UTF-8
solutions :

htmlentities($string, ENT_QUOTES, 'UTF-8');
htmlspecialchars($str, ENT_NOQUOTES, "UTF-8");

//MySQL
  $link = mysql_connect('localhost', 'user', 'password');
  mysql_set_charset('utf8', $link);  // anciennes versions
  mysql_query("SET NAMES 'utf8'");   // Plutôt utiliser cette solution

Fonctions chaines dans PHP ne comptent pas correctement la longueur
:
dans le php.ini mbstring.func_overload = 7
détails ici

Article complet ici

NODE.JS

Très bon article  pour débuter

installation Debian

apt-get install nodejs 

update-alternatives –install /usr/bin/node nodejs /usr/bin/nodejs 100   –> maintenant nodejs ET node   utilisables

curl https://www.npmjs.com/install.sh | sh --> installation de npm pour les bibliothèques

utilisation : node monscript.js

node -v et npm -v pour controler

Access internet Guadeloupe

http://www.speedtest.net

Comparatif de deux lignes même et unique PC, même heure, dans la journée, puis le soir.

A Numéricable « la fibre »  30 Mb  qui est en fait du câble coaxial

B Orange ADSL 20 Mb 

  ping Descendant Montant
Guadeloupe-Guadeloupe      
Numéricable / SFR  106 ms / 145
 2.92 mb / 1.17 le soir
 0.92 mb / 0.94
Orange  122 ms / 18 ms
 7.01 mb / 6.98 le soir
 0.80 mb / 0.84
Guadeloupe-USA      
Numéricable /SFR  111 ms / 112
 2.08 ms / 1.37 le soir
 0.91 mb / 0.90
Orange  101 ms / 110
 7,11 Mb / 6.58 le soir
 0.82 Mb / 0.86
 Guadeloupe-Europe      
Numéricable / SFR  124 Ms / 153
 2.36 Mb / 1.20 le soir
 0.92 Mb / 0.93
Orange  140 Ms / 133
 5.98 Mb / 6.82 le soir
 0.82 Mb / 0.73

A la ligne est vendue pour du 30 Mb en réalité c’est du 3 mb Le débit pour joindre des sites hors Guadeloupe reste à 3Mb, contrairement à Mediaserv qui ne dispose pas d’assez de bande passante pour servir tous ces clients. Le soir par contre c’est limite utilisable, ne comptez regarder un film en streaming. Ce qui est étonnant, c’est la stabilité du ping malgré la baisse de débit. Reste utilisable en SSH mais plusen RDP

B La ligne 20M n’en fait que 8, ce qui globalement est deux à trois fois mieux que Numéricable, l’accès au reste du monde est très correct. Cette ligne est régulièrement en panne, coupure, micro-coupure… comme souvent pour L’ADSL mal entretenu en climat tropical

J’ai fait d’autres mesures comme la gigue qui est plus critique que le débit en utilisation pro. Numéricable et Orange donnent des résultats similaires tout à fait acceptables.

Numéricable ne livre pas ce qui est vendu (débit / 10, cuivre au lieu de fibre) mais le résultat reste tout à fait convainquant pour une utilisation en entreprise. Voire un poil mieux pour le ping et la gigue. Le câble coaxial utilisé (rien à voir avec la fibre optique annoncée) est moins sensible à l’humidité. Comme le réseau est plus récent, la maintenance est plus simple.

L’infrastructure Orange est nettement un cran au dessus. Malheureusement « le dernier kilomètre » est en très mauvais état. Avoir un internet performant ne sert à rien s’il est coupé régulièrement.  Pour ceux dont la ligne téléphonique cuivre est en bon état, Orange est la meilleure solution. Mais le réseau vieillissant et les interventions bâclées n’arrangent rien. Une petite réorganisation du service technique Orange pourrait changer la donne.

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

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

WORPRESS ajout recherche Google

Google mets à disposition des recherche personnalisées. Il est possible de faire une recherche sur son site WordPress, et d’afficher les résultat dans une page comme si le moteur Google était intégré à WordPress.
Le moteur Google permet de savoir ce que les internautes peuvent trouver lors d’une recherche Google, ce qui est souvent différent de ce que vous voulez. Par contre il n’est à jour que quelques temps après la publication des articles… Pour ce qui est des modifications sur les articles, il faut parfois attendre très longtemps.
Le moteur interne de WordPress retourne le vrai contenu, à jour… mais ne corrige rien, on peut donc passer à coté du bon article pour une faute de frappe ou d’orthographe.

1 récupérer le code fourni par Google contenant les ID, A le code du formulaire de recherche, et B celui pour le résultat.
2 Créer une page, par exemple RECHERCHE, en mode texte coller le code Google B et copier le permalien
3 thème, éditeur -> searchform.php, remplacer le code d’origine par celui de Google A
Il est possible d’ajouter le code Google pour avoir simultanément les deux moteurs.

4 remplacer le form action par le permalien de RECHERCHE.
C’est tout

Il est ensuite possible de « bricoler le formulaire de recherche avec style=…. pour l’adapter au thème