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 :

Destruction variable $_POST['nom']


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Points : 97
    Points
    97
    Par défaut Destruction variable $_POST['nom']
    Bonjour à vous,


    Dans un formulaire, j'ai plusieurs boutons de validation.
    L'un ajoute un enregistrement, l'autre supprime un enregistrement, un autre permet de voir un enregistrement et un dernier permet de modifier un enregistrement.

    Lorsque j'ajoute un enregistrement cela ouvre un nouveau formulaire (dans le même script) puis j'effectue les contrôles de validité des champs.

    Tant qu'il subsiste une erreur, le formulaire est réaffiché avec ses valeurs et un message d'erreur.
    Dès qu'il n'existe plus aucune erreur, l'enregistrement est effectué et on retourne au menu initial.

    Problème. Mon script réaffiche le formulaire. Cela est due au fait que la variable POST['nom'] qui me servait à réafficher le formulaire n'est pas détruite.


    Je voudrait donc la détruire. J'ai essayé unset($_POST) mais cela ne me convient pas car il existe des variables du tableau POST que je souhaite conserver.

    J'ai essayé unset($_POST['nom']) mais cela ne fonctionne pas non plus.

    HELP : pouvez vous me dire comment on détruit une variable précise dans la table $_POST.

    Merci à vous.
    Donnes un poisson à un homme tu le nourris un jour, apprends lui à pécher tu le nourris toute sa vie.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme tu l'a fais :
    Tu peux t'en assurer en faisant un echo avant et apres, la variable ne sera plus défini après.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Personnellement, je ne vois aucun intérêt de détruire un élément contenu dans $_POST.

    Si le retour vers le menu initial tient sur le fait qu'il n'y pas eu d'erreurs, et bien c'est qu'on a moyen de savoir s'il y a eu erreur ou pas, non ?
    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
     
    $erreur = false;
     
    if (une_verification == false) {
        $erreur = true;
    }
     
    //
    if ($erreur == false) {
        // Mise à jour
    }
     
    ... etc, etc ...
     
    // Partie HTML
    if (empty($_POST) || $erreur == true) {
        // Formulaire (par défaut ou une erreur)
    }
    else {
        // Mise à jour effectuée
    }
    De même que si l'enregistrement à eu lieu, c'est qu'on a aussi moyen de le savoir, ou de s'appuyer sur cette condition en créant une variable par exemple.
    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
     
    $mise_a_jour = false;
    $erreur = false;
     
    if (une_verification == false) {
        $erreur = true;
    }
     
    //
    if ($erreur == false) {
        // Mise à jour
        $mise_a_jour = true;
    }
     
    ... etc, etc ...
     
    // Partie HTML
    if ($mise_a_jour === true) {
        // Mise à jour effectuée
    }
    else {
        // Formulaire (par défaut)
    }
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  4. #4
    Membre régulier Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Points : 97
    Points
    97
    Par défaut structure du script
    En fait voici ma structure du script. Il s'agit peut être d'une erreur de structure.
    Avertissement: pour des raisons de lisibilité il ne s'agit pas de code PHP ci dessous mais une structure. Ainsi par exemple je sais que endif n'existe pas en PHP mais je l'ai mis ici pour marquer la fin du bloc if

    En cas d'erreur, le formulaire est réaffiché avec toutes les valeurs déjà renseignées. Pour pouvoir réafficher ces valeurs je les passe en input hidden.

    Il en est de même pour la valeur l'input ajouter du form 1. Sans cela, le réaffichage en cas d'erreur ne s'effectue pas car le programme reste sur le form1 menu général. C'est pourquoi lorsque il n'y plus d'erreur, je procède à l'enregistrement et pour empécher le réaffichage du formulaire, je souhaite détruire la valeur POST ajouter, forçant ainsi l'arret sur le form 1 menu.

    Que pensez vous de cette structure de script ? Où est l'erreur ?

    Merci par avance.



    ---------------------------------------------------------
    form 1 menu general action={$_SERVER['PHP_SELF']}
    input ajouter
    input modifier
    input supprimer
    \form1

    form 2 ajouter action={$_SERVER['PHP_SELF']}
    formulaire avec plusieurs inputs text, textarea, etc
    input submit valider ajouter
    \form2

    form 3 modifier action={$_SERVER['PHP_SELF']}
    formulaire avec plusieurs inputs text, textarea, etc
    input submit valider modifier
    \form3

    form 4 supprimer action={$_SERVER['PHP_SELF']}
    formulaire avec plusieurs inputs text, textarea, etc
    input submit valider supprimer
    \form4

    validation du form 2 ajouter
    if isset $_POST[' valider ajouter']
    if .......
    instructions de recherches des erreurs. S'il y a des erreurs affichage d'un message d'erreur.
    else
    enregistrement
    endif
    endif

    validation du form 2 modifier
    if
    .........
    endif

    validation du form 2 supprimer
    if
    .....
    endif

    --------------------------------------------------
    Donnes un poisson à un homme tu le nourris un jour, apprends lui à pécher tu le nourris toute sa vie.

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Si le déroulement du script se passe comme tu l'as décris, et bien là il y a un truc qui me dérange un peu, c'est que tu ferais en dernier ce qui serait mieux à faire en 1er. (ou dit autrement : Faire en dernier ce qui est fait en 1er).

    Tu génèrerais en 1er l'interface (formulaire) après les traitements, ce qui n'est pas pratique, voir dans certains cas impossible à obtenir certaines infos au bon moment.
    Admettons (par exemple) qu'il y a un nouvel enregistrement à faire, et bien vu qu'il se fera en dernier, du coup, il sera impossible de l'afficher (trop tard).

    Aussi, quand on créer une page, on a tout le loisir de faire en sorte de s'aider, ou de se faciliter la tâche pour réaliser ce qu'il doit être fait, comme créer des petits truc en plus (variables, etc ...).

    Donc si je reprends le déroulement que j'ai mis au post précédent, on peu envisager de faire comme :
    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
     
    <?php
    $action = (isset($_POST['action']) && !empty($_POST['action'])) ? $_POST['action']: 'defaut';
     
    // ----- TRAITEMENT (formulaires) -----
    switch ($action) {
        case 'insertion' : // Traitements pour insertion
        case 'miseajour' :  // Traitements pour mise à jour
            // Vérifications des données
            $erreur = false;
            ... etc ...
     
            if ($erreur === true) {
                // Une erreur a eu lieu
                $action = ($action === 'insertion') ? 'form_insert': 'form_update';
            }
            else {
                // Pas d'erreur : On met à jour
                if ($action === 'insertion') {
                    // Requête INSERT INTO
                }
                else if ($action === 'miseajour') {
                    // Requête UPDATE
                }
                // Qu'il est eu une insertion ou mise à jour on propose de mettre à jour
                $action = 'form_update';
            }
        break;
        case 'suppression' :  // Traitements pour suppression
        break;
    }
     
     
    // On initialise les données par défaut
    // Sinon on récupère les données de POST si elles existent
    // Ou alors on récupère les données de la Bdd pour une mise à jours
    $formu_action = 'insertion';
    $formu_valider = 'Nouveau';
    // Toutes les autre données
    $donnees['nom'] = '';
    $donnees['prenom'] = '';
     
    if (isset($_POST) && !empty($_POST) && ($action === 'form_insert' || $action === 'form_update')) {
        // Formulaire insertion/de mise à jour (Une erreur est survenue)
        if ($action === 'form_update') {
            $formu_action = 'miseajour';
            $formu_valider = 'Actualiser';
        }
        // Toutes les autre données
        $donnees['nom'] = $_POST['nom'];
        $donnees['prenom'] = $_POST['prenom'];
    }
    else if (... la condition qui permet de récupérer les données dans la Bdd ...) {
        // On récuprère les données de la Bdd (mise à jour)
        // Requête (... mysql_query ...)
        $donnees = mysql_fetch_array();
    }
     
     
    // ----- INTERFACE (formulaires) -----
    ?>
    <form name="<?php echo $formu_action; ?>" action="formulaire.php" method="post">
        <input type="text" name="nom" value="<?php echo $donnees['nom'] ?>" />
        ... etc ...
     
        <input type="hidden" name="action" value="<?php echo $formu_action; ?>" />
     <input type="submit" name="valider" value="<?php echo $formu_valider; ?>" />
    </form>
    Tout ceci n'est qu'un exemple, donc pas sûr que cela correspond à ce que tu fait, mais c'est pour faire voir qu'on peu faire en sorte de s'appuyer sur tout autre chose.
    En tout cas, détruire un élément dans POST me semble vraiment pas souhaitable car en règle général on en a besoin.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Discussions similaires

  1. destruction des variables $_POST
    Par young077 dans le forum Langage
    Réponses: 4
    Dernier message: 28/05/2010, 19h17
  2. Réponses: 1
    Dernier message: 15/11/2006, 01h49
  3. donner la valeur d'une variable comme nom de table
    Par cladsam dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/10/2005, 15h16
  4. [curseurs] utiliser une variable comme nom de champ
    Par Christian31 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2005, 14h12
  5. [XSL] utiliser une variable pour nom d'élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 07/09/2004, 13h58

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