=NIVEAU_ACCES_MINI) AND ($na <= NIVEAU_ACCES_MAXI)) { $requete = 'UPDATE TB_Shipmembers SET Niveau_acces=? WHERE ID=?'; $reponse = Requete_preparee_bdd($requete, array( array('i', $na), array('i', $_SESSION['Administration']['id_shipmember'])), __FILE__, __LINE__); } } // Récupération des informations sur le ShipMember : $requete = 'SELECT *, (SELECT Texte FROM TB_Textes_traduction WHERE ID_TYPE = 1 AND ID_TEXTES=(SELECT ID_NOM FROM TB_Pays WHERE ID=TB_Shipmembers.ID_PAYS) AND ID_LANGUAGES=1) AS Libelle_pays FROM TB_Shipmembers WHERE ID='.$_SESSION['Administration']['id_shipmember'].' '; $reponse = Requete_preparee_bdd($requete, array(), __FILE__, __LINE__); while ($donnees = Recherche_ligne_bdd($reponse)) { $shipmember = $donnees; } Liberation_jeu_de_resultat_bdd($reponse); $requete = ''; // Récupération des informations sur le ou les bateaux accessibles à ce ShipMember : $nb_bateaux = 0; $requete = "SELECT * FROM TB_Lien_bateau_shipmember WHERE ID_SHIPMEMBER=? AND Statut IN ('actif','suspendu')"; // Hors invitations et accès révoqués (synthèse §47) $reponse = Requete_preparee_bdd($requete, array( array('i', $_SESSION['Administration']['id_shipmember'])), __FILE__, __LINE__); while ($donnees = Recherche_ligne_bdd($reponse)) { $bateaux[$nb_bateaux ++]['Cle_primaire'] = $donnees['ID_Bateau']; } Liberation_jeu_de_resultat_bdd($reponse); // Récupération des informations relatives à chacun des bateaux accessibles : for ($i=0; $i<$nb_bateaux; $i ++) { $requete = 'SELECT * FROM TB_Bateaux WHERE Cle_primaire=? '; $reponse = Requete_preparee_bdd($requete, array( array('i', $bateaux[$i]['Cle_primaire'])), __FILE__, __LINE__); while ($donnees = Recherche_ligne_bdd($reponse)) { $bateaux[$i] = $donnees; } Liberation_jeu_de_resultat_bdd($reponse); } Rafraichir_acces_session($_SESSION['shipmember']['Cle_primaire']); // Accès actifs (synthèse §47) // $_SESSION['acces_valide'] = true; break; } //**************************************************************************************************************************** case "Purge_bdd": { $nb_tables = 0; $tables[$nb_tables ++]['Nom'] = "TB_BATEAUX_Mesures_circuits"; $tables[$nb_tables ++]['Nom'] = "TB_BATEAUX_Mesures_batteries"; $tables[$nb_tables ++]['Nom'] = "TB_BATEAUX_Mesures_reservoirs"; $tables[$nb_tables ++]['Nom'] = "TB_BATEAUX_Mesures_capteurs"; $max_lignes_traitees = 500000; for ($x = 0; $x < $nb_tables; $x ++) { $nom_table = $tables[$x]['Nom']; $start_time = microtime(true); //------------------------------------------------------ // Recherche de la taille de la table avant traitement : $requete = 'SELECT COUNT(*) AS Nb FROM '.$nom_table.' '; $reponse = Requete_bdd($requete, __FILE__, __LINE__); while ($donnees = Recherche_ligne_bdd($reponse)) { $taille_table_avant_traitement = $donnees['Nb']; } Liberation_jeu_de_resultat_bdd($reponse); //--------------------------------------------------- // Recherche des bateaux concernés dans cette table : $nb_bateaux = 0; $requete = 'SELECT DISTINCT(ID_Bateau) FROM '.$nom_table.' WHERE 1'; $reponse = Requete_preparee_bdd($requete, array(), __FILE__, __LINE__); while ($donnees = Recherche_ligne_bdd($reponse)) { $bateaux[$nb_bateaux ++] = $donnees; } Liberation_jeu_de_resultat_bdd($reponse); //-------------------------------------------------------------------------------------------------------- // Boucle sur tous les bateaux pour rechercher les éléments concernés par chaque bateau dans cette table : for ($i = 0; $i < $nb_bateaux ; $i ++) { // Recherche des éléments (circuits, réservoirs, batteries, ...) concernés sur chaque bateau : $bateaux[$i]['nb_elements'] = 0; $requete = 'SELECT DISTINCT(ID) FROM '.$nom_table.' WHERE ID_Bateau=? '; $reponse = Requete_preparee_bdd($requete, array( array('i', $bateaux[$i]['ID_Bateau'])), __FILE__, __LINE__); while ($donnees = Recherche_ligne_bdd($reponse)) { $bateaux[$i][$bateaux[$i]['nb_elements'] ++] = $donnees['ID']; // echo '
'.$bateaux[$i]['nb_elements'].' : ID = '.$donnees['ID'].'
'; } Liberation_jeu_de_resultat_bdd($reponse); } //------------------------------------------------------------------- // Boucle sur tous les bateaux pour traiter les entrées redondantes: $nb_total_lignes_supprimees = 0; for ($i = 0; $i < $nb_bateaux ; $i ++) { // Boucle sur tous les éléments : for ($j = 0; $j < $bateaux[$i]['nb_elements']; $j ++) { $nb_redondants = 0; $val_1 = -1; $val_2 = 0; $id_2 = 0; $requete = 'SELECT Cle_primaire, Date, Valeur FROM '.$nom_table.' WHERE ID_Bateau=? AND ID=? ORDER BY Date '; $reponse = Requete_preparee_bdd($requete, array( array('i', $bateaux[$i]['ID_Bateau']), array('i', $bateaux[$i][$j])), __FILE__, __LINE__); while ($donnees = Recherche_ligne_bdd($reponse)) { // Recherche des conditions de redondance : if (($val_1 == $val_2) AND ($val_2 == $donnees['Valeur'])) // Si la valeur actuelle est égale à la précédente et à celle encore avant : { $redondants[$nb_redondants ++] = $id_2; // ... on mémorise l'entrée intermédiaire (N-1) $nb_total_lignes_supprimees ++; if ($nb_total_lignes_supprimees >= $max_lignes_traitees) break; } $val_1 = $val_2; $val_2 = $donnees['Valeur']; $id_2 = $donnees['Cle_primaire']; } Liberation_jeu_de_resultat_bdd($reponse); // Suppression des enregistrements redondants : for ($k = 0; $k < $nb_redondants; $k ++) { // Création d'une chaine avec les différentes clés à supprimer afin de réduire le nombre de requêtes DELETE (impact sur temps de traitement d'environ / 50 avec la valeur de 100) : $max_l = 100; $chaine_cles_primaires = '(Cle_primaire='.$redondants[$k ++].' '; if ($k < ($nb_redondants - 1)) { for ($l = 1; $l < $max_l; $l ++) { $chaine_cles_primaires .= 'OR Cle_primaire='.$redondants[$k].' '; if (($k >= ($nb_redondants - 1)) OR ($l >= ($max_l - 1))) break; $k ++; } } $chaine_cles_primaires .= ')'; $requete = 'DELETE FROM '.$nom_table.' WHERE ID_Bateau='.$bateaux[$i]['ID_Bateau'].' AND '.$chaine_cles_primaires.' '; // echo 'Requête = ['.$requete.']Attention : toute la partie Administration n\'est disponible qu\'en français.
'; echo '| Nom | Entreprise | Telephone | |
|---|---|---|---|
| '.$shipmembers[$i]['Prenom'].' '.$shipmembers[$i]['Nom'].' | '.$shipmembers[$i]['Entreprise'].' | '.$shipmembers[$i]['Telephone'].' | '.$shipmembers[$i]['Email'].' |
| Nom complet | '.$shipmember['Prenom'].' '.$shipmember['Nom'].' |
| Entreprise | '.$shipmember['Entreprise'].' |
| Adresse | '.$shipmember['Rue'].' - '.$shipmember['Code_postal'].' '.$shipmember['Ville'].' - '.$shipmember['Libelle_pays'].' |
| Téléphone | '.$shipmember['Telephone'].' |
| '.$shipmember['Email'].' | |
| Date création du compte | '.Formatage_date($shipmember['Date_creation_compte']).' |
| Niveau d\'accès | |
| Bateaux accessibles | ';
if ($nb_bateaux == 0) echo 'Aucun...';
else
{
for ($i=0; $i<$nb_bateaux; $i ++)
{
echo $bateaux[$i]['Nom'].' '; } } echo ' |
Taille de la table AVANT traitement = '.number_format($tables[$x]['Taille_avant_traitement'], 0, ".", " ").' lignes
'; echo 'Le nombre total de lignes supprimées est de '.number_format($tables[$x]['Nb_total_lignes_supprimees'], 0, ".", " ").' (maxi = '.number_format($max_lignes_traitees, 0, ".", " ").') en '.$tables[$x]['Execution_time'].' secondes
'; echo 'Taille de la table APRES traitement = '.number_format($tables[$x]['Taille_apres_traitement'], 0, ".", " ").' lignes
'; } echo '