Romain Tiennot

Technicien Superieur en Informatique

Aller au contenu | Aller au menu | Aller à la recherche

Keyword - PHP

Fil des billets

Création signature en PHP

Cet article montre comment créer une signature en PHP. Cela peut être très utile si vous voulez numéraux les accords pour des devis ou la remise d'objet par exemple. Je n'ai aucune idée ci cela a une valeur niveau juridique, mais c'est très pratique puis on fait des économies de papier :)

Je me suis basé sur le code de Thomas J Bradley pour créer ce mini formulaire.

Le code se découpe en deux parties :

  • Le formulaire avec le nom de la personne et la signature
  • Le résultat de la validation de la signature

Il utilise du Jquery pour effectuer la signature. L'avantage de passer par du Jquery et non du Java, c'est que l'on peut utiliser cette solution sur les tablettes ou smartphone tactile.

Voici le code du formulaire :

<!DOCTYPE html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <title>Signature pour Laurent Vernoux</title>
  <style type="text/css">
    body { font: normal 100.01%/1.375 "Helvetica Neue",Helvetica,Arial,sans-serif; }
  </style>
  <link rel="stylesheet" href="style/style.css">
  <!--[if lt IE 9]><script src="/style/flashcanvas.js"></script><![endif]-->
  <script src="style/jquery.min.js"></script>
</head>
<body>
  <form method="post" action="result.php" class="sigPad">
    <label for="name">Veuillez saisir votre nom :</label>
    <input type="text" name="name" id="name" class="name">
    <p class="drawItDesc">Veuillez signer :</p>
    <ul class="sigNav">
      <li class="drawIt"><a href="#draw-it" >Signature</a></li>
      <li class="clearButton"><a href="#clear">Effacer</a></li>
    </ul>
    <div class="sig sigWrapper">
      <div class="typed"></div>
      <canvas class="pad" width="198" height="55"></canvas>
      <input type="hidden" name="output" class="output">
    </div>
    <button type="submit">J'accepte les conditions generale.</button>
  </form>
 
  <script src="style/jquery.signaturepad.min.js"></script>
  <script>
    $(document).ready(function() {
      $('.sigPad').signaturePad({drawOnly:true});
    });
  </script>
  <script src="style/json2.min.js"></script>
</body>



Voici le code du résultat du formulaire :

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Signature pour Laurent Vernoux</title>
  <style type="text/css">
    body { font: normal 100.01%/1.375 "Helvetica Neue",Helvetica,Arial,sans-serif; }
    p { margin: 0.515em 0 0; padding: 0 6px; }
  </style>
  <script src="style/jquery.min.js"></script>
</head>
<body>
	<?php
		$output=$_POST['output'];
		$name=$_POST['name'];
		$output = str_replace("\\", "", $output);
	?>
 
  <div class="sigPad signed">
    <div class="sigWrapper">
      <canvas class="pad" width="198" height="55"></canvas>
    </div>
		<p>
			<?
			echo $name;
			?>
		</p>
	</div>
  <script type="text/javascript" src="style/jquery.signaturepad.min.js"></script>
  <script type="text/javascript">
  		var sig =  '<?php echo $output; ?>' ; 
    $(document).ready(function() {
      $('.sigPad').signaturePad({displayOnly:true}).regenerate(sig);
    });
  </script>
</body>

Vous pouvez voir la démo sur cette page : http://tiennot.fr/signature.
À bientôt Romain

Authentification LDAP pour PHP (Linux - Debian)

php_ldap.jpg Cette article va montrer comment activer et utiliser l'authentification LDAP pour un intranet par exemple.

Dans un premier temps, nous avons besoin :

  • Un domaine Windows avec une Active Directory
  • D'une machine Linux intégré au domaine
  • Un serveur LAMP (Linux Apache MySQL PHP) ou au minimum Apache et PHP.


Une fois votre linux intégré dans le domaine (Voir Article précedent) et votre serveur LAMP installé, vous devez télécharger et activer le module LDAP.

Télécharger et installer le module LDAP :

apt-get install php5-ldap

Activer le module :

a2enmod ldap

Puis relancer le serveur :

/etc/init.d/apache2 restart



Félicitation, vous pouvez utiliser l'authentification LDAP via PHP. Il ne vous reste plus qu'a coder quelque ligne en PHP. Vu que je suis gentil, voici un petit exemple d'authentification.

Dans mon cas, nous avons 5 services :

  • Administration
  • Direction
  • Production 1
  • Production 2
  • Technique


