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 :

Manipulation de fichier csv.


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut Manipulation de fichier csv.
    Bonjour à tous,

    J'apprends le PHP, et j'aimerais réussir à créer une "TODOlist", donc une liste dans laquelle des tâches seraient notées. Pour ça on aurait un formulaire qu'on remplirait, puis on pourrait ajouter une tâche, en supprimer une, mais surtout en modifier une.

    Pour cela, j'utilise un .csv dans lequel seront stockées les informations. La partie formulaire, ajouter une tâche et en supprimer une, c'est bon.

    Pour la modification par contre, c'est un calvaire.

    Jusqu'ici mon code ressemble à ça :

    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
     
    <?php
     
    if (!(array_key_exists("modify",$_GET))) {
    echo '<form method="post" action="index.php">
        <fieldset>
            <legend>ToDoList</legend>
            <input type="text" name="title" placeholder="Title" required/><br/>
            <input type="text" name="description" placeholder="Description" required/><br/>
            <input type="text" name="date" placeholder="Date" required/><br/>
            <input type="text" name="priority" placeholder="Priority" required/><br/>
            <input type="submit" name="submit" value="Add" required/><br/>
        </fieldset>
    </form>';
     
    /* WRITE */
     
    if (array_key_exists("submit", $_POST)) {
        $aCsvOpenToWrite = fopen('test.csv', 'a');
     
        $title = NULL;
        $description = NULL;
        $date = NULL;
        $priority = NULL;
     
        if (array_key_exists("title", $_POST)) {
            $title = $_POST["title"];
        }
     
        if (array_key_exists("description", $_POST)) {
            $description = $_POST["description"];
        }
     
        if (array_key_exists("date", $_POST)) {
            $date = $_POST["date"];
        }
     
        if (array_key_exists("priority", $_POST)) {
            $priority = $_POST["priority"];
        }
     
        $aEnteredFields = array($title, $description, $date, $priority);
     
        fputcsv($aCsvOpenToWrite, $aEnteredFields, ";");
     
        fclose($aCsvOpenToWrite);
    }
     
    /* DELETE */
     
    if (array_key_exists("delete", $_POST)) {
     
        $aCsvOpenToRead = fopen('test.csv', 'r');
        $aDatas = array();
        $aSave = array();
        $iLine = 0;
        $iCountCheckbox = 0;
     
        while (($aDatas = fgetcsv($aCsvOpenToRead, 4096, ";")) !== false) {
     
            $aSave[$iLine] = $aDatas;
            $iLine++;
        }
        fclose($aCsvOpenToRead);
     
        $aCsvOpenToWrite = fopen('test.csv', 'w');
     
        while ($iCountCheckbox < count($aSave)) {
            if (array_key_exists($iCountCheckbox, $_POST)) {
                $iCountCheckbox++;
            } else {
                fputcsv($aCsvOpenToWrite, $aSave[$iCountCheckbox], ";");
                $iCountCheckbox++;
            }
        }
        fclose($aCsvOpenToWrite);
    }
     
     
    /* DISPLAY */
     
    $aCsvOpenToRead = fopen('test.csv', 'r');
    $aDatas = array();
    $iCountLine = 0;
     
    echo "<form method='post' action='index.php'><table>";
    while (($aDatas = fgetcsv($aCsvOpenToRead, 4096, ";")) !== false) {
        echo "<tr>";
        foreach ($aDatas as $line) {
            echo "<td>" . $line . "</td>";
        }
        echo "<td><input type = 'checkbox' name = '" . $iCountLine . "'/></td></tr>";
        $iCountLine++;
    }
    echo "</table><input type='submit' name='delete' value='Delete'/></form><form method='get' action=''><input type='submit' name='modify' value='Modify'/></form>";
    fclose($aCsvOpenToRead);
     
            /* MODIFY */
     
    } else if (array_key_exists("modify", $_GET)) {
     
        $aCsvOpenToRead = fopen('test.csv', 'r');
        $aDatas = array();
        $iCountLine = 0;
     
        echo "<form method='post' action='index.php'><table>";
        while (($aDatas = fgetcsv($aCsvOpenToRead, 4096, ";")) !== false) {
            echo "<tr>";
            foreach ($aDatas as $line) {
                echo "<td>" . $line . "</td>";
            }
            echo "<td><input type = 'checkbox' name = '" . $iCountLine . "'/></td></tr>";
            $iCountLine++;
        }
        echo "</table><input type='submit' name='delete' value='Delete'/></form><form method='get' action=''><input type='submit' name='modify' value='Modify'/></form>";
        fclose($aCsvOpenToRead);
     
        $aCsvOpenToRead = fopen('test.csv', 'r');
        $aSave = array();
        $iLine = 0;
     
        while (($aDatas = fgetcsv($aCsvOpenToRead, 4096, ';')) !== false) {
            $aSave[$iLine] = $aDatas;
            $iLine++;
        }
        fclose($aCsvOpenToRead);
     
        $aCsvOpenToRead = fopen('test.csv', 'r');
        $aDatas = array();
        $iCountLine = 0;
     
        $aCsvOpenToWrite = fopen('test.csv', 'w');
     
        while ($iCountLine < count($aSave)) {
            if (array_key_exists($iCountLine, $_POST)) {
                echo '<form method="post" action="index.php">
        <fieldset>
            <legend>ToDoListModifier</legend>
            <input type="text" name="title" placeholder="Title" value="'.$aSave[$iCountLine][$iCountLine].'" required/><br/>
            <input type="text" name="description" placeholder="Description" value="'.$aSave[$iCountLine][$iCountLine+1].'" required/><br/>
            <input type="text" name="date" placeholder="Date" value="'.$aSave[$iCountLine][$iCountLine+2].'" required/><br/>
            <input type="text" name="priority" placeholder="Priority" value="'.$aSave[$iCountLine][$iCountLine+3].'" required/><br/>
            <input type="submit" name="submit" value="Confirm Modification" required/><br/>
        </fieldset>
    </form>';
            } else {
                fputcsv($aCsvOpenToWrite, $aSave[$iCountLine], ";");
            }
        }
        fclose($aCsvOpenToWrite);
     
    }
    ?>
    Dans l'idée, j'ai voulu créer le formulaire en php pour qu'il soit "normal" lorsque GET ne reçoit pas la clé "modify" qui pourra être submit ou non. Donc le script s'effectue normalement et fonctionne à ce moment là.

    S'il la reçoit par contre, j'aimerais que les values de la ligne cochée remplacent les values de chaque input du formulaire. Puis qu'on puisse les modifier, cliquer sur modifier, et que tout soit sauvegardé. Pour ça je comptais faire comme avec la fonction delete que j'ai faite, à savoir sauvegarder le fichier dans un tableau temporaire puis le ré-écrire en changeant cette fois (au lieu de l'ignorer) la checkbox qui aura été coché avec les nouvelles values insérées dans le formulaire.

    Seulement je tombe sur une boucle infinie et je me retrouve avec un .csv à 400mo sans savoir pourquoi.

    Comment faire ?

  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
    Par défaut
    Ton $iCountLine ne change pas, donc ta boucle while est infinie.

    Au passage, utilise isset() au lieu de array_key_exists(), ce sera plus lisible.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut
    Merci beaucoup, erreur stupide que je fais trop souvent.

    J'utilise array_key_exists par habitude maintenant, puisque mon prof m'a conseillé de le faire, à cause des résultats inattendus que peut renvoyer isset.

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Alors c'est résolu ? Au passage pourquoi ne pas utiliser une bdd ? c'est beaucoup plus pratique ensuite pour faire des recherches.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut
    Oui c'est totalement résolu

    J'en suis pas encore à utiliser mySQL et vu qu'on en est encore à la manipulation des tableaux en général, on a appris comment se servir d'un .csv et comment le manipuler, c'était ça l exercice !

    Je pourrai poster mon code final si ça en intéresse certains.

  6. #6
    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
    Par défaut
    à cause des résultats inattendus que peut renvoyer isset
    isset() ne renvoit pas de résultats inattendus.
    La seule différence c'est dans la prise en compte du NULL mais dans le cas de POST et GET, il n'y a pas de NULL.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. manipulation de fichier csv et txt en même temps, heelpe
    Par leila32 dans le forum Général Python
    Réponses: 3
    Dernier message: 10/04/2013, 14h04
  2. Manipulation fichier CSV
    Par Dark_fun dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 09/11/2011, 16h14
  3. Manipulation de fichier csv
    Par midgard30 dans le forum Général VBA
    Réponses: 2
    Dernier message: 12/08/2008, 06h35
  4. [CSV] Comment manipuler un fichier csv ?
    Par gorgoroth dans le forum Langage
    Réponses: 5
    Dernier message: 20/03/2008, 22h35

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