IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

unset($_SESSION['xx']) ne fonctionne pas [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut unset($_SESSION['xx']) ne fonctionne pas
    Bonsoir la cie,

    Cela fait pas mal de temps que je ne suis plus venu demander de l'aide

    Je refais une nouvelle interface de gestion du club afin de la moderniser et introduire de nouvelles fonctionnalités.
    Une nouvelle fonctionnalité est un système d'alertes à plusieurs couleurs issu d'ici : https://www.w3schools.com/howto/howto_js_alert.asp ... cela fonctionne très bien, jusqu'au moment où je dois supprimer les alertes récoltées (mises en session) pour afficher une alerte prioritaire.
    J'utilise des alertes de couleur : vert, rouge, orange, bleu et couleur du club.

    Commençons par la création d'une alerte (mineure) par la lecture des données du membre, dont le principe reste le même partout : le round car la donnée BDD est en 4 chiffre, permet de supprimer les 0 non significatifs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $m_array['membre']['abonnement']=$in['p_abonnement'];
    if ($m_array['membre']['abonnement']<=4 && $m_array['membre']['abonnement']!=0) {   // ----- Alerte
       $array_gestion_alerte['bleu']['type']='alerte bleu';
       $array_gestion_alerte['bleu']['texte']=$array_gestion_alerte['bleu']['texte'].'<p><strong>Abonnement</strong> : Le nombre d\'abonnement arrive à sa fin -> '.round($m_array['membre']['abonnement']).'</p>';
       $_SESSION['s_gestion_alerte']=$array_gestion_alerte;
       unset($array_gestion_alerte);
    }
    Ensuite, la suppression de la session pour une alerte prioritaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // ---------- Gestion des alertes PRIORITAIRES
    if ($m_array['options']['exclu']=='oui') {
       unset($_SESSION['s_gestion_alerte']);   // ----- Suppression des alertes précédentes
       $array_gestion_alerte['alerte']['type']='alerte';
       $array_gestion_alerte['alerte']['texte']='<p><strong>ATTENTION</strong> : Ce membre a été exclu du club !</p>';
       $_SESSION['s_gestion_alerte']=$array_gestion_alerte;
       unset($array_gestion_alerte);
     }
     else if ($m_array['options']['demission']=='oui') {
       unset($_SESSION['s_gestion_alerte']);   // ----- Suppression des alertes précédentes
       $array_gestion_alerte['orange']['type']='alerte orange';
       $array_gestion_alerte['orange']['texte']='<p><strong>ATTENTION</strong> : Ce membre a démissionné du club !</p>';
       $_SESSION['s_gestion_alerte']=$array_gestion_alerte;
       unset($array_gestion_alerte);
     }
    else if ($m_array['rgpd']['cst']=='non') {
       $array_gestion_alerte['alerte']['type']='alerte';
       $array_gestion_alerte['alerte']['texte']=$array_gestion_alerte['alerte']['texte'].'<p><strong>Covid Safe Ticket</strong> : Le membre n\'a pas encore présenté son CST !</p>';
       $_SESSION['s_gestion_alerte']=$array_gestion_alerte;
       unset($array_gestion_alerte);
     }
    Et enfin l'affichage des alertes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    if (isset($_SESSION['s_gestion_alerte'])) { $array_gestion_alerte=$_SESSION['s_gestion_alerte']; }
    print "<div class=\"div_alerte\">";
    	if (isset($array_gestion_alerte)) {
    		foreach ($array_gestion_alerte AS $boucle1) {
    			$alerte_type=$boucle1['type'];
    			$alerte_texte=$boucle1['texte'];
     
    			print "<div class=\"$alerte_type\">";
    				print "<span class=\"closebtn\">&times;</span>"; 
    				print "$alerte_texte";
    			print "</div>";
    		}
    		unset($array_gestion_alerte);
    	}
    	else { print"&nbsp;"; }
    print "</div>";
    Mon problème est que le code suivant n'efface pas la session : unset($_SESSION['s_gestion_alerte']);
    Cela se passe aussi bien en local que sur l'hébergement

    Est-ce du au fait que la session est un array ?
    Une idée de la cause ?

    Voici un exemple de session pour 2 alertes rouges ('alerte') et 1 orange ('orange') :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      's_gestion_alerte' => 
        array (size=2)
          'alerte' => 
            array (size=2)
              'type' => string 'alerte' (length=6)
              'texte' => string '<p><strong>Cotisation</strong> : La date est dépassée</p><p><strong>RC Familiale</strong> : La date est dépassée</p><p><strong>Covid Safe Ticket</strong> : Le membre n'a pas encore présenté son CST !</p>' (length=209)
          'orange' => 
            array (size=2)
              'type' => string 'alerte orange' (length=13)
              'texte' => string '<p><strong>ATTENTION</strong> : Ce membre a démissionné du club !</p>' (length=71)
    Seule l'alerte orange ne devrait s'afficher car prioritaire : membre démissionaire.

    NB : le $m_array récolte les informations pour l'affichage d'informations rapides ou le formulaire du membre -> le $m_array sera alors plus complet.

    Si quelqu'un a une idée

    @+
    ddaweb

    Modification :
    Je devrais arriver à ceci, c'est une version que j'ai abandonnée car trop compliquée à gérer :

    Nom : interface_club.png
Affichages : 158
Taille : 89,8 Ko

  2. #2
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Bonjour,

    Tu as lu les 5 première lignes de la documentation php unset ?

    Crdlt

  3. #3
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Bonjour Gaulouis,

    Oui évidemment que je l'ai consulté avant de venir ici, mais cela ne m'a pas aidé.

    Si vous parlez de ceci : Si une variable globale est détruite avec unset() depuis une fonction, seule la variable locale sera détruite. La variable globale gardera la valeur acquise avant l'appel à unset(). , je suppose que cela parle de 'function ()' ?
    Si oui, je ne suis pas dans une fonction, mais un IF ou ELSE IF.

    Maintenant, je savais que ce qui est dans la 'function()' restait dans ce contenaire.

    Je suis occupé dans un script de restauration d'une base de données qui a crachée et là le unset de la session fonctionne très bien dans un IF ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (isset($_POST['restaurer_valider'])) {
    	$restaurer_mbr=$_SESSION['restaurer_mbr'];
    	$restaurer_date=$_SESSION['restaurer_date'];
    	unset($_SESSION['restaurer_mbr'],$_SESSION['restaurer_date']);
    	print "<h3 style=\"color: red;\">Restauration : $restaurer_mbr - à la date du : $restaurer_date</h3>";
    }
    NB : j'ai tester le unset juste pour voir, je n'en pas besoin dans ce cas, la session sert car il y a une confirmation obligatoire via un checkbox pour éviter un temps soit peu les fausses manœuvres

    @+
    ddaweb

  4. #4
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Bonjour,

    Il n'y a pas de unset($_SESSION['s_gestion_alerte']); dans le dernier "else if".

    D'autre part, il faudrait plutôt des "elseif" (sans espace)

  5. #5
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Bien vue jreaux62

    Citation Envoyé par jreaux62
    D'autre part, il faudrait plutôt des "elseif" (sans espace)
    jreaux62, assieds-toi toi, faut que ch' te parle ...


  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Ca m'a rappelé :
    « Tout le monde savait que c'était impossible. Un ignare ne le savait pas : il l'a fait » in La cinématurgie. César. Merlusse - Page 145 de Marcel Pagnol · 1967

  8. #8
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    Il n'y a pas de unset($_SESSION['s_gestion_alerte']); dans le dernier "else if".

    D'autre part, il faudrait plutôt des "elseif" (sans espace)
    En effet, pour ce dernier, je garde les autres alertes car c'est une information complémentaire importante dans cette période de COVID

    Pour le else if, je vais m'habituer à le coller, même si les 2 syntaxes sont acceptées malgré tout.

    Toutefois fois, je ne comprends pas que les unset($_SESSION['s_gestion_alerte']); ne se font pas
    J'ai une solution alternative valable : ne pas faire les autres alertes si un de ces 2 critères est présent -> plus de code pour des cas très rares
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $m_array['membre']['abonnement']=$in['p_abonnement'];
    // ---------- Options
    $m_array['options']['carte_membre']=$in['p_carte_membre'];
    $m_array['options']['demission']=$in['p_option2'];
    $m_array['options']['exclu']=$in['p_option3'];
     
    if ($m_array['membre']['abonnement']<=4 && $m_array['membre']['abonnement']!=0 && $m_array['options']['demission']=='non' && $m_array['options']['exclu']=='non') {   // ----- Alerte
    	$array_gestion_alerte['bleu']['type']='alerte bleu';
    	$array_gestion_alerte['bleu']['texte']=$array_gestion_alerte['bleu']['texte'].'<p><strong>Abonnement</strong> : Le nombre d\'abonnement arrive à sa fin -> '.round($m_array['membre']['abonnement']).'</p>';
    	$_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    	unset($array_gestion_alerte);
    }

  9. #9
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Toutefois fois, je ne comprends pas que les unset($_SESSION['s_gestion_alerte']); ne se font pas
    Au pifomètre, as tu vérifier l'initialisation de la session, si oui comment ?
    As-tu utilisé le couple session_id() / session_start() ?
    As-tu consulté les log php( error_reporting) ? montre nous les éventuelle message d'erreur.

    Fais unset($_SESSION['s_gestion_alerte']);ou, $_SESSION['s_gestion_alerte']=null;
    Mais $_SESSION['s_gestion_alerte']=$array_gestion_alerte; unset($array_gestion_alerte); ne sert a rien ...

  10. #10
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    Je ne comprends pas ce que tu essayes de faire....
    Tu essayes d'unset() une valeur, et puis tu lui attribues une valeur juste derrière, donc forcément qu'elle a une valeur
    Et quand tu ne fais pas ça, tu unset() une variable (ce qui peut se faire) mais ça n'a évidemment pas d'impact sur l'index de ta session (unset($array_gestion_alerte);)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    unset($_SESSION['s_gestion_alerte']);   // ----- Suppression des alertes précédentes
       $array_gestion_alerte['alerte']['type']='alerte';
       $array_gestion_alerte['alerte']['texte']='<p><strong>ATTENTION</strong> : Ce membre a été exclu du club !</p>';
       $_SESSION['s_gestion_alerte']=$array_gestion_alerte;

    Ligne 1: Tu supprimes l'index s_gestion_alerte.
    Ligne 2 : Tu commence à créer un tableau de valeurs
    Ligne 4 : Tu assignes la valeur de ton tableau créé précédemment à l'index s_gestion_alerte, donc pile poil ce que tu avais supprimé avant...


    Tu devrais refactoriser ton code, il n'est pas très propre et la moitié de ce qu'on lit sont des doublons, ce qui n'aide ni à la lecture, ni à la compréhension.
    En plus de cela, ça provoque des oublis (le unset() manquant dans le dernier elseif, ou la position du unset())

    En conclusion, ton unset() ne sert absolument à rien. Ce code pourrait être simplifié de la façon suivante (c'est vraiment exactement la même chose) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $_SESSION['s_gestion_alerte'] = [
        'alerte' => [
            'type' => 'alerte',
            'texte' => '<p><strong>ATTENTION</strong> : Ce membre a été exclu du club !</p>'
        ],
    ];

    Je crois savoir ce que tu essayes de faire, c'est ce qu'on appelle parfois des "flash messages"
    C'est à dire que l'alerte doit être visible une fois et puis c'est tout.
    Dans ce cas, le unset() doit être fait en fin de rendu (comme dans un __destruct() si tu étais dans une classe par exemple).
    Actuellement, avec le code que je vois, tu auras soit 100% du temps une alerte, soit 0%


    EDIT : Voici un exemple que j'ai développé vite fait : https://tests.pierre-roels.com/flash-messages.php
    Si tu tests les alertes, j'en affiche une et une seule et si tu rafraichis la page, plus aucune alerte ne sera visible.
    La logique de création de l'alerte se fait en haut de fichier et systématiquement en bas de fichier, on va réinitialiser les valeurs en session (j'ai 2 variables ici pour plus de lisibilité et de flexibilité mais comme je l'ai mentionné on pourrait juste avoir $_SESSION['flash'])
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <?php
    session_start();
     
    if (!empty($_GET['show-message'])) {
        // Dans mon cas j'ai décidé d'utiliser 2 variables pour tester 
        // si on doit afficher un message mais on aurait pu garder uniquement
        // l'index 'flash' et vérifier si c'est vide ou non
        $_SESSION['display_flash_message'] = 1;
        switch ($_GET['show-message']) {
            case 1:
                $_SESSION['flash'] = [
                    'message' => "Message d'alerte #1",
                    'class' => 'danger',
                ];
                break;
            case 2:
                $_SESSION['flash'] = [
                    'message' => "Message d'alerte #2",
                    'class' => 'warning',
                ];
                break;
            case 3:
                $_SESSION['flash'] = [
                    'message' => "Message d'alerte #3",
                    'class' => 'primary',
                ];
                break;
        }
        header("Location: /flash-messages.php");
        exit;
    }
    ?><!doctype html>
    <html lang="fr-FR">
        <head>
            <meta charset="utf-8">
            <meta http-equiv="x-ua-compatible" content="ie=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <title>unset($_SESSION['xx']) ne fonctionne pas</title>
            <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
        </head>
        <body>
            <div class="container">
                <h1 class="my-3">unset($_SESSION['xx']) ne fonctionne pas</h1>
                <?php if (!empty($_SESSION['display_flash_message']) && !empty($_SESSION['flash'])) : ?>
                    <div class="alert alert-<?= $_SESSION['flash']['class']; ?>">
                        <?= $_SESSION['flash']['message']; ?>
                    </div>
                <?php endif; ?>
                <p>
                    <a href="?show-message=1" class="btn btn-success">Activer l'alerte 1</a>
                    <a href="?show-message=2" class="btn btn-success">Activer l'alerte 2</a>
                    <a href="?show-message=3" class="btn btn-success">Activer l'alerte 3</a>
                </p>
                <?php
                echo PHP_EOL . '<pre>$_SESSION: ' . print_r($_SESSION, true) . '</pre>' . PHP_EOL;
                ?>
            </div>
        </body>
    </html>
    <?php
    // On réinitialise le flash message à 0 et on supprime le contenu de 'flash'
    $_SESSION['display_flash_message'] = 0;
    unset($_SESSION['flash']);

  11. #11
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Bonjour Gaulouis, darkstar123456,

    Je vais essayer de répondre à vos questions :

    J'initialise les sessions avec session_start()

    J'initialise les différentes alertes en lisant les données du membre : comme par exemple
    - Nombre d'abonnements encore disponibles
    - Date de cotisation -> arrive à échéance
    - Date d'échéance de leur RC Familiales -> arrive à échéance
    - Date des vaccins du chien -> doit être revacciné
    - Etc

    Je ne lisais qu'il avait démissionné ou a été mit dehors qu'après (erreur de ma part, je le fais en premier maintenant et ne vais plus générer d'autres alertes !) -> c'était pour cela la suppression des alertes précédentes qui ne sont plus nécessaires, avec le unset, et uniquement cette alerte.
    Donc oui, je recréais le même array avec des nouvelles valeurs.
    Cela ne concerne que quelques membres que l'on peut compter sur les doigts des mains

    Mais cela n'explique pas pourquoi le unset ne se fait pas !! ... ma question en fin de compte

    Complément d'information : les alerte n'ont lieues qu'une seule fois, à l'appel du membre, plus besoin de les ré-afficher tant que l'on travail sur ce même membre

    @+
    DDA

  12. #12
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Bonjour,

    Tu te trompes de suspect.

    Le "unset" est certainement innocent.
    Par contre, il faudrait interroger "la logique" (if, elseif,...), dont on n'a ici qu'une partie.

  13. #13
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    Tu te trompes de suspect.

    Le "unset" est certainement innocent.
    Par contre, il faudrait interroger "la logique" (if, elseif,...), dont on n'a ici qu'une partie.
    Dans mon premier post, j'ai mis toute la chronologie des évènements, certes tout le code n'y était pas sinon ce serait long ... je n'ai pas trouvé de code qui court-circuiterait le fameux unset
    Entre-temps, j'ai modifié mon code comme expliqué par après en lisant en premier la démission et/ou l'exclusion et les ajouter comme critère pour les autres alertes -> si un ou l'autre est "oui" -> pas d'alerte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $m_array['options']['demission']=$in['p_option2'];
    $m_array['options']['exclu']=$in['p_option3'];
    // ----- Alerte abonnement
    $m_array['membre']['abonnement']=$in['p_abonnement'];
    if ($m_array['membre']['abonnement']<=4 && $m_array['membre']['abonnement']!=0 && $m_array['options']['demission']=='non' && $m_array['options']['exclu']=='non') { ... }
    Je ne trouve absolument pas pourquoi, ni qui est le fautif et je crois que je vais laisser tomber vu que la nouvelle approche fait ce qu'il faut ... cela restera malheureusement un grand mystère pour moi !

    Que voulez-vous dire avec : il faudrait interroger "la logique" (if, elseif,...) ? ... là le code est complet.

    @+
    DDA

  14. #14
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    Je ne comprends pas ce dernier code. Il n'y a pas de session dedans donc je ne vois pas trop à quoi il nous sert, désolé :p

    Pour ce qui est de "Pourquoi le unset() ne se fait pas ?" je l'ai expliqué en tout début de ma réponse.
    C'est toi qui recrée l'index instantanément après avoir l'avoir supprimé.

    Je te remets le code en question :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    unset($_SESSION['s_gestion_alerte']);   // ----- Suppression des alertes précédentes
       $array_gestion_alerte['alerte']['type']='alerte';
       $array_gestion_alerte['alerte']['texte']='<p><strong>ATTENTION</strong> : Ce membre a été exclu du club !</p>';
       $_SESSION['s_gestion_alerte']=$array_gestion_alerte;
       unset($array_gestion_alerte);

    Ligne 1 : tu unset l'index s_gestion_alerte.
    Ligne 4 : tu recrées l'index s_gestion_alerte.
    Ligne 5 : tu effaces LA VARIABLE $array_gestion_alerte.

    Résultat : l'index existe et il a la valeur de $s_gestion_alerte.


    Unset() fonctionne également pour supprimer des variables, ça permet de libérer un peu de mémoire (je crois) mais surtout c'est utile après des boucles lors de passage par référence dans des boucles.
    Voici un exemple d'unset() utile avec des variables :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    foreach($mon_array AS $k => $&v) {
        $v = "blablabla";
    }
    echo $v; // blablabla
    unset($v);
    echo $v; // undefined variable $v

  15. #15
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    Ligne 5 : tu effaces LA VARIABLE $s_gestion_alerte.
    Il doit falloir lire tu effaces LA VARIABLE $array_gestion_alerte.

  16. #16
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Citation Envoyé par ddaweb Voir le message
    Dans mon premier post, j'ai mis toute la chronologie des évènements...
    Ben non...

    Dans ton 1er message :

    Citation Envoyé par ddaweb Voir le message
    Voici un exemple de session pour 2 alertes rouges ('alerte') et 1 orange ('orange') :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      's_gestion_alerte' => 
        array (size=2)
          'alerte' => 
            array (size=2)
              'type' => string 'alerte' (length=6)
              'texte' => string '<p><strong>Cotisation</strong> : La date est dépassée</p><p>....</p>' (length=209)
    ...
    A AUCUN endroit des codes que tu as montrés, on ne trouve mention de : '<strong>Cotisation</strong>.....'.

    C'est bien la preuve que tu NE MONTRES PAS tout le code !
    Ou que tu en as oublié jusqu'à l'existence ?

  17. #17
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Oups, là tout par en sucette et je ne comprends plus où vous voulez en venir ...
    J'ai maintenant l'impression d'avoir été mit au pied du bucher

    Je vais vous mettre le code actuel, donc plus long, car le code d'origine est modifié comme je l'ai expliqué 2 fois ... je n'ai plus le problème vu que j'ai mis 2 conditions supplémentaire pour ne plus à avoir à faire un unset de la variable.
    Si ne mettre que le code incriminé est cacher du code j'en suis désolé, mais alors je dois également mettre des fonctions qui n'ont, à mon sens, rien à voir avec ma question originale : pourquoi le unset ne se fait pas ... rien d'autre.

    Je crois que tout le monde aura ses réponses ainsi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    // --------------- Les fonctions
    	function RechercheDateDernierCours($conn,$membre_id_cours) {
    		$date='0000-00-00';
    		$reponse_cours_date=mysqli_query($conn,"SELECT compta_dates_date 
    			FROM 00_compta_cours cours 
    				LEFT JOIN 00_compta_dates dates ON cours.compta_cours_date_id=dates.compta_dates_id
    			WHERE compta_cours_prop_id='$membre_id_cours'");
    		while ($in_date_cours=mysqli_fetch_array($reponse_cours_date)) { if (isset($in_date_cours['compta_dates_date'])) { $date=$in_date_cours['compta_dates_date']; } }
    		return ($date);
    	}
     
    	function CouleurDate($couleur_date_ref,$couleur_date_echeance) {
    		$couleur='green';
    		$statuts=0;
    		$alerte='';
    		$type='';
    		$texte='';
    		if ($couleur_date_echeance=='0000-00-00') { $couleur_date_echeance='1970-01-01'; }
    		$couleur_date_ref_14_plus=date('Y-m-d', strtotime('+14 days',strtotime($couleur_date_ref)));
    		$couleur_date_ref_14_moins=date('Y-m-d', strtotime('-14 days',strtotime($couleur_date_ref)));
    		$couleur_date_echeance_1_an=date('Y-m-d', strtotime('+1 year',strtotime($couleur_date_echeance)));
    		if ($couleur_date_echeance_1_an>=$couleur_date_ref_14_moins && $couleur_date_echeance_1_an<=$couleur_date_ref_14_plus) { $couleur='#FF8000'; $statuts=1; $alerte='alerte orange'; $type='orange'; $texte='Arrive à échéance'; } // ----- échéance
    		else if ($couleur_date_echeance_1_an<$couleur_date_ref_14_plus) { $couleur='red'; $statuts=2; $alerte='alerte'; $type='alerte'; $texte='La date est dépassée'; } // ----- Date dépassée
    		else if ($couleur_date_echeance>$couleur_date_ref) { $couleur='#084B8A'; $statuts=3; $alerte='alerte bleu'; $type='bleu'; $texte="La date introduite n'est pas correcte"; } // ----- Erreur dans la date 
    		// ----- Statuts : 0=OK - 1=A échéance - 2=Date dépassée - 3=Erreur date
    		$array=array($couleur,$statuts,$type,$alerte,$texte);
    		return ($array);
    	}
    // --------------- Récoltes des données et alertes
    	$m_moniteur_section_test='non';
    	$s_mbr_actif=$_SESSION['s_mbr_actif'];
    	$reponse=mysqli_query($conn,"SELECT *
    		FROM 02_prop prop
    			LEFT JOIN  (SELECT * FROM 04_cours_moniteur WHERE cours_moniteur_actif='oui') moniteur ON prop.id_prop=moniteur.cours_moniteur_prop_id 
    			LEFT JOIN 02_prop_compagnies rc ON prop.p_compagnie=rc.compagnies_id 
    			LEFT JOIN 02_prop_postal postal ON prop.p_postal=postal.id_postal 
    		WHERE id_prop='$s_mbr_actif'");
    	while ($in=mysqli_fetch_array($reponse)) {
    		// ---------- Données membre
    		$m_array['membre']['id']=$in['id_prop'];
    		$m_array['membre']['prenom']=$in['p_prenom'];
    		$m_array['membre']['nom']=$in['p_nom'];
    		$m_array['membre']['naissance']=$in['p_naissance'];
    			$m_array['membre']['naissance_fr']=date('d/m/Y',strtotime($in['p_naissance']));
    		$m_array['membre']['type']=$in['p_type'];
    		// ---------- Options
    		$m_array['options']['carte_membre']=$in['p_carte_membre'];
    		$m_array['options']['demission']=$in['p_option2'];
    		$m_array['options']['exclu']=$in['p_option3'];
    			if ($m_array['options']['exclu']=='oui') {
    			   $array_gestion_alerte['alerte']['type']='alerte';
    			   $array_gestion_alerte['alerte']['texte']='<p><strong>ATTENTION</strong> : Ce membre a été exclu du club !</p>';
    			   $_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    			   unset($array_gestion_alerte);
    			 }
    			 else if ($m_array['options']['demission']=='oui') {
    			   $array_gestion_alerte['orange']['type']='alerte orange';
    			   $array_gestion_alerte['orange']['texte']='<p><strong>ATTENTION</strong> : Ce membre a démissionné du club !</p>';
    			   $_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    			   unset($array_gestion_alerte);
    			 }
    		// ---------- COVID SAFE TICKET
    		$m_array['rgpd']['cst']=$in['p_cst'];
    			if ($m_array['rgpd']['cst']=='non' && $m_array['options']['demission']=='non' && $m_array['options']['exclu']=='non') {
    				$array_gestion_alerte['alerte']['type']='alerte';
    				$array_gestion_alerte['alerte']['texte']=$array_gestion_alerte['alerte']['texte'].'<p><strong>Covid Safe Ticket</strong> : Le membre n\'a pas encore présenté son CST !</p>';
    				$_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    				unset($array_gestion_alerte);
    			}
    		// ---------- Données membre
    		$m_array['membre']['cotisation']=date('Y-m-d', strtotime('+1 year',strtotime($in['p_reinscription'])));
    			$m_array['membre']['cotisation_fr']=date('d/m/Y', strtotime('+1 year',strtotime($in['p_reinscription'])));
    			$m_array['membre']['cotisation_fr_couleur']=CouleurDate(date('Y-m-d'),$in['p_reinscription']);
    			if ($m_array['membre']['cotisation_fr_couleur'][2]!='' && $m_array['options']['demission']=='non' && $m_array['options']['exclu']=='non') {   // ----- Alerte
    				$texte_complémentaire_alerte=$m_array['membre']['cotisation_fr_couleur'][4];
    				$array_gestion_alerte[$m_array['membre']['cotisation_fr_couleur'][2]]['type']=$m_array['membre']['cotisation_fr_couleur'][3];
    				$array_gestion_alerte[$m_array['membre']['cotisation_fr_couleur'][2]]['texte']=$array_gestion_alerte[$m_array['membre']['cotisation_fr_couleur'][2]]['texte'].'<p><strong>Cotisation</strong> : '.$texte_complémentaire_alerte.'</p>';
    				$_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    				unset ($texte_complémentaire_alerte);
    			}
    		$m_array['membre']['abonnement']=$in['p_abonnement'];
    			if ($m_array['membre']['abonnement']<=4 && $m_array['membre']['abonnement']!=0 && $m_array['options']['demission']=='non' && $m_array['options']['exclu']=='non') {   // ----- Alerte
    				$array_gestion_alerte['bleu']['type']='alerte bleu';
    				$array_gestion_alerte['bleu']['texte']=$array_gestion_alerte['bleu']['texte'].'<p><strong>Abonnement</strong> : Le nombre d\'abonnement arrive à sa fin -> '.round($m_array['membre']['abonnement']).'</p>';
    				$_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    				unset($array_gestion_alerte);
    			}
    		// ---------- Moniteur
    		$m_array['membre']['moniteur']=$in['cours_moniteur_actif'];
    			if ($in['cours_moniteur_actif']=='oui') {   // ----- Moniteurs section(s)
    				$nbr_section ++;
    				$m_moniteur_section=$in['cours_moniteur_section'];
    				if ($m_moniteur_section_test!=$m_moniteur_section) {
    					if ($nbr_section==1) {
    						$m_array['membre']['moniteur_section']=$m_moniteur_section;
    					}
    					else { $m_array['membre']['moniteur_section']=$m_array['membre']['moniteur_section'].'-'.$m_moniteur_section; }
    					$m_moniteur_section_test=$m_moniteur_section;
    				}
     
    			}
    			else { $m_array['membre']['moniteur']='non'; $m_array['membre']['moniteur_section']='non'; }
    		// ---------- Date RC familiale - RGPD
    		if ($in['p_echeance']!='0000-00-00') { 
    			$m_array['rgpd']['rc_echeance']=date('Y-m-d', strtotime('+1 year',strtotime($in['p_echeance'])));
    			$m_array['rgpd']['rc_echeance_texte']=$rc_date_fr=date('d/m/Y', strtotime('+1 year',strtotime($in['p_echeance'])));
    			$m_array['rgpd']['rc_echeance_couleur']=CouleurDate(date('Y-m-d'),$in['p_echeance']);
    				if ($m_array['rgpd']['rc_echeance_couleur'][2]!='' && $m_array['options']['demission']=='non' && $m_array['options']['exclu']=='non') {   // ----- Alerte
    					$texte_complémentaire_alerte=$m_array['rgpd']['rc_echeance_couleur'][4];
    					$array_gestion_alerte[$m_array['rgpd']['rc_echeance_couleur'][2]]['type']=$m_array['rgpd']['rc_echeance_couleur'][3];
    					$array_gestion_alerte[$m_array['rgpd']['rc_echeance_couleur'][2]]['texte']=$array_gestion_alerte[$m_array['rgpd']['rc_echeance_couleur'][2]]['texte'].'<p><strong>RC Familiale</strong> : '.$texte_complémentaire_alerte.'</p>';
    					$_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    					unset ($texte_complémentaire_alerte);
    				}
    		}
    		else { $m_array['rgpd']['rc_echeance_texte']=$rc_date_fr='Inconnue'; $m_array['rgpd']['rc_echeance_couleur']='red'; }
     
    		// ---------- Dernier cours
    		$date_dernier_cours=RechercheDateDernierCours($conn,$in['id_prop']);
    		if ($date_dernier_cours!='0000-00-00') {
    			$m_array['membre']['dernier_cours']=$date_dernier_cours;
    			$m_array['membre']['dernier_cours_fr']=date('d/m/Y',strtotime($date_dernier_cours));
    		}
    		else { 
    			$m_array['membre']['dernier_cours']='0000-00-00';
    			$m_array['membre']['dernier_cours_fr']='Inconnu';
    		}
    		// ---------- Toutes les données du membre -> Avec le POST -> ex. pages : cours_jour.php, gestion membre, ...
    		if (isset($_GET['membre_tout'])) {
    			// ----- RC familiale
    			$m_array['rgpd']['rc_compagnie']=$in['compagnies_nom'];
    			$m_array['rgpd']['rc_police']=$in['p_police'];
    			// ----- Membre
    			$m_array['membre']['naissance']=$in['p_naissance'];
    			$m_array['rgpd']['adresse']=$in['p_adresse'];
    			$m_array['rgpd']['localite']=$in['full_postal'];
    			$m_array['rgpd']['mail']=$in['p_mail'];
    			$m_array['rgpd']['gsm']=$in['p_gsm'];
    			$m_array['rgpd']['tel']=$in['p_tel'];
    			$m_array['rgpd']['profession']=$in['p_profession'];
    			$m_array['rgpd']['langue']=$in['p_langue'];
    			$m_array['rgpd']['pays']=$in['pays'];
    			$m_array['membre']['inscription']=$in['p_inscription'];
    				$m_array['membre']['inscription_fr']=date('d/m/Y',strtotime($in['p_inscription']));
    			$m_array['membre']['modification']=$in['p_modif'];
    				$m_array['membre']['modification_fr']=date('d/m/Y',strtotime($in['p_modif']));
    			// ----- Options
    			$m_array['options']['a_un_chien']=$in['p_chien'];
    			$m_array['options']['anonyme']=$in['p_option1'];
     
    			$m_array['options']['concours']=$in['p_option4'];
    			// ----- Arrivée
    			$m_array['rgpd']['comment']=$in['p_comment'];
    			$m_array['rgpd']['comment_autre']=$in['p_autre'];
    		}
    	}
    	// ---------- Membre n'existe pas ou > dernier membre
    	if (!isset($m_array) || $_SESSION['s_mbr_actif_post']>$g_dernier_membre) {   // ----- Membre n'existe pas ou > dernier membre
    		$array_gestion_alerte['alerte']['type']='alerte';
    		$array_gestion_alerte['alerte']['texte']='<p><strong>ATTENTION</strong> : Le membre <strong>'.$_SESSION['s_mbr_actif_post'].'</strong> n\'existe pas (encore), le membre connecté est affiché !</p>';
    		$_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    		unset($array_gestion_alerte);
    	}
    // ---------------Affichage des alertes
    	if (isset($_SESSION['s_gestion_alerte'])) { $array_gestion_alerte=$_SESSION['s_gestion_alerte']; } // ----- Pourrait être supprimé, POUR TEST sans SESSION !
    	print "<div class=\"div_alerte\">";
    		if (isset($array_gestion_alerte)) {
    			foreach ($array_gestion_alerte AS $boucle1) {
    				$alerte_type=$boucle1['type'];
    				$alerte_texte=$boucle1['texte'];
     
    				print "<div class=\"$alerte_type\">";
    					print "<span class=\"closebtn\">&times;</span>"; 
    					print "$alerte_texte";
    				print "</div>";
    			}
    			unset($array_gestion_alerte);
    		}
    		else { print"&nbsp;"; }
    	print "</div>";
    	print "<div class=\"clear_div_0\">&nbsp;</div>";	// ----- Reset DIV
    Soyez indulgents avec mon code, je ne suis nullement un professionnel, j'estime n'être qu'un profane et fait cette interface à titre bénévole pour une asbl

    @jreaux62 : la session que j'ai notée est un exemple comme précisé, j'ai fait l'erreur de ne pas reprendre le membre démissionnaire -> concernait un membre dont la cotisation était dépassée ... désolé pour cette confusion

    NB : je fais en effet des UNSET pour libérer la mémoire car il y bien d'autres variables pour la page complète vu la quantité de données à afficher parfois

    Modification dans le code : // ----- Statuts : 0=OK - 1=A échéance - 2=Date dépassée - 3=Erreur date
    Ceci sert à faire fonctionner des pages existantes, ne sera plus utile par après

    @+
    DDA

  18. #18
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Citation Envoyé par ddaweb Voir le message
    ...rien à voir avec ma question originale : pourquoi le unset ne se fait pas ...
    "Quand le sage montre la lune,...."
    Il ne s'agit pas JUSTE de regarder fixement les bouts de codes contenant unset($_SESSION['s_gestion_alerte']) !

    $_SESSION['s_gestion_alerte'] est remplit à PLUSIEURS endroits :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    				$_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    En l'occurrence, on retrouve l'alerte "Cotisation" ligne 77 de ton dernier code, et mis en SESSION ligne 78.

    Il faut donc croire que tes unset($_SESSION['s_gestion_alerte']) étaient mal placés... et n’effaçaient pas ce qu'il faut, quand il faut.
    C'était donc bien un problème de LOGIQUE du code (chronologie des évènements, si tu préfères).

    Il est extrêmement rare qu'une fonction (PHP,...) ne fasse pas ce qu'elle est programmée pour, et prenne des "libertés" (un coup j'efface, un coup j'efface pas...)
    unset() fait son job, quand et où on lui demande. Point.

    Dans 100% des cas (à un epsilon près... ), le responsable, c'est... le CODEUR.

  19. #19
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Juste une petite question : est-ce qu'un unset($_SESSION['s_gestion_alerte']) peut être utilisé 2 fois dans une même page ?
    Je m'explique : je le fais avant la lecture des données pour être certain qu'elle ne soit plus là (ligne 9 ci-dessous) et ensuite dans les conditions du post #1, après la lecture des données, au moment où je voulais le faire (lignes 190 ou 196) !

    Comme j'ai activé le BU dans Notepad++, j'ai donc retrouvé le code qui devrait être l'original du moment où j'ai posé la question (BU du 12/11 à 20h33) : il n'est présent qu'à ces 2 moments là d'après la rechercher de NP++

    Que cela ne fonctionne pas correctement parce que j'avais fait une erreur, je peux l'admettre, mais à mon sens, il était placé au bon endroit au 2me unset !
    Je suis d'accord avec vous, je n'ai pas encore vu une fonction PHP qui ne fonctionnait pas correctement lorsqu'elle était bien utilisée et c'est bien pour cela que je suis venu ici

    Concernant le remplissage de la SESSION à plusieurs endroits : oui, il peut y avoir plusieurs alertes, elles peuvent même être de couleur différente -> cela fonctionne très bien pour l'affichage ... problème pour le UNSET ?

    Je suis venu ici pour comprendre le pourquoi et si je fais une erreur d'apprendre.

    Donc voici le code du BU, tout le code à la queue leu leu avec sa chronologie donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    session_start();
    date_default_timezone_set('Europe/Brussels');
    // =========================================================================
    // ========================= Initialisation de la page =====================
    // =========================================================================
     
    if (!isset($_SESSION['s_connect_login']) || $_SESSION['s_connect_login']!='ok') { header('Location: index.php?err=login'); } // ----- Pas de login correct
    else if ($_SESSION['s_connect_login']=='ok') { // ----- Login OK
    	unset($_SESSION['s_gestion_alerte']);   // ----- Suppression des alertes
    	// ==================== Initialisation temps de chargement d'une page + connexion SQL
    	function getmicrotime(){
    		list($usec, $sec) = explode(" ",microtime());
    		return ((float)$usec + (float)$sec);
    	}
    	$debut = getmicrotime();
    	include('connect.php'); // ----- Ouverture de la connexion SQL -> FIN en bas de page
     
    	// ==================== Fonctions pour la page 
    	function RechercheDateDernierCours($conn,$membre_id_cours) {
    		$date='0000-00-00';
    		$reponse_cours_date=mysqli_query($conn,"SELECT compta_dates_date 
    			FROM 00_compta_cours cours 
    				LEFT JOIN 00_compta_dates dates ON cours.compta_cours_date_id=dates.compta_dates_id
    			WHERE compta_cours_prop_id='$membre_id_cours'");
    		while ($in_date_cours=mysqli_fetch_array($reponse_cours_date)) { if (isset($in_date_cours['compta_dates_date'])) { $date=$in_date_cours['compta_dates_date']; } }
    		return ($date);
    	}
     
    	function CouleurDate($couleur_date_ref,$couleur_date_echeance) {
    		$couleur='green';
    		$statuts=0;
    		$alerte='';
    		$type='';
    		$texte='';
    		if ($couleur_date_echeance=='0000-00-00') { $couleur_date_echeance='1970-01-01'; }
    		$couleur_date_ref_14_plus=date('Y-m-d', strtotime('+14 days',strtotime($couleur_date_ref)));
    		$couleur_date_ref_14_moins=date('Y-m-d', strtotime('-14 days',strtotime($couleur_date_ref)));
    		$couleur_date_echeance_1_an=date('Y-m-d', strtotime('+1 year',strtotime($couleur_date_echeance)));
    		if ($couleur_date_echeance_1_an>=$couleur_date_ref_14_moins && $couleur_date_echeance_1_an<=$couleur_date_ref_14_plus) { $couleur='#FF8000'; $statuts=1; $alerte='alerte orange'; $type='orange'; $texte='Arrive à échéance'; } // ----- échéance
    		else if ($couleur_date_echeance_1_an<$couleur_date_ref_14_plus) { $couleur='red'; $statuts=2; $alerte='alerte'; $type='alerte'; $texte='La date est dépassée'; } // ----- Date dépassée
    		else if ($couleur_date_echeance>$couleur_date_ref) { $couleur='#084B8A'; $statuts=3; $alerte='alerte bleu'; $type='bleu'; $texte="La date introduite n'est pas correcte"; } // ----- Erreur dans la date 
    		// ----- Statuts : 0=OK - 1=A échéance - 2=Date dépassée - 3=Erreur date
    		$array=array($couleur,$statuts,$type,$alerte,$texte);
    		return ($array);
    	}
     
    	// ==================== Recherche du dernier PROP et CHIEN
    		$result = mysqli_query($conn,"SELECT MAX(id_prop) FROM 02_prop");
    		$row = mysqli_fetch_row($result);
    		$g_dernier_prop = $row[0];
     
    		$result = mysqli_query($conn,"SELECT MAX(id_chien) FROM 03_chien");
    		$row = mysqli_fetch_row($result);
    		$g_dernier_chien = $row[0];
     
    	// ==================== Les requêtes SQL et POST
    	// --------------- Une requête SQL est envoyée
    	if (isset($_GET['sql'])) {
     
    	}
    	// --------------- Une page est envoyée + page/défaut
    	$pg='accueil';
    	$rep='';
    	if (isset($_GET['pg'])) { 
    		$pg=$_GET['pg']; 
    		$rep=$_GET['rep']; 
    	}
    	if ($rep!='') { $page='./pages/'.$rep.'/'.$pg.'.php'; }
    		else { $page='./pages/'.$pg.'.php'; }
    	if (!file_exists($page)) { $page='./pages/erreur_404.php'; }   // ----- vérification existance de la page, sinon : page d'erreur
    	// --------------- Un nouveau membre actif est envoyé
    	if (isset($_POST['mbr_id'])) {	
    		$mbr_actif=$_POST['mbr_id'];
    		$_SESSION['s_mbr_actif']=$mbr_actif;
    	}
    	if (isset($_GET['mbr_id'])) {	
    		$mbr_actif=$_GET['mbr_id'];
    		$_SESSION['s_mbr_actif']=$mbr_actif;
    	}
     
    	// ==================== Données utiles du membre actif : DOIT RESTE JUSTE AVANT L'AFFICHAGE DE LA PAGE
    	// --------------- Données du membre
    	$m_moniteur_section_test='non';
    	$s_mbr_actif=$_SESSION['s_mbr_actif'];
    	$reponse=mysqli_query($conn,"SELECT *
    		FROM 02_prop prop
    			LEFT JOIN  (SELECT * FROM 04_cours_moniteur WHERE cours_moniteur_actif='oui') moniteur ON prop.id_prop=moniteur.cours_moniteur_prop_id 
    			LEFT JOIN 02_prop_compagnies rc ON prop.p_compagnie=rc.compagnies_id 
    			LEFT JOIN 02_prop_postal postal ON prop.p_postal=postal.id_postal 
    		WHERE id_prop='$s_mbr_actif'");
    	while ($in=mysqli_fetch_array($reponse)) {
    		// ---------- Données membre
    		$m_array['membre']['id']=$in['id_prop'];
    		$m_array['membre']['prenom']=$in['p_prenom'];
    		$m_array['membre']['nom']=$in['p_nom'];
    		$m_array['membre']['naissance']=$in['p_naissance'];
    			$m_array['membre']['naissance_fr']=date('d/m/Y',strtotime($in['p_naissance']));
    		$m_array['membre']['type']=$in['p_type'];
    		$m_array['membre']['cotisation']=date('Y-m-d', strtotime('+1 year',strtotime($in['p_reinscription'])));
    			$m_array['membre']['cotisation_fr']=date('d/m/Y', strtotime('+1 year',strtotime($in['p_reinscription'])));
    			$m_array['membre']['cotisation_fr_couleur']=CouleurDate(date('Y-m-d'),$in['p_reinscription']);
    			if ($m_array['membre']['cotisation_fr_couleur'][2]!='') {   // ----- Alerte
    				$texte_complémentaire_alerte=$m_array['membre']['cotisation_fr_couleur'][4];
    				$array_gestion_alerte[$m_array['membre']['cotisation_fr_couleur'][2]]['type']=$m_array['membre']['cotisation_fr_couleur'][3];
    				$array_gestion_alerte[$m_array['membre']['cotisation_fr_couleur'][2]]['texte']=$array_gestion_alerte[$m_array['membre']['cotisation_fr_couleur'][2]]['texte'].'<p><strong>Cotisation</strong> : '.$texte_complémentaire_alerte.'</p>';
    				$_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    				unset ($texte_complémentaire_alerte);
    			}
    		$m_array['membre']['abonnement']=$in['p_abonnement'];
    		if ($m_array['membre']['abonnement']<=4 && $m_array['membre']['abonnement']!=0) {   // ----- Alerte
    			$array_gestion_alerte['bleu']['type']='alerte bleu';
    			$array_gestion_alerte['bleu']['texte']=$array_gestion_alerte['bleu']['texte'].'<p><strong>Abonnement</strong> : Le nombre d\'abonnement arrive à sa fin -> '.round($m_array['membre']['abonnement']).'</p>';
    			$_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    		}
    		// ---------- Options
    		$m_array['options']['carte_membre']=$in['p_carte_membre'];
    		$m_array['options']['demission']=$in['p_option2'];
    		$m_array['options']['exclu']=$in['p_option3'];
    		// ---------- Moniteur
    		$m_array['membre']['moniteur']=$in['cours_moniteur_actif'];
    			if ($in['cours_moniteur_actif']=='oui') {   // ----- Moniteurs section(s)
    				$nbr_section ++;
    				$m_moniteur_section=$in['cours_moniteur_section'];
    				if ($cours_moniteur_section_test!=$m_moniteur_section) {
    					if ($nbr_section==1) {
    						$m_array['membre']['moniteur_section']=$m_moniteur_section;
    					}
    					else { $m_array['membre']['moniteur_section']=$m_array['membre']['moniteur_section'].'-'.$m_moniteur_section; }
    					$cours_moniteur_section_test=$m_moniteur_section;
    				}
     
    			}
    			else { $m_array['membre']['moniteur']='non'; $m_array['membre']['moniteur_section']='non'; }
    		// ---------- Date RC familiale - RGPD
    		if ($in['p_echeance']!='0000-00-00') { 
    			$m_array['rgpd']['rc_echeance']=date('Y-m-d', strtotime('+1 year',strtotime($in['p_echeance'])));
    			$m_array['rgpd']['rc_echeance_texte']=$rc_date_fr=date('d/m/Y', strtotime('+1 year',strtotime($in['p_echeance'])));
    			$m_array['rgpd']['rc_echeance_couleur']=CouleurDate(date('Y-m-d'),$in['p_echeance']);
    			if ($m_array['rgpd']['rc_echeance_couleur'][2]!='') {   // ----- Alerte
    				$texte_complémentaire_alerte=$m_array['rgpd']['rc_echeance_couleur'][4];
    				$array_gestion_alerte[$m_array['rgpd']['rc_echeance_couleur'][2]]['type']=$m_array['rgpd']['rc_echeance_couleur'][3];
    				$array_gestion_alerte[$m_array['rgpd']['rc_echeance_couleur'][2]]['texte']=$array_gestion_alerte[$m_array['rgpd']['rc_echeance_couleur'][2]]['texte'].'<p><strong>RC Familiale</strong> : '.$texte_complémentaire_alerte.'</p>';
    				$_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    				unset ($texte_complémentaire_alerte);
    			}
    		}
    		else { $m_array['rgpd']['rc_echeance_texte']=$rc_date_fr='Inconnue'; $m_array['rgpd']['rc_echeance_couleur']='red'; }
    		$m_array['rgpd']['cst']=$in['p_cst'];   // ----- COVID SAFE TICKET
    		// ---------- Dernier cours
    		$date_dernier_cours=RechercheDateDernierCours($conn,$in['id_prop']);
    		if ($date_dernier_cours!='0000-00-00') {
    			$m_array['membre']['dernier_cours']=$date_dernier_cours;
    			$m_array['membre']['dernier_cours_fr']=date('d/m/Y',strtotime($date_dernier_cours));
    		}
    		else { 
    			$m_array['membre']['dernier_cours']='0000-00-00';
    			$m_array['membre']['dernier_cours_fr']='Inconnu';
    		}
    		// ---------- Toutes les données du membre -> Avec le POST -> ex. pages : cours_jour.php, gestion membre, ...
    		if (isset($_GET['membre_tout'])) {
    			// ----- RC familiale
    			$m_array['rgpd']['rc_compagnie']=$in['compagnies_nom'];
    			$m_array['rgpd']['rc_police']=$in['p_police'];
    			// ----- Membre
    			$m_array['membre']['naissance']=$in['p_naissance'];
    			$m_array['rgpd']['adresse']=$in['p_adresse'];
    			$m_array['rgpd']['localite']=$in['full_postal'];
    			$m_array['rgpd']['mail']=$in['p_mail'];
    			$m_array['rgpd']['gsm']=$in['p_gsm'];
    			$m_array['rgpd']['tel']=$in['p_tel'];
    			$m_array['rgpd']['profession']=$in['p_profession'];
    			$m_array['rgpd']['langue']=$in['p_langue'];
    			$m_array['rgpd']['pays']=$in['pays'];
    			$m_array['membre']['inscription']=$in['p_inscription'];
    				$m_array['membre']['inscription_fr']=date('d/m/Y',strtotime($in['p_inscription']));
    			$m_array['membre']['modification']=$in['p_modif'];
    				$m_array['membre']['modification_fr']=date('d/m/Y',strtotime($in['p_modif']));
    			// ----- Options
    			$m_array['options']['a_un_chien']=$in['p_chien'];
    			$m_array['options']['anonyme']=$in['p_option1'];
     
    			$m_array['options']['concours']=$in['p_option4'];
    			// ----- Arrivée
    			$m_array['rgpd']['comment']=$in['p_comment'];
    			$m_array['rgpd']['comment_autre']=$in['p_autre'];
    		}
    	}
    	// ---------- Gestion des alertes PRIORITAIRES
    	if ($m_array['options']['exclu']=='oui') {
    		unset($_SESSION['s_gestion_alerte']);   // ----- Suppression des alertes précédentes
    		$array_gestion_alerte['alerte']['type']='alerte';
    		$array_gestion_alerte['alerte']['texte']='<p><strong>ATTENTION</strong> : Ce membre a été exclu du club !</p>';
    		$_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    	}
    	else if ($m_array['options']['demission']=='oui') {
    		unset($_SESSION['s_gestion_alerte']);   // ----- Suppression des alertes précédentes
    		$array_gestion_alerte['orange']['type']='alerte orange';
    		$array_gestion_alerte['orange']['texte']='<p><strong>ATTENTION</strong> : Ce membre a démissionné du club !</p>';
    		$_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    	}
    	if ($m_array['rgpd']['cst']=='non') {
    		$array_gestion_alerte['alerte']['type']='alerte';
    		$array_gestion_alerte['alerte']['texte']=$array_gestion_alerte['alerte']['texte'].'<p><strong>Covid Safe Ticket</strong> : Le membre n\'a pas encore présenté son CST !</p>';
    		$_SESSION['s_gestion_alerte']=$array_gestion_alerte;
    	}
    }
    Je passe la lecture des alertes, elle n'est pas en cause.

    Je passe d'abord par un Login, cet accès est limité à certaines personnes et avec certains droits.
    Le code est fort documenté pour celui qui reprendra cette base de données qui a très mal grandie avec le club (trop de changement de fonctionnement) : je compte lui remettre quelque chose de plus propre, sans les multiples patch qui ont été appliqués avec les années et les quelques bugs que j'ai constaté.
    Je suis également occupé de fusionner plusieurs tables de comptabilité en 1 seule, les multiples tables rendent sa gestion trop complexe : après analyse, j'ai trouvé une structure de table qui le permet, il faut juste encore que j'affine le script de conversion sans perte de données -> sur 10 ans j'ai quelques Euros de différence
    Je me suis fixé un délai d'un an pour tout refaire proprement avec des fonctionnalités activables ou non afin d'anticiper certains changement de fonctionnement comme le club aime bien faire ... grrrrr

    NB :
    - lignes 103 à 107, j'ai supprimé les accents entre-temps
    - des emplacements de code sont prévus, mais pas encore fait

    @+
    DDA

  20. #20
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    Je ne sais pas si ça peut vous aider à mieux comprendre mais faire un récap de quand les alertes doivent être affichées ou non peut aider.
    De ce que vous souhaitez, nous ne savons rien mais voici le listing des conditions qui activent les alertes.

    1. if ($m_array['membre']['cotisation_fr_couleur'][2]!='')
    2. if ($m_array['membre']['abonnement']<=4 && $m_array['membre']['abonnement']!=0)
    3. if ($in['p_echeance']!='0000-00-00' && $m_array['rgpd']['rc_echeance_couleur'][2]!='')
    4. if ($m_array['options']['exclu']=='oui') {} else if ($m_array['options']['demission']=='oui') {}
    5. if ($m_array['rgpd']['cst']=='non')


    Je me répète mais vous faites plein d'unset() qui ne servent à rien d'un point de vue logique.
    Vous déclarez plein de variables que vous "unsettez" 3 lignes plus loin. Ca libère (peut-être) un chouilla de mémoire mais sinon ça n'a aucun impact.

    Le plus simple si vous êtes perdu dans votre code, c'est de faire plein d'echo() à différents niveaux du code pour contrôler exactement par où "ça passe".
    Dans ce cas-ci, vous pourriez commencer par faire un echo après chaque assignation à la session :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $_SESSION['s_gestion_alerte'] = $array_gestion_alerte;
    echo "<p>set alert car : m_array['options']['exclu'] = OUI</p>";

    De cette façon vous verrez toutes les assignations, et si vous le souhaitez vous pourrez faire de même après chaque unset()

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/01/2004, 11h14
  2. [FP]Writeln ne fonctionne pas !
    Par néo333 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 01/11/2003, 23h47
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo