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 ?