Chaque service à une OU (Unité d'organisation) à son nom et deux sous OU nommé "Ordinateur" et "Utilisateur". Seul les utilisateurs présent dans les OU's "Utilisateur" pourront se connecter via le LDAP et les autres se veront rejeté. Les utilisateurs présent dans l'OU "Technique","Utilisateur" auront des droits supplémentaire.

Pour cela, nous devons avoir deux Pages :

  • Une page d'authentification (index.php)
  • Une page qui se connecte au LDAP avec les identifiants (autorise.php)


La page "autorise.php" va récupérer les identifiants saisie (par exemple : "romain.tiennot"). Pour la connexion LDAP, on doit utiliser le "Nom" et non "identifiant de connexion" donc j'ai fait un "str_replace" pour remplacer le "." par " ". Avec les identifiants, il va essayer de vérifier si l'utilisateur est bien présent dans les OU et si son mot de passe est correcte.

Voici la page index.php :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	<head>
		<title>Intranet</title>
		<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
		<meta http-equiv="content-language" content="fr" />
	</head>
	<body>
		<FORM METHOD="POST" ACTION="autorise.php">
			<TABLE WIDTH="100%">
				<TR ALIGN="CENTER">
					<TD>Login</TD>
					<TD><input type="texte" value="" name="login"/></TD>
				</TR>
				<TR ALIGN="CENTER">
					<TD>Mot de passe</TD>
					<TD><input type="password" value="" name="password"/></TD>
				</TR>
				<TR ALIGN="CENTER">
					<TD></TD>
					<TD><BR/><input type="submit" name="connection" value="Connection"</TD>
				</TR>
			</TABLE>
		</FORM>
	</body>
</html>

Voici la page autorise.php :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<title>Intranet</title>
	<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
	<meta http-equiv="content-language" content="fr" />
</head>
<body>
	<?php
		// on récupère le login et le pass
		$user=$_POST['login'];
		$passwd=$_POST['password'];
		// Je remplace le "." (point) par " " (espace) car pour la verification LDAP il n'utilise pas les identifiants de connexion mais le "nom de connexion"
		$user = str_replace('.',' ',$user);
		// le nom de domaine facon : DC=DOMAIN,DC=LAN
		$ldap_base = 'dc=drinkevol,dc=lan';
		// le nom de domaine facon : DOMAIN.LAN
		$ldap_server = 'drinkevol.lan';
		// Le chemin de l'OU des utilsateurs de la direction avec la variable "$ldap_base" créé plus haut
		$ldap_direction = ",ou=Utilisateurs,ou=Service Direction,".$ldap_base;
		// Le chemin de l'OU des utilsateurs de la production1 avec la variable "$ldap_base" créé plus haut
		$ldap_production1 = ",ou=Utilisateurs,ou=Production 1,ou=Service Production,".$ldap_base;
		// Le chemin de l'OU des utilsateurs de la production2 avec la variable "$ldap_base" créé plus haut
		$ldap_production2 = ",ou=Utilisateurs,ou=Production 2,ou=Service Production,".$ldap_base;
		// Le chemin de l'OU des utilsateurs de l'informatique avec la variable "$ldap_base" créé plus haut
		$ldap_informatique = ",ou=Utilisateurs,ou=Service Informatique,".$ldap_base;
		// Le chemin de l'OU des utilsateurs de l'administration avec la variable "$ldap_base" créé plus haut
		$ldap_administratif = ",ou=Utilisateurs,ou=Service Administratif,".$ldap_base;
		// le port pour la connexion LDAP (par defaut 389)
		$ldap_port = '389';
 
		// Création de la variable "$connexion_serveur" ou l'on indique les informations pour questionner la base
		$connexion_serveur = @ldap_connect($ldap_server, $ldap_port);
		// Si la connexion au LDAP fonctionne avec les identifiants saisie et que l'utilisateur se trouve dans l'OU "Utilisateur","Technique" alors on l'authorise avec les droits administrateurs
		if ($connexion_user=@ldap_bind($connexion_serveur, 'cn='.$user.$ldap_informatique, $passwd))
		{
			?>
				<div class='news'>
					<H1>Bienvenue, <? echo ucwords($user)."."; ?><BR> Vous êtes administrateur</H1>
				</div>
			<?php
			$_SESSION['admin']=1;
		}
 
		// Sinon SI la connexion LDAP fonctionne avec les identifiants saisie et que l'utilisateur se trouve dans l'OU "Utilisateur", "Direction" ou "Utilisateur","Production2" etc... Alors on l'autorise avec les droits "Utilisateur"
		elseif (((($connexion_user=@ldap_bind($connexion_serveur, 'cn='.$user.$ldap_production1, $passwd)) or ($connexion_user=@ldap_bind($connexion_serveur, 'cn='.$user.$ldap_production2, $passwd))) or ($connexion_user=@ldap_bind($connexion_serveur, 'cn='.$user.$ldap_direction, $passwd))) or ($connexion_user=@ldap_bind($connexion_serveur, 'cn='.$user.$ldap_administratif, $passwd)))
		{
			?>
				<div class='news'>
					<H1>Bienvenue, <? echo ucwords($user)."."; ?>
				</div>
			<?php
			$_SESSION['admin']=2;
		}
 
		// Sinon, les identifiants sont peut etre mal saisie ou que l'utilisateur n'existe pas ou qu'il n'est pas dans la bonne OU. L'utilisateur se voit rejeter la connexion.
		else 			
		{	
			?>
				<div class='news'>
					<H1><? echo ucwords($user); ?>, vous n'etes pas authorisé</H1>
					<BR/><BR/><form><input type='button' value='Retour' onclick="self.location.href='index.php'"></form>
				</div>
			<?php
			$_SESSION['admin']=0;
		}
	?>		
</body>
</html>

Voici une petite démonstration :

A bientôt