<?php
// WebJaxe, Observatoire de Paris, licence GPL
// encodage : UTF-8


// renvoit TRUE si l'on peut se connecter au serveur et que la base de données existe, FALSE sinon
function tester_base()
{
    if (!isset($_SESSION['serveur_base_de_donnes']) || !isset($_SESSION['login_base_de_donnes']))
        return(FALSE);
    if (!function_exists('mysql_connect')) {
        error_log('webjaxe: function mysql_connect unavailable: missing php-mysql module ?');
        return(FALSE);
    }
    $lien = @mysql_connect($_SESSION['serveur_base_de_donnes'], $_SESSION['login_base_de_donnes'], $_SESSION['pass_base_de_donnes']);
    if (! $lien)
        return(FALSE);
    
    if (mysql_select_db($_SESSION['nom_base_de_donnes'], $lien))
        $resultat = TRUE;
    else
        $resultat = FALSE;
    mysql_close($lien);
    return $resultat;
}

// renvoit la variable de connexion à la base
function connecte_base($serveur, $login, $password)
{
    $lien = mysql_connect($serveur, $login, $password);
    if (! $lien)
        erreur(ECHEC_CONNECTION_BD);
    
    if ( mysql_select_db($_SESSION['nom_base_de_donnes'], $lien) == FALSE ) {
        mysql_close($lien);
        erreur(ECHEC_SELECTION_BD);
    }
    mysql_query("SET CHARACTER SET 'utf8'", $lien);
    return($lien);
}

// connexion à la base de données avec les paramètres de la session
// renvoie un identifiant de connexion, qui peut être utilisé ensuite dans les requêtes
// et pour se déconnecter (attention à toujours fermer les connexions)
function connexion() {
    $lien = connecte_base($_SESSION['serveur_base_de_donnes'], $_SESSION['login_base_de_donnes'], $_SESSION['pass_base_de_donnes']);
    return($lien);
}

function deconnecte_base($lien)
{
    mysql_close($lien);
}

// renvoit TRUE si la base de données contient des tables, FALSE sinon
function tester_tables()
{
    $link = connecte_base($_SESSION['serveur_base_de_donnes'], $_SESSION['login_base_de_donnes'], $_SESSION['pass_base_de_donnes']);
    $resultat = mysql_query('SHOW TABLES', $link);
    if ($resultat == FALSE || mysql_num_rows($resultat) == 0) {
        deconnecte_base($link);
        return(FALSE);
    }
    deconnecte_base($link);
    return(TRUE);
}

// Crée la base en utilisant les variables de session pour la connexion et le nom de la base
function creer_base() {
    $nom_base = $_SESSION['nom_base_de_donnes'];
    $lien = @mysql_connect($_SESSION['serveur_base_de_donnes'], $_SESSION['login_base_de_donnes'], $_SESSION['pass_base_de_donnes']);
    if (! $lien)
        erreur(ECHEC_CONNECTION_BD);
    
    if ( mysql_select_db($nom_base) ) {
        mysql_close($lien);
        erreur(ECHEC_CREATION_BD);
    }
    mysql_query("SET CHARACTER SET 'utf8'", $lien);
    
    $result = mysql_query('CREATE DATABASE '.$nom_base, $lien);
    
    if ( $result == FALSE ) {
        mysql_close($lien);
        erreur(ECHEC_CREATION_BD);
    }
    
    mysql_close($lien);
}

// retourne le résultat de la requête SQL
function executer_requete($requete, $lien_bdd=false)
{
    if ($lien_bdd == false)
        $link = connecte_base($_SESSION['serveur_base_de_donnes'], $_SESSION['login_base_de_donnes'], $_SESSION['pass_base_de_donnes']);
    else
        $link = $lien_bdd;
    $resultat = mysql_query($requete, $link);
    if ($lien_bdd == false)
        deconnecte_base($link);
    return($resultat);
}

function tester_resultat($resultat)
{
    if ($resultat == FALSE)
        return(FALSE);
    else
        return(TRUE);
}

function nombre_de_lignes($resultat)
{
    return mysql_num_rows($resultat);
}


// Cette fonction retourne un tableau avec le résultat de la requête.
// On peut passer le nom d'un champ en paramètre pour le sélectionner, dans ce cas la fonction
// renvoie un tableau avec les valeurs du champ.
// Renvoie FALSE s'il n'y a pas de résultat pour la requête.
function lire_le_resultat($resultat, $champ=FALSE)
{
    if (nombre_de_lignes($resultat) == 0)
        return(FALSE);
    
    $tab_resultat_lu = array();
    $i = 0;
    while ($resultat_lu = mysql_fetch_array($resultat)) 
    {
        if ($champ === FALSE)
            $tab_resultat_lu[$i] = $resultat_lu;
        else
            $tab_resultat_lu[$i] = $resultat_lu[$champ];
        $i = $i+1;
    }
    return ($tab_resultat_lu);
}

// Cette fonction retourne le premier résultat de la requête.
// On peut passer le nom d'un champ en paramètre pour le sélectionner, dans ce cas le résultat est
// la valeur du champ pour le premier résultat de la requête.
// Renvoie FALSE s'il n'y a pas de résultat pour la requête.
function lire_premier_resultat($resultat, $champ=FALSE)
{
    if (nombre_de_lignes($resultat) == 0)
        return(FALSE);
    
    $array1 = mysql_fetch_array($resultat);
    if ($array1 === FALSE)
        return(FALSE);
    if ($champ === FALSE)
        return($array1);
    else
        return($array1[$champ]);
}

// LAST_INSERT_ID()
function dernier_id($lien_bdd) {
    return(mysql_insert_id($lien_bdd));
}

?>
