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 :

[Tableaux] Enregistrer résultat de formulaire dans un fichier


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut [Tableaux] Enregistrer résultat de formulaire dans un fichier
    Bonjour,

    Je suis débutant (je préfère prévenir !!) Alors mon problème doit être tout simple mais ça fait une semaine que je planche dessus sans comprendre et trouver.

    J'ai cherché sur ce forum et les tutoriels un certain nombre d'infos composant mon code... Je cherche à avoir un formulaire avec 3 boutons radios dont je veux mettre le résultat dans un fichier (fichier car je ne connais pas encore le reste : sessions...).

    Quand je clique sur un bouton et que j'envoi le formulaire la valeur dans le fichier passe de 0 à 1, mais jamais plus... dès que je sélectionne une autre réponse, la première repasse à 0.

    Je ne comprends pas pourquoi, 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
    <?php
    $fichier = 'sondage.txt';
    $ouvrir = fopen($fichier, "w+b");
     
       $tab = file($fichier);
     
    if (isset($_POST['radio'])) {
        $champ_selectionne = $_POST['radio'];
    } else {
        $champ_selectionne = '';
    }
     
        if ($champ_selectionne == 'Option 1') {
           $tab[0] = $aa;
           fwrite($ouvrir, $tab[0] = ++$aa);
           echo "Le tab 0 est incrémenté de 1";
        }
     
        if ($champ_selectionne == 'Option 2') {
           $tab[1] = $aa;
           fwrite($ouvrir, $tab[1] = ++$aa);
           echo "Le tab 1 est incrémenté de 1";
        }
     
        if ($champ_selectionne == 'Option 3') {
           $tab[2] = $aa;
           fwrite($ouvrir, $tab[2] = ++$aa);
           echo "Le tab 2 est incrémenté de 1";
        }
     
    echo '<pre>';
    print_r($tab);
    echo '</pre>';
    echo "<br>c'est l'$champ_selectionne qui a ete choisie";
     
    fclose($ouvrir);
    ?>
     
    <form method="POST">
        <input type="radio" name="radio" value="Option 1"/>Option 1<br>
        <input type="radio" name="radio" value="Option 2"/>Option 2<br>
        <input type="radio" name="radio" value="Option 3"/>Option 3<br>
        <input type="submit" value="OK">
    </form>

  2. #2
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    $aa n'est pas déclaré.
    Tu as de la chance (ou pas), en php, il a une valeur par défaut qui est 0, mais c'est nettement mieux de le préciser.

    Je crois que ton problème vient de fwrite. En gros, tu as l'air de considérer que $tab contient chaque ligne de ton fichier et que si tu fait un fwrite de cette ligne, elle se mets a jours, ca n'est pas comme ca que ca marche.
    Quand tu fait ton fwrite, ton fichier est mis a jour avec le contenu que tu lui envoie, le reste est écrasé. Bref, tente de mettre toutes les lignes de $tab dans ton tableau et pas seulement $tab[x].

  3. #3
    Membre éclairé Avatar de The Nux
    Profil pro
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Par défaut
    Citation Envoyé par 12monkeys
    Bonjour,

    Je suis débutant (je préfère prévenir !!) Alors mon problème doit être tout simple mais ça fait une semaine que je planche dessus sans comprendre et trouver.

    J'ai cherché sur ce forum et les tutoriels un certain nombre d'infos composant mon code... Je cherche à avoir un formulaire avec 3 boutons radios dont je veux mettre le résultat dans un fichier (fichier car je ne connais pas encore le reste : sessions...).

    Quand je clique sur un bouton et que j'envoi le formulaire la valeur dans le fichier passe de 0 à 1, mais jamais plus... dès que je sélectionne une autre réponse, la première repasse à 0.

    Je ne comprends pas pourquoi, 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
    <?php
    $fichier = 'sondage.txt';
    $ouvrir = fopen($fichier, "w+b");
     
       $tab = file($fichier);
     
    if (isset($_POST['radio'])) {
        $champ_selectionne = $_POST['radio'];
    } else {
        $champ_selectionne = '';
    }
     
        if ($champ_selectionne == 'Option 1') {
           $tab[0] = $aa;
           fwrite($ouvrir, $tab[0] = ++$aa);
           echo "Le tab 0 est incrémenté de 1";
        }
     
        if ($champ_selectionne == 'Option 2') {
           $tab[1] = $aa;
           fwrite($ouvrir, $tab[1] = ++$aa);
           echo "Le tab 1 est incrémenté de 1";
        }
     
        if ($champ_selectionne == 'Option 3') {
           $tab[2] = $aa;
           fwrite($ouvrir, $tab[2] = ++$aa);
           echo "Le tab 2 est incrémenté de 1";
        }
     
    echo '<pre>';
    print_r($tab);
    echo '</pre>';
    echo "<br>c'est l'$champ_selectionne qui a ete choisie";
     
    fclose($ouvrir);
    ?>
     
    <form method="POST">
        <input type="radio" name="radio" value="Option 1"/>Option 1<br>
        <input type="radio" name="radio" value="Option 2"/>Option 2<br>
        <input type="radio" name="radio" value="Option 3"/>Option 3<br>
        <input type="submit" value="OK">
    </form>
    Je suis pas sûr d'avoir tout compris ce que tu voulais faire... La première ligne du fichier correspond à l'option 1, la deuxième à l'option 2, etc ?
    Dans ce cas, il ne faudrai pas faire
    pour lire la valeur, mais plutôt
    Et ensuite, là tu spécifie pas la ligne dans laquelle tu va écrire le fichier, et donc forcément à chaque fois tu n'écris que la première ligne, de plus w+ comme mode d'ouverture vide le contenu du fichier si ma mémoire est bonne.
    Le plus simple serait de mettre tes données dans un array que tu serialize (voir serialize() et unserialize()),.
    L'intérêt de serializer c'est que ça transforme n'importe quelle variable en texte, donc en fait tu peux écrire sans problèmes ce texte dans un fichier. Ensuite quand tu lis le fichier tu peux régénérer la variable à partir du texte en utilisant unserialize().

    Mais bon le stockage des données dans les fichiers c'est à réserver pour des usages particuliers, il vaut mieux que tu apprennes MySQL, c'est pas très dur ^^

  4. #4
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Bonjour,

    D'abord en ce qui concerne le "w+" j'ai modifié en "r+" car en effet il "réduit la taille du fichier à 0".

    Pour le $aa non déclaré, j'ai lu que "il n'est pas nécessaire d'initialiser les variables en PHP"... Initialiser / déclarer ce n'est pas la même chose ??

    J'ai cherché la façon d'enregistrer dans un fichier ici. Vous parlez de ligne dans le fichier, or quand je l'ouvre j'ai "000" trois zero qui se suivent... C'est vrai que par rapport à l'exemple ci dessus j'ai enlevé les ."\n" qui donnaient autre chose dans le fichier (les 0 étaient séparés par des carrés).

    Citation Envoyé par Rakken
    En gros, tu as l'air de considérer que $tab contient chaque ligne de ton fichier et que si tu fait un fwrite de cette ligne, elle se mets a jours
    Tu m'as bien cerné, c'est bien ce que je pensais...

    Citation Envoyé par Rakken
    tente de mettre toutes les lignes de $tab dans ton tableau et pas seulement $tab[x].
    Comment faire ça ??

    Citation Envoyé par "The Nux
    Le plus simple serait de mettre tes données dans un array
    Je pensais qu'en faisant $tab[0] = ... c'était créer un tableau, d'ailleurs à la fin j'affiche bien le tableau pour test...

  5. #5
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Bonjour,

    Grace à vos remarques j'ai tout repris étape par étape et le résultat fonctionne :

    Mon premier script : un systeme de sondage simplissime.

    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
    <body>
    <?php
     
    $fichier = 'sondage.txt';
    $ouvrir = fopen($fichier, "r+");
    $tab = file($fichier);
     
    if (isset($_POST['radio'])) {
        $ch_sel = $_POST['radio'];
    } else {
        $ch_sel = '';
    }
     
    $oui = $tab[0];
    $non = $tab[1];
    $sop = $tab[2];
     
    if ($ch_sel == 'Option 1') {
       $oui = $oui + 1;
       fwrite($ouvrir, $tab[0] = $oui."\n");
       fwrite($ouvrir, $tab[1] = $tab[1]);
       fwrite($ouvrir, $tab[2] = $tab[2]);
       echo "Le tab 0 est incrémenté de 1";
    }
    if ($ch_sel == 'Option 2') {
       $non = $non + 1;
       fwrite($ouvrir, $tab[0] = $tab[0]);
       fwrite($ouvrir, $tab[1] = $non."\n");
       fwrite($ouvrir, $tab[2] = $tab[2]);
       echo "Le tab 1 est incrémenté de 1";
    }
    if ($ch_sel == 'Option 3') {
       $sop = $sop + 1;
       fwrite($ouvrir, $tab[0] = $tab[0]);
       fwrite($ouvrir, $tab[1] = $tab[1]);
       fwrite($ouvrir, $tab[2] = $sop."\n");
       echo "Le tab 2 est incrémenté de 1";
    }
     
    fclose($ouvrir);
    ?>
     
    <form method="POST">
        <input type="radio" name="radio" value="Option 1"/>Oui<br>
        <input type="radio" name="radio" value="Option 2"/>Non<br>
        <input type="radio" name="radio" value="Option 3"/>Sans Opinion<br>
        <input type="submit" value="OK">
    </form>
    <?php
    echo "Nombre de personnes ayant vité OUI : $oui.<br>Nombre de personnes qui ont voté NON : $non.<br>Nombre de personnes sans opinion : $sop.";
    ?>
    </body>
    Merci

    Maintenant je vais essayer d'améliorer le script : mettre le résultat en graphisme, interdire à une personne de voter plusieurs fois à la suite...

  6. #6
    Membre éclairé Avatar de The Nux
    Profil pro
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Par défaut
    Pour interdire plusieurs votes, tu peux utiliser les cookies (voir la fonction setcookie())
    C'est à dire que quand quelqu'un a voté tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setcookie("aVote", "oui", 300000000);
    Et tu peux verrifier si il a voté comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($_COOKIE["aVote"])) echo "Il a voté !";
    Pour faire un graphique, tu peux utiliser la bibliothèque GD ou une uzine à gaz genre jpgraph, mais le plus simple je pense est d'essayer de faire ça en HTML. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div style="height: 25px; width: 300px; padding: 0; border: 2px solid black; background-color: white;">
    	<div style="height: 100%; width: 62%; margin: 0; background-color: green">&nbsp;</div>
    </div>
    Pour faire une barre de progression. Bien sûr tu changes le width du 2eme div pour changer la taille de la barre.

  7. #7
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Merci de ton aide

    Pour la barre de progression j'ai fait ce soir, voici ce que ça donne :
    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
    <table border="0" style="background-color:#aaaaaa"><tr><td colspan="2">
    Nombre de personnes qui ont voté OUI :
    </td></tr><tr><td width="500">
    <img src="frise02.gif" width="<?php $taille = $oui*10; echo"$taille"; ?>" height="10">
    </td><td width="100" align="right">
    <?php echo $oui; ?> voie<?php if ($oui > 1) echo"s"; ?>
    </td></tr><tr><td colspan="2">
    Nombre de personnes qui ont voté NON :<br>
    </td></tr><tr><td width="500">
    <img src="frise02.gif" width="<?php $taille = $non*10; echo"$taille"; ?>" height="10">
    </td><td width="100" align="right">
    <?php echo $non; ?> voie<?php if ($non > 1) echo"s"; ?>
    </td></tr><tr><td colspan="2">
    Nombre de personnes SANS OPINION :<br>
    </td></tr><tr><td width="500">
    <img src="frise02.gif" width="<?php $taille = $sop*10; echo"$taille"; ?>" height="10">
    </td><td width="100" align="right">
    <?php echo $sop; ?> voie<?php if ($sop > 1) echo"s"; ?>
    </td></tr><tr><td colspan="2" align="center">
    <hr>
    TOTAL :<br>
    </td></tr><tr><td width="500">
    <img src="frise02.gif" width="<?php $taille = $total*10; echo"$taille"; ?>" height="10">
    </td><td width="100" align="right">
    <?php echo $total; ?> voie<?php if ($total > 1) echo"s"; ?>
    </td></tr><tr><td height="50" valign="bottom" colspan="2">
    <span style="font-size:0.6em"><a href="administration.php">Fonctions Administrateur</a> <a href="administration2.php">2</a></span>
    </td></tr></table>
    C'est pas du code html très propre mais ce n'est qu'un essai.

    J'ai aussi fait une page "administration" il faut le dire "ultra simple" ! permettant de remettre les compteurs à 0. j'ai aussi essayé de mettre une page permettant de mettre des chiffres soi même, mais sans succès pour le moment.

    L'idée du cookie je l'avais eu, je verrais ça demain. J'avais pensé à récupérer l'adresse IP mais ton idée semble plus simple et pratique...

    Merci encore.

  8. #8
    Membre éclairé Avatar de The Nux
    Profil pro
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Par défaut
    Tu peux pas récupérer l'addresse IP, par ce que déjà c'est faire le postulat que les IPs sont fixes, ce qui n'est pas toujours le cas et que en plus il n'y a qu'un seul ordinateur derrière chaque IP alors que généralement il y a plusieurs ordinateurs derrière un routeur.
    Les cookies c'est pas fiable un max non plus vu que l'utilisateur peut les effacer si il veut, mais c'est déjà ça. Le seul moyen fiable de savoir si quelqu'un a voté ou pas c'est quand tu as des membres qui s'authentifient avec un login et un mot de passe, comme ça tu peux mettre dans une base de données (ou un fichier) que tel membre a voté (pas forcément ce qu'il a voté, mais juste savoir qu'il a voté comme ça on peut l'emêcher de voter une seconde fois)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enregistrer contenu formulaire dans un fichier texte
    Par arthur57 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/10/2014, 19h20
  2. Enregistrer des données entrées par des formulaires dans un fichier XML
    Par amina.hamerelain dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 17/06/2014, 19h48
  3. Réponses: 1
    Dernier message: 23/09/2010, 00h25
  4. Réponses: 2
    Dernier message: 19/05/2008, 11h31
  5. Réponses: 10
    Dernier message: 16/12/2004, 16h23

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