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 :
<?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 ?