QR code, html et php. Une fois n’est pas coutume, je vais parler d’un autre langage que Python.

Tout est parti du problème qu’a rencontré l’application TousAntiCovid : le QR code généré n’avait pas le bon format de date (voir ici)… J’avais donc aujourd’hui envie de faire un article vite fait sur la manière de générer un QR code.

QR code, HTML et PHP : quel langage choisir ?

Il existe de nombreuses façons de générer un QR code: en Python, en PHP, en C, … mais je vais ici me pencher sur le PHP.

En fait, à l’aide d’une API, on peut même utiliser le simple HTML, mais pour connaître la date et l’heure précise de l’instant présent, PHP sera utile.

QR code, HTML et PHP : le script

<?php 
function qrcode() {
	if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') 
		$url = "https"; 
	  else
		$url = "http"; 

	  $url .= "://"; 
	  $url .= $_SERVER['HTTP_HOST']; 
	  $url .= $_SERVER['REQUEST_URI']; 

	if ( !isset($_GET['now']) ) {
		date_default_timezone_set('UTC'); // définir le fuseau horaire à utiliser par défaut
		$now = date('D-M-j-Y-G-i');
		return "<img id='barcode' src='https://api.qrserver.com/v1/create-qr-code/?data=" .$url . "?now=" . $now ."&amp;size=400x400' width='400' height='400' />";
	}
	else {
		return "Date : " . $_GET['now'];
	}
}
?>

Ce code est à insérer dans le corps du HTML.

La première partie identifie l’URL courante et la seconde génère un QR code redirigeant vers la page courante avec une variable (“now”) transmise avec la méthode GET.

Si la variable est présente alors le QR code ne s’affiche pas et la date s’affiche telle qu’elle a été transmise.

Le résultat

[qrcode size=200]

Une fois que la date est transmise, un petit formatage permet de l’afficher au format que l’on souhaite. Telle qu’elle a été ici transmise, on peut dans un premier temps la scinder en fonction des traits d’union:

$date = explode("-",$_GET['now']);
$jour = Array( "Mon" => "Lundi" , 
	"Tue" => "Mardi" , "Wed" => "Mercredi" ,
	"Thu" => "Jeudi", "Fri" => "Vendredi" ,
	"Sat" => "Samedi" ,  "Sun" => "Dimanche" );
$mois = Array( "Jan" => "Janvier" , "Feb" => "Février" ,
		"Mar" => "Mars" , "Apr" => "Avril" ,
		"May" => "Mai" , "Jun" => "Juin" ,
		"Jul" => "Juilet" , "Aug" => "Août" ,
		"Sep" => "Septembre" , 	"Oct" => "Octobre" ,
	        "Nov" => "Novembre" , "Dec" => "Décembre");
$now = $jour[$date[0]] . " " . $date[2] . " " . $mois[$date[1]] . " " . $date[3];
return "<p>Vous avez été redirigé·e·s avec la date : " . $now."</p>";

Il va de soit que le formatage est à notre convenance. J’ai pris ici la décision de convertir les abréviations en mots complets et en français. Mais il y avait plus simple pour cela. En effet, on peut utiliser setlocale(LC_TIME, "fr_FR");

Mais comme mentionné plus haut, j’écris cet article à la va-vite. Je n’ai pas pris le temps d’améliorer le script…


0 0 votes
Évaluation de l'article
S’abonner
Notification pour
guest
2 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
humbert

Bonsoir, première visite et je trouve le site clair sans pub envahissante à chaque paragraphe. Simple et efficace.

2
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x