Voir aussi l'excellent tutoriel
http://tecfa.unige.ch/staf/staf-i/gorga/staf2x/classPHP/introPOO.php
http://www.apprendre-php.com/tutoriels/tutoriel-14-les-sessions.html
http://www.tizag.com/phpT/phpsessions.php
http://www.phpcs.com/tutoriaux/SESSIONS-PHP-COMMENT-MARCHE_600.aspx
http://www.phpfrance.com/tutoriaux/index.php/2005/07/20/34-les-sessions-php
<?php foreach($_SESSION as $key => $value) echo $key." = ".$value."<br />"; //ou en utilisant ce code print("<pre>"); print_r($_SESSION); print("</pre>"); ?>
il faut une db mysql et des scripts php
CREATE TABLE `users_session` ( `sid` varchar(255) NOT NULL, `userid` varchar(255) NOT NULL, `last_modified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `ip` varchar(15) NOT NULL, PRIMARY KEY (`sid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE `users` ( `user_name` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `role` varchar(255) NOT NULL, PRIMARY KEY (`user_name`), UNIQUE KEY `user_name` (`user_name`), KEY `password` (`password`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1
<?
include_once("./common/header.php");
include_once("./common/dbConnection.php");
...
?>
<?php
#here we set the path relative to server name
$serveur= $_SERVER["HTTP_HOST"];
$role=$_SESSION['role'];
#echo $serveur;
if($serveur=="localhost") { //serveur de développement
$CHEMIN="/websites//";
$REPERTOIRE="/";
} elseif ($serveur==""){ //serveur de prod
$CHEMIN="/";
$REPERTOIRE="/";
} elseif ($serveur==""){ //serveur de backups
$CHEMIN="//";
$REPERTOIRE="/";
}
require_once($REPERTOIRE."common/sessions.inc.php");
#special stuff to give different mySQL login for different authentification
#admin: all rights
if($role=="Administrateur") {
if($serveur=="localhost") {
$dbUsername = "";
$dbPassword = "";
$dbName="";
} elseif ($serveur==""){ //serveur de prod
$dbUsername = "";
$dbPassword = "";
$dbName="";
} elseif ($serveur==""){ //serveur de backups
$dbName = "";
$dbUsername = "";
$dbPassword = "";
}
#surfer: SELECT only
} elseif ($role=="Surfeur"){
if ($serveur==""){ //serveur de backups
$dbUsername = "";
$dbPassword = "";
$dbName = "";
} else { //serveur de développement && //serveur de prod
$dbUsername = "";
$dbPassword = "";
$dbName="";
}
} else {
#on renvoie la personne non authentifiée au login et on exclut la suite
echo "Problème d'identification! Vous n'êtes pas autorisé-e à utiliser le système";
exit;
}
$dbHostname = "localhost";
#echo $dbName;
// Make connection to database
// If no connection made, display error Message
$dblink = MYSQL_CONNECT($dbHostname, $dbUsername, $dbPassword) OR DIE("Error dBc1 !! Unable to connect to database");
// Select the database name to be used or else print error message if unsuccessful*/
@mysql_select_db($dbName) or die( "Unable to select database ".$dbName);
?>
<?php
error_reporting(0);
#initialisation temps pour calcul chargement page, fin sur footer.php
$time_start = microtime(true);
/*
Software for the administration of teachers formation
Fred Radeff, www.akademia.ch mercredi 23 mai 2007, 15:24:32 (UTC+0200)
License: GNU General Public License (GPL)
SPECIAL THANKS To http://sourceforge.net/projects/phpcodegenie/
*/
#GENERAL SETTING FOR THE WHOLE SITE
$APPLICATION_NAME="nom du site";
#here we set the path relative to server name
$serveur= $_SERVER["HTTP_HOST"];
#echo $serveur;
if($serveur=="localhost") { //serveur de développement
$CHEMIN="/websites/"; // chemin sur le serveur
$REPERTOIRE="/home/radeff/"; //chemin local
} elseif ($serveur=="test.ch"){ //serveur de prod
$CHEMIN="";
$REPERTOIRE="";
} elseif ($serveur=="www.other.ch"){ //serveur de backups
$CHEMIN="";
$REPERTOIRE="";
}
require_once($REPERTOIRE."common/sessions.inc.php");
include("tools.inc.php");
?>
<HTML>
<HEAD>
<TITLE><?
if ($serveur==""){ // message d'avertissement serveur de secours
echo "*** ATTENTION: SERVEUR DE SECOURS! ***";
}
#echo $APPLICATION_NAME;
if(isset($page_name)&&$page_name!="") {
echo $page_name;
}
?></TITLE>
<link rel="stylesheet" href="<? echo $CHEMIN ?>common/style.css" type="text/css">
<script language="javascript" src="<? echo $CHEMIN ?>common/javascripttools.js"></script>
<LINK REL="SHORTCUT ICON" href="<? echo $CHEMIN ?>favicon.ico">
</HEAD>
<!-- Here is the main title of the site-->
<BODY>
<?
#cas particulier du serveur de secours
if ($serveur=="www.productionserver.ch"){ // affichage serveur de secours et interdiction opérations SQL INSERT UPDATE DELETE
echo "<h1 style=\"text-decoration: blink\">*** ATTENTION: SERVEUR DE SECOURS! ***</h1>";
if(ereg("/edit",$PHP_SELF)||ereg("/confirmDelete",$PHP_SELF)||ereg("/delete",$PHP_SELF)||ereg("/enterNew",$PHP_SELF)||ereg("/update",$PHP_SELF)||ereg("/insert",$PHP_SELF)) {
echo "Sur le serveur de secours vous n'avez pas accès à cette page";
exit; // on sort
};
}
?>
<NOSCRIPT><h1>Merci d'activer JavaScript! Le systêeme ne marche pas sans!!!</h1></NOSCRIPT>
<A href="<? echo $CHEMIN ?>"><IMG src="<? echo $CHEMIN ?>common/logo.jpg" alt="logo + homepage" title="logo + homepage" width="100" height="100" align="left" border="0"></A>
<div id="main-title"><?
echo $APPLICATION_NAME;
if(isset($page_name)&&$page_name!="") {
echo " - " .$page_name;
}
echo " <div class=\"petitGros\">user: " .$PHP_AUTH_USER ." / role: " .$_SESSION['role']
." | <a href=\"" .$CHEMIN ."logout.php\" style=\"font-size: x-small\">Logout</a></div>";
?></div>
<div id="main-text">
<?php
session_start( );
$PHP_AUTH_USER=$_SERVER['PHP_AUTH_USER'];
$PHP_AUTH_PW=$_SERVER['PHP_AUTH_PW'];
function showerror( )
{
die("Error " . mysql_errno( ) . ": " . mysql_error( ));
}
function authenticateUser($username,
$password) {
$serveur= $_SERVER["HTTP_HOST"];
if($serveur=="localhost") { //serveur de développement
$dbUsername = "";
$dbPassword = "";
$dbHostname = "localhost";
$dbName = "";
} elseif ($serveur=="truc.ch"){ //serveur de prod
$dbUsername = "";
$dbPassword = "";
$dbHostname = "";
$dbName = "";
} elseif ($serveur==""){ //serveur de backups
$dbUsername = "";
$dbPassword = "";
$dbHostname = "localhost";
$dbName = "";
}
$dblink = MYSQL_CONNECT($dbHostname, $dbUsername, $dbPassword) OR DIE("Error dbc1 !! Unable to connect to database");
@mysql_select_db($dbName) or die( "Unable to select database ".$dbName);
// Test the username and password parameters
if (!isset($username) || !isset($password))
return false;
// Get the two character salt from the
// username collected from the challenge
$salt = substr($username, 0, 2);
// Encrypt the password collected from
// the challenge
// Formulate the SQL find the user
$query = "SELECT * FROM users
WHERE user_name = '$username'
AND password = md5('$password')";
#echo $query;
// Execute the query
$result = mysql_query($query);
// exactly one row? then we have found the user
if (mysql_num_rows($result) != 1)
return false;
else
return true;
}
if (!authenticateUser($PHP_AUTH_USER,
$PHP_AUTH_PW)||!isset($PHP_AUTH_USER,
$PHP_AUTH_PW))
{
// No credentials found - send an unauthorized
// challenge response ...
header("WWW-Authenticate: Basic realm='Restricted Area'");
header("HTTP/1.0 401 Unauthorized");
print("<H1>Authorization Required</H1>This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.<hr>");
exit;
// ...
exit;
} else {
// The HTML response to authorized users ...
if($printable!="oui"){
include_once("../common/header.php");
}
$query = "SELECT * FROM users
WHERE user_name = '$PHP_AUTH_USER'";
$result = mysql_query($query);
$sid=session_id();
$now= date("Y-m-d H:m:s");
$chercheSession="SELECT * FROM `users_session` WHERE `sid`='$sid'";
$chercheSession=mysql_query($chercheSession);
$chercheSession=mysql_num_rows($chercheSession);
#echo $chercheSession;
if($chercheSession<1) {
$insert="INSERT INTO `users_session` ( `sid` , `userid` , `last_modified` , `ip` )
VALUES (
'$sid', '$PHP_AUTH_USER', '$now' , '$remote_addr'
)";
$insertSQL=mysql_query($insert);
}
$role=mysql_result($result,0,'role');
// Register the variable named "role"
session_register("role");
$foo = $role;
}
?>
<?php
/*Various tools for this website
*
*
* Avertissement: Cette librairie de fonctions PHP est distribuee avec l'espoir
* qu'elle sera utile, mais elle l'est SANS AUCUNE GARANTIE; sans meme la garantie de
* COMMERCIALISATION ou d'UTILITE POUR UN BUT QUELCONQUE.
* Elle est librement redistribuable tant que la presente licence, ainsi que les credits des
* auteurs respectifs de chaque fonctions sont laisses ensembles.
* En aucun cas, Nexen.net ne pourra etre tenu responsable de quelques consequences que ce soit
* de l'utilisation ou la mesutilisation de ces fonctions PHP.
*/
#initalise la date du jour au format MySQL
$aujourdhui=date("Y-m-d");
/****
* Titre: Date format MySQL en date Francaise
* Auteur: FreeCreator
* Email: freecreator59@hotmail.com
* Url:
* Description: Cette fonction permet de convertir une date au format MySQL en date Francaise.
Elle retourne la date en francais avec heures et minutes
****/
function datefr($date_sql){
// Declaration du tableau des noms de jours en Francais
//-------- ici
$j_fr[Sunday] = "Dimanche";
$j_fr[Monday] = "Lundi";
$j_fr[Tuesday] = "Mardi";
$j_fr[Wednesday] = "Mercredi";
$j_fr[Thursday] = "Jeudi";
$j_fr[Friday] = "Vendredi";
$j_fr[Saturday] = "Samedi";
// Declaration du tableau des noms de jours en Francais
$m_fr[1] = "Janvier";
$m_fr[2] = "Fevrier";
$m_fr[3] = "Mars";
$m_fr[4] = "Avril";
$m_fr[5] = "Mai";
$m_fr[6] = "Juin";
$m_fr[7] = "Juillet";
$m_fr[8] = "Aout";
$m_fr[9] = "Septembre";
$m_fr[10] = "Octobre";
$m_fr[11] = "Novembre";
$m_fr[12] = "Decembre";
$la_date = explode(' ', $date_sql); // on decompose la date SQL
$heure_sql= explode(':',$la_date[1]); // On prend la partie heure
$date_sql = explode('-',$la_date[0]); // On prend la partie date
if (substr($date_sql[1],0,1) == '0' ) // On verifie si le 1er caractere est 0 dans le numero du mois
{
// si oui alors on supprime le 1er caractere
$date_sql[1] = substr($date_sql[1],1,strlen($date_sql[1]) -1);
}
$heure = $heure_sql[0]; // La variable de l'heure
$minutes = $heure_sql[1]; // La variable des minutes
$secondes = $heure_sql[2]; // la variable des secondes
$annee = $date_sql[0]; // La variable des annees
$num_mois = $date_sql[1]; // La variable du numero du mois
$nom_mois = $m_fr[$num_mois]; // La variable du mois en francais
$num_jour = $date_sql[2]; // Le numero du jour
$nom_jour = $j_fr[date("l", mktime(0,0,0,$num_mois,$num_jour,$annee))]; // Le nom du jour en francais
# $date = "Le $nom_jour $num_jour $nom_mois $annee"; // On forme la date
$date = "$nom_jour $num_jour $nom_mois $annee"; // On forme la date
$heure = "$heure:$minutes:$secondes"; // On forme l'heure
#$date_fr= $date.' à '.$heure;
$date_fr= $date;
//retour de cette variable
return $date_fr;
}
/* ######### AJOUTS fradeff www.akademia.ch lundi 11 juin 2007, 21:09:59 (UTC+0200) ###### */
#renvoyer la date complète mais pas les heures et minutes
function datefr_short($date_sql){
// Declaration du tableau des noms de jours en Francais
//-------- ici
$j_fr[Sunday] = "Dimanche";
$j_fr[Monday] = "Lundi";
$j_fr[Tuesday] = "Mardi";
$j_fr[Wednesday] = "Mercredi";
$j_fr[Thursday] = "Jeudi";
$j_fr[Friday] = "Vendredi";
$j_fr[Saturday] = "Samedi";
// Declaration du tableau des noms de jours en Francais
$m_fr[1] = "Janvier";
$m_fr[2] = "Fevrier";
$m_fr[3] = "Mars";
$m_fr[4] = "Avril";
$m_fr[5] = "Mai";
$m_fr[6] = "Juin";
$m_fr[7] = "Juillet";
$m_fr[8] = "Aout";
$m_fr[9] = "Septembre";
$m_fr[10] = "Octobre";
$m_fr[11] = "Novembre";
$m_fr[12] = "Decembre";
$la_date = explode(' ', $date_sql); // on decompose la date SQL
$heure_sql= explode(':',$la_date[1]); // On prend la partie heure
$date_sql = explode('-',$la_date[0]); // On prend la partie date
if (substr($date_sql[1],0,1) == '0' ) // On verifie si le 1er caractere est 0 dans le numero du mois
{
// si oui alors on supprime le 1er caractere
$date_sql[1] = substr($date_sql[1],1,strlen($date_sql[1]) -1);
}
$heure = $heure_sql[0]; // La variable de l'heure
$minutes = $heure_sql[1]; // La variable des minutes
$secondes = $heure_sql[2]; // la variable des secondes
$annee = $date_sql[0]; // La variable des annees
$num_mois = $date_sql[1]; // La variable du numero du mois
$nom_mois = $m_fr[$num_mois]; // La variable du mois en francais
$num_jour = $date_sql[2]; // Le numero du jour
$nom_jour = $j_fr[date("l", mktime(0,0,0,$num_mois,$num_jour,$annee))]; // Le nom du jour en francais
# $date = "Le $nom_jour $num_jour $nom_mois $annee"; // On forme la date
$date = "$nom_jour $num_jour $nom_mois $annee"; // On forme la date
$date_fr= $date;
//retour de cette variable
return $date_fr;
}
#renvoyer le nom du jour
function jourfr_short($date_sql){
// Declaration du tableau des noms de jours en Francais
//-------- ici
$j_fr[Sunday] = "Dimanche";
$j_fr[Monday] = "Lundi";
$j_fr[Tuesday] = "Mardi";
$j_fr[Wednesday] = "Mercredi";
$j_fr[Thursday] = "Jeudi";
$j_fr[Friday] = "Vendredi";
$j_fr[Saturday] = "Samedi";
#$la_date = explode(' ', $date_sql); // on decompose la date SQL
$date_sql = explode('-',$date_sql); // On prend la partie date
$annee = $date_sql[0]; // La variable des annees
$num_mois = $date_sql[1]; // La variable du numero du mois
$num_jour = $date_sql[2]; // Le numero du jour
$nom_jour = $j_fr[date("l", mktime(0,0,0,$num_mois,$num_jour,$annee))]; // Le nom du jour en francais
//retour de cette variable
return $nom_jour;
}
#renvoyer l'heure seulement
function datefr_hour($date_sql){
$la_date = explode(' ', $date_sql); // on decompose la date SQL
$heure_sql= explode(':',$la_date[1]); // On prend la partie heure
$heure = $heure_sql[0]; // La variable de l'heure
$minutes = $heure_sql[1]; // La variable des minutes
$heure = "$heure:$minutes"; // On forme l'heure<
//retour de cette variable
return $heure;
}
#convertir date française DD-MM-YYYY au format MySQL YYYY-MM-DD
function datefr2mySQL($date) {
$split = explode(".",$date);
$annee = $split[2];
$mois = $split[1];
$jour = $split[0];
return "$annee"."-"."$mois"."-"."$jour";
}
#convertir date MySQL YYYY-MM-DD au format français DD-MM-YYYY
function datemySQL2fr($date) {
$split = explode("-",$date);
$annee = $split[0];
$mois = $split[1];
$jour = $split[2];
return "$jour"."-"."$mois"."-"."$annee";
}
function date_mysql_to_timestamp($date) {
#if (!preg_match('/(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/',$date,$r)){
#return false;
#}
$ladate=explode("-",$date);
return mktime(0, 0,0,$ladate[2],$ladate[3],$ladate[1] );
}
function verifieDate($date) {
#2007-06-22
#checkdate(m-d-y);
#note: for a strange reason you need firstly to reconstruct the format of date var
$ladate1=explode("-",$date);
$month=ereg_replace("^0","",$ladate1[1]);
$day=ereg_replace("^0","",$ladate1[2]);
$year=$ladate1[0];
return checkdate($month, $day, $year);
}
function testSql($sql) {
echo "<pre>" .$sql ."</pre>";
echo "Results items: " .mysql_num_rows(mysql_query($sql));
exit;
}
/* VARIOUS SQL QUERIES
*/
function animateur($id) {
$sqlQuery = "SELECT * FROM animateurs WHERE id_animateur = '$id'";
$result = MYSQL_QUERY($sqlQuery);
$numberOfRows = MYSQL_NUM_ROWS($result);
return $sql;
#return ($sql,$numberOfRows);
}
function probleme() {
echo "<br><input type=\"button\" name=\"cancel\" value=\"Retour\" onClick=\"javascript:history.back();\">";
exit;
}
/* VARIOUS MySQL Standard queries */
function afficheEnseignant($result,$i) { // affiche lien sur vue détaillée enseignant
$thisEnseignantID = MYSQL_RESULT($result,$i,"enseignantID");
$thisEnseignantNom = MYSQL_RESULT($result,$i,"enseignants.NOM");
$thisEnseignantPrenom = ucfirst(strtolower(MYSQL_RESULT($result,$i,"enseignants.PRENOM")));
echo "<a href=../enseignants/viewEnseignants.php?id_enseignantField=" .$thisEnseignantID .">";
echo $thisEnseignantPrenom ." " .$thisEnseignantNom ."</a>\n";
}
function afficheCours($result,$i) { // affiche lien sur vue détaillée du cours
$thisId_crs = MYSQL_RESULT($result,$i,"id_crs");
$thisId_lib=MYSQL_RESULT($result,$i,"cours.TITRE_DU_COURS");
$thisCODES_DE_COURS=MYSQL_RESULT($result,$i,"cours.CODES_DE_COURS");
$thisDateD = datemySQL2fr(MYSQL_RESULT($result,$i,"dateD"));
echo "<a href=../cours/viewCours.php?id_cours_date_Field=";
echo $thisId_crs;
echo ">";
echo $thisCODES_DE_COURS;
echo " - " .$thisId_lib;
echo "</a>";
#echo "(" .$thisDateD .")";
}
function prenom($prenom) { // formatage du prénom
/*echo ucfirst(strtolower($prenom));*/
return strtoupper($prenom);
}
function genre($thisGENRE) { // fonction pour afficher le genre
echo "
<SELECT name=\"thisGENREField\">
<option";
if($thisGENRE=="MONSIEUR") { echo " selected";}
echo ">MONSIEUR</option>
<option";
if($thisGENRE=="MADAME") { echo " selected";}
echo ">MADAME</option>
</SELECT>";
}
function statutEnseignant($thisSTATUT) { // statut
echo "
<SELECT name=\"thisSTATUTField\">
<option";
if($thisSTATUT=="TIT") { echo " selected";}
echo ">TIT</option><option";
if($thisSTATUT=="LME") { echo " selected";}
echo ">LME</option><option";
if($thisSTATUT=="SUPPL ") { echo " selected";}
echo ">SUPPL </option><option";
if($thisSTATUT=="GNT") { echo " selected";}
echo ">GNT</option><option";
if($thisSTATUT=="GNT/STACC") { echo " selected";}
echo ">GNT/STACC</option><option";
if($thisSTATUT=="STACC") { echo " selected";}
echo ">STACC</option><option";
if($thisSTATUT=="HEP") { echo " selected";}
echo ">HEP</option><option";
if($thisSTATUT=="STACC/GNT") { echo " selected";}
echo ">STACC/GNT</option><option";
if($thisSTATUT=="?") { echo " selected";}
echo ">?</option>
</SELECT>
";
}
function formationEnseignant($thisFORMATION) { // formation
echo "
<SELECT name=\"thisFORMATIONField\">
<option";
if($thisFORMATION=="") { echo " selected";}
echo "></option>
<option";
if($thisFORMATION=="LME") { echo " selected";}
echo ">LME</option>
</SELECT>
";
}
function ecole($thisId_ecole) { // affiche liste déroulante des écoles
#$thisId_ecole = MYSQL_RESULT($resultEcole,0,"id_ecole");
echo "
<SELECT name=\"Ecole\" size=\"10\">
<option value=\"\"> ---</option>";
$sqlEcoles = "SELECT * FROM ecoles ORDER BY nom";
$resultEcoles = MYSQL_QUERY($sqlEcoles);
$numberOfRows = MYSQL_NUM_ROWS($resultEcoles);
#$thisId_ecole = MYSQL_RESULT($resultEcoles,$i,"id_ecole");
$thisNom = MYSQL_RESULT($resultEcoles,$i,"nom");
while ($ecoles=mysql_fetch_object($resultEcoles)) {
echo "<option value=" .$ecoles->id_ecole;
if($ecoles->id_ecole==$thisId_ecole) {echo " selected"; }
echo ">" .$ecoles->nom .' (' .$ecoles->id_ecole .')</option>';
}
echo "</SELECT>";
}
#Description :
#Génère un mot de passe prononçable, pour faciliter sa mémorisation, mais malgré tout très compliqué.
#Par exemple :
#ZbleUrg (prononçable, mais difficile).
#Auteur : Damien Seguy
#Url : http://www.nexen.net
function passe_mnemo(){
if (func_num_args() == 1){ $nb = func_get_arg(0);} else { $nb = 8;}
// on utilise certains chiffres : 1 = i, 5 = S, 6=b, 3=E, 9=G, 0=O
$lettre = array();
$lettre[0] = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'o', 'n', 'p', 'q', 'r',
's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '9',
'0', '6', '5', '1', '3');
/*, 'A',
'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'D',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
lettre 1
, 'A', 'E',
'I', 'O', 'U', 'Y'
lettre -1
, 'B', 'C', 'D', 'F',
'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P',
'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Z',
*/
$lettre[1] = array('a', 'e', 'i', 'o', 'u', 'y' , '1', '3', '0' );
$lettre[-1] = array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k',
'l', 'm', 'n', 'p', 'q', 'r', 's', 't',
'v', 'w', 'x', 'z',
'5', '6', '9');
$retour = "";
$prec = 1;
$precprec = -1;
srand((double)microtime()*20001107);
while(strlen($retour) < $nb){
// pour genere la suite de lettre, on dit : si les deux lettres sonts
// des consonnes (resp. des voyelles) on affiche des voyelles (resp, des consonnes).
// si les lettres sont de type differents, on affiche une lettre de l'alphabet
$type = ($precprec + $prec)/2;
$r = $lettre[$type][array_rand($lettre[$type], 1)];
$retour .= $r;
$precprec = $prec;
$prec = in_array($r, $lettre[-1]) - in_array($r, $lettre[1]);
}
return $retour;
}
?>
---