Lecture et écriture fichier csv

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Lecture et écriture fichier csv

Re: Lecture et écriture fichier csv

par moogli » 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.

@+

Lecture et écriture fichier csv

par eiffel74 » 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