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 :

Utiliser <input type="hidden"> pour stocker des données


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Juin 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2021
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Utiliser <input type="hidden"> pour stocker des données
    Bonsoir,

    Je viens vers vous car j'aimerais stocker les données d'un formulaire pour ne pas les perdre après soumission. Cependant je ne peux ni utiliser les cookies ni les sessions. J'ai vu que l'utilisation d'un input type hidden peux me permettre de faire la même chose mais je ne comprends pas comment faire. Je souhaite faire un formulaire qui affiche la liste des personnes qui s'inscrive mais quand je soumets le formulaire les infos précédemment saisie s'efface . J'ai essayé de crée un tableau vide et ensuite de stocker les données dedans mais rien à faire cela ne fonctionne pas. Cela fait plusieurs jours que j’essaie de trouver la solution je suis désespéré PITIÉ aidez-moi svp. Voici mon code:

    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
    <?php
    $donee=[];
    ?>
    <!DOCTYPE html>
    <html lang="fr">
        <head>
            <title>Titre</title>
            <link rel="stylesheet" href="style.css">
     
        </head>
        <body>
            <h1>Inscription</h1>
     
            <form method="post">
                <div id="champ_nom">
                    <label for="name">Nom :</label><input type="text" name="name" size="10px" required>
                </div> 
                <div id="champ_prenom">
                    <label for="prenom">Prenom :</label><input type="text" name="prenom" size="10px" required>
                </div>
     
                    <label for="mail">e-mail :</label><div id="c"><input type="email" name="mail" required></div>
     
                <div id="mdp">
                    <label for="mdp">Mot de passe :</label><input type="password" name="mdp" size="10px" required>
                </div>
                <button type="submit" name="env">Envoyer</button></br>
                <p>Table des utilisateurs</p></br>
     
                <?php
     
                    if(isset($_POST["env"])){
                        if(!empty($_POST["name"]) && !empty($_POST["prenom"]) && !empty($_POST["mail"]) && !empty($_POST["mdp"])){
                            array_push($donee,['nom'=>$_POST['name'],'prenom'=>$_POST['prenom'],'mail'=>$_POST['mail'],'mdp'=>$_POST['mdp']]);
                        }
     
                    }
                    foreach($donee as $i){
                        foreach($i as $cle => $valeur){
                            echo("<input type = 'hidden' name= '$cle' value= '$valeur>");
                            echo("$cle: $valeur<br>");
                        }
                    }
     
     
                ?>
            </form>
        </body>
     
     
    </html>

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    je ne comprends pas trop de quelles données vous parlez. dans votre code je vois juste un formulaire d'inscription donc les étapes devrait être les suivantes :
    1. saisie par l'utilisateur
    2. envoi au serveur
    3. coté serveur, le code php enregistre ces données dans une base de données

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    je ne peux ni utiliser les cookies ni les sessions
    Pourquoi ça ?

    if(!empty($_POST["name"]) && !empty($_POST["prenom"]) && !empty($_POST["mail"]) && !empty($_POST["mdp"])){
    empty() est un faux-ami, il vaut mieux tester la présence des éléments avec isset()

    Concernant ton problème, la solution classique consiste à générer un tableau de valeurs de la forme :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <input type="hidden" name="users[0][nom]" value="Nom saisi en 1er">
    <input type="hidden" name="users[0][prenom]" value="Prénom saisi en 1er">
    ...
    <input type="hidden" name="users[1][nom]" value="Nom saisi en 2e">
    ...

    Script :

    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
    <?php
     
    // Initialisation de $users
    // Contient les utilisateurs précédemment soumis
    if (isset($_POST['users'])) {
        $users = $_POST['users'];
    } else {
        $users = [];
    }
     
    // Traitement du formulaire
    if (isset($_POST['nom'], $_POST['prenom'], $_POST['mail'], $_POST['mdp'])) {
        // Ajoute l'utilisateur soumis au tableau des utilisateurs
        $users[] = [
            'nom' => $_POST['nom'], 'prenom' => $_POST['prenom'],
            'mail' => $_POST['mail'], 'mdp' => $_POST['mdp'],
        ];
    }
     
    ?>
    <form method="post">
     
        <input type="text" name="nom" placeholder="Nom">
        <input type="text" name="prenom" placeholder="Prénom">
        <input type="email" name="mail" placeholder="E-mail">
        <input type="password" name="mdp" placeholder="Mot de passe">
        <button type="submit">Envoyer</button>
     
        <?php foreach ($users as $i => $user): ?>
            <input type="hidden" name="users[<?= $i ?>][nom]" value="<?= htmlspecialchars($user['nom']) ?>">
            <input type="hidden" name="users[<?= $i ?>][prenom]" value="<?= htmlspecialchars($user['prenom']) ?>">
            <input type="hidden" name="users[<?= $i ?>][mail]" value="<?= htmlspecialchars($user['mail']) ?>">
            <input type="hidden" name="users[<?= $i ?>][mdp]" value="<?= htmlspecialchars($user['mdp']) ?>">
        <?php endforeach ?>
     
        <p>Table des utilisateurs</p>
        <?php if (empty($users)): ?>
            <p>Pas encore d'utilisateurs soumis !</p>
        <?php else: ?>
            <table>
                <?php foreach ($users as $i => $user): ?>
                    <tr>
                        <td><?= $i ?></td>
                        <td><?= htmlspecialchars($user['nom']) ?></td>
                        <td><?= htmlspecialchars($user['prennom']) ?></td>
                        <td><?= htmlspecialchars($user['mail']) ?></td>
                        <td><?= htmlspecialchars($user['mdp']) ?></td>
                    </tr>
                <?php endforeach ?>
            </table>
        <?php endif ?>
     
    </form>
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  4. #4
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Bonjour

    Selon le tout premier post, il y a donc en fin de code PHP ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach($donee as $i){    foreach($i as $cle => $valeur){
            echo("<input type = 'hidden' name= '$cle' value= '$valeur>");
            echo("$cle: $valeur<br>");
        }
    }
    Ce qui veut donc dire que le mot de passe est affiché en clair dans la page html; gloups.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  5. #5
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Juin 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2021
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Séb. Voir le message
    (...)
    Je ne peux pas utiliser les cookies et les sessions car le professeur veux que l'on utilise input type="hidden.

    Je ne comprends pas en quoi le type hidden permet de stocker de l'information, pouvez-vous m'expliquer svp ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Juin 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2021
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par cavo789 Voir le message
    (...)
    Effectivement, mais c'est juste un test pour vérifier le fonctionnement du code.

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Je ne comprends pas en quoi le type hidden permet de stocker de l'information, pouvez-vous m'expliquer svp ?
    Les champs HIDDEN servent à cela => Stocker de l'info sans que cela soit visible par l'utilisateur
    https://developer.mozilla.org/en-US/...t/input/hidden
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  8. #8
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Surtout ne jamais rien y mettre d'important (excepté un token de validation p.ex).

    Ce qu'il faut comprendre c'est que ce champ est caché oui mais il suffit de visualiser le code html pour en prendre connaissance et il est aisé de modifier une valeur d'un tel champ.

    On peut donc "hacker" ton formulaire, c'est à la portée d'un enfant (ou presque).
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  9. #9
    Invité
    Invité(e)
    Par défaut
    stl,

    t'as la réponse dans ta question !

    tu fais encore du POST et du FORM ?

    lorsque tu POST tes données sont récupérables...par un $mestableauxpost = file_gets_content('php://input') ; puis
    tu explode 2 fois entre 2 tu auras un foreach car tu as des caractères séparateur & et le =
    pour aller un poil plus loin...tu faire du Balancing...un func php avec une entrée $mestableauxpostpuis
    en appel de la func en sortie tu fais comme tu veux...une foreach pour des variables session avec
    scope différent à une simple variable dont tu ne retrouvera pas la clé/valeur atomisé dans ton tmp session.

    bonne chance
    Dernière modification par ProgElecT ; 30/05/2023 à 09h20. Motif: Pour le code sur une ligne ou une incrustation,[C=langage] ici votre code [/C]

Discussions similaires

  1. Des chercheurs utilisent des bactéries pour stocker des données
    Par Katleen Erna dans le forum Actualités
    Réponses: 45
    Dernier message: 19/01/2011, 03h37
  2. Réponses: 2
    Dernier message: 12/05/2010, 13h16
  3. serveur gratuit pour stocker des données
    Par unix27 dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 21/03/2007, 11h57
  4. Type PostgreSQL pour stocker des grands nombres
    Par K-Kaï dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/06/2006, 20h26
  5. Meilleur type table pour stocker des valeurs numérique
    Par vodevil dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/04/2006, 20h42

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