Lecture et écriture fichier csv

Petit nouveau ! | 6 Messages

15 août 2013, 22:15

Bonjour,

J'ai un formulaire qui lit un fichier csv:
<?php
$fp = fopen('ventes.csv','r+') or die("can't open file");?>
<form action="store.php" method="post">
<?php
while($csv_line = fgetcsv($fp,1024)) {
    for ($i = 0, $j = count($csv_line); $i < $j; $i++) {
        print '<input name="txt_form" type="text" value="'.$csv_line[$i].'" style="width:300px"/><br>';
    }
}
print '<input name="Soumettre" type="submit" />
</form></form>';
$myArray =array (utf8_decode($_POST['text']));
fputcsv($fp, $myArray, ";");
fclose($fp) or die("can't close file");
?>
J'aimerais que le formulaire afficher un champ texte après chaque virgule tout en gardant un retour à la ligne.

J'ai aussi une fonction (fichier store.php) me permettant de sauver dans le même fichier csv mais ça ne marche pas, le fichier se vide.
<?php
$name = $_POST['txt_form'];
$fp = fopen("ventes-2.csv", "a");
$savestring = $name . ";" ;
fwrite($fp, $savestring);
fclose($fp);
echo "<h1>You data has been saved in a text file!</h1>";
?>
Pouvez vous m'aider?

Merci
Modifié en dernier par moogli le 15 août 2013, 22:49, modifié 1 fois.
Raison : Bbcode php plutôt que code

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 août 2013, 10:08

Salut,

Pour le formulaire, tu utilise toujours le même nom de champs de formulaire pour toutes les données. Donc une seule donnée sera disponible (la dernière).

Donc au final ton fichiers ne contiendra qu'un seul champ.

Il te faut nommer les inputs avec la notation tableau, par exemple text[], ce qui te fera un tableau dans $_POST['text'].
Dans ce cas tu gère les lignes du fichier.
Pour les colonnes ajoute une dimension au tableau.

Input name="text[index][]"


Pour ce qui est du reste du code j'utiliserais file pour récupérer le contenu et un foreach pour traiter le tableau fournit par file (tu peux utiliser str_getcsv pour avoir un tableau image d'une ligne csv).

L'affichage comme tu le fait (mais avec le nom du champ input avec la notation tableau, utilise l'index du tableau pour indexer les lignes).

Pour la validation du formulaires un foreach sur $_POST['text'] et un implode pour former la ligne csv.

@+
Il en faut peu pour être heureux ......