INFO, ALERT, ERROR
function log_write($log, $level=INFO)
{
	global $table_prefix, $webmaster, $db;
	// actual connected user or user 'script'
	$user = (!empty( $_SERVER["PHP_AUTH_USER"])?$_SERVER["PHP_AUTH_USER"]:'Intruder?!');
	//mail message
	$log_mail = str_replace ( "
", "\n", $log ) . "\n";
	$log_mail .= ( !empty( $_SERVER["REQUEST_METHOD"])?'$_SERVER["REQUEST_METHOD"]' . $_SERVER["REQUEST_METHOD"] . "\n":'' );
	$log_mail .= ( !empty( $_SERVER["QUERY_STRING"])?'$_SERVER["QUERY_STRING"]' . $_SERVER["QUERY_STRING"] . "\n":'' );
	$log_mail .= ( !empty( $_SERVER["HTTP_ACCEPT_LANGUAGE"])?'$_SERVER["HTTP_ACCEPT_LANGUAGE"]' . $_SERVER["HTTP_ACCEPT_LANGUAGE"] . "\n":'' );
	$log_mail .= ( !empty( $_SERVER["HTTP_USER_AGENT"])?'$_SERVER["HTTP_USER_AGENT"]' . $_SERVER["HTTP_USER_AGENT"] . "\n":'' );
	$log_mail .= ( !empty( $_SERVER["REMOTE_ADDR"])?'$_SERVER["REMOTE_ADDR"]' . $_SERVER["REMOTE_ADDR"] . "\n":'' );
	$log_mail .= ( !empty( $_SERVER["REMOTE_HOST"])?'$_SERVER["REMOTE_HOST"]' . $_SERVER["REMOTE_HOST"] . "\n":'' );
	$log_mail .= ( !empty( $_SERVER["REMOTE_USER"])?'$_SERVER["REMOTE_USER"]' . $_SERVER["REMOTE_USER"] . "\n":'' );
	$log_mail .= ( !empty( $_SERVER["REQUEST_URI"])?'$_SERVER["REQUEST_URI"]' . $_SERVER["REQUEST_URI"] . "\n":'' );
	$log_mail .= "Utilisateur: $user \n";
	$log_mail .= ( !empty( $_SERVER["ORIG_PATH_INFO"])?'$_SERVER["ORIG_PATH_INFO"]' . $_SERVER["ORIG_PATH_INFO"] . "\n":'' );
	$log_mail .= ( !empty( $_SERVER["PATH_INFO"])?'$_SERVER["PATH_INFO"]' . $_SERVER["PATH_INFO"] . "\n":'' );
	// verifying connection to database
	if( !empty( $db->connect ) )
	{
		// saving log into database
		$query = 'INSERT INTO ' . $db->protect($table_prefix) . 'logs SET date=NOW(), auteur="' . $db->protect( $user ) . '", log="' . $db->protect($log) . '", niveau="' . $db->protect($level) . '"';
		$db->query( $query );
		if ( !$db->result )
		{
			// send mail in case of query error
			$text = $db->error() . "\n\n" . $log_mail;
			mail( $webmaster, "Erreur écriture logs => " . __file__ . " ligne " .  __line__, $text );
		}
	}else
	{
		//send mail in case of database connection error
		mail( $webmaster, "Erreur de connecxion à la base de données => " . __file__ . " ligne " .  __line__ , $log_mail);
	}
	// send mail to admin in case of level > INFO
	if ( $level == ALERT )
	{
		mail( $webmaster, "Alerte Site Web", $log_mail );
	}elseif ( $level == ERROR )
	{
		mail( $webmaster, "Erreur Site Web", $log_mail );
	}
}
// $w_db  = true -> write log in database (default)
// $die = true -> execute die() -> script end
function log_error($log, $w_db=true, $die=false)
{
	global $webmaster, $headers, $accueil, $db;
	if ( $w_db ) log_write($log, ERROR);
	$log_err = 'erreur dans la requête
un rapport détaillé a été envoyé au webmaster';
	if ( $die )
	{
		//echo "\n";
		die( $log_err );
	}else
	{
		//store error in table session[]
		$_SESSION['error'] = $log_err;
	}
}
//diplay logs
function affich_log( $nl, $np = 1, $level=0)
{
	global $table_prefix, $base_url, $path, $page;
	$db = new db();
	if( !empty( $db->connect ) )
	{
		$level_s = array( "aucun", "info", "alerte", "erreur" );
		if ($level < 0 or $level >3) $level = 0;
		$query = 'SELECT * FROM ' . $table_prefix . 'logs';
		if ( $level != 0 )
		{
			$query .= " WHERE niveau=" . $level ;
		}
		$query .= ' ORDER BY id_log DESC';
		$db->query($query);
		$total_lignes = $db->result->num_rows;
		/////////////:: Calcule le nombre de pages de logs
		$n_pages = round(  $total_lignes / $nl );
		if ( $np == 0 )
		{
			$np = 1;
		}elseif ( $np > $n_pages )
		{
			$np = $n_pages;
		}
		//////////////////////////////////////////////////////
		////////////////////////// Bouton de choix du niveau de log
		echo "\n" . '
| date | auteur | log | niveau | 
| " . $donnees["date"] . " | " . $donnees["auteur"] . " | " . htmlentities($donnees["log"], ENT_QUOTES) . " | " . $level_s[ $niveau ] . " |