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 :

Lecture et écriture fichier csv à partir d'un formulaire


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Points : 43
    Points
    43
    Par défaut Lecture et écriture fichier csv à partir d'un formulaire
    Bonjour,

    J'ai un formulaire qui lit un fichier csv:

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?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

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu fais un editeur de CSV en gros c'est bien ça ?

    Pour le formulaire reprenant ton csv, il faut que tu stockes le numéro de la ligne dans ton champ, sinon tu ne pourras le reconstituer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $l = 0;
    while($csv_line = fgetcsv($fp,1024)) {
        foreach ($csv_line as $line) {
            echo '<input name="txt_form" type="text" value="'.$csv_line[$l][$i].'" style="width:300px"/><br>';
        $l++;
        }
    }
    Pour la reconstitution, c'est la même chose à l'envers : il faut parcourir le tableau $_POST['txt_form'] (et non pas $_POST['text']) avec des boucles imbriquées par avoir les lignes et les colonnes.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    J'ai remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    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>';
        }
    }
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $l = 0;
    while($csv_line = fgetcsv($fp,1024)) {
        foreach ($csv_line as $line) {
            echo '<input name="txt_form" type="text" value="'.$csv_line[$l][$i].'" style="width:300px"/><br>';
        $l++;
        }
    }
    Sauf qu'au lieu d'avoir des input pour chaque champs, je n'ai plus que la première ligne.

    Merci

  4. #4
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    ouille j'étais pas frais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $l = 0;
    while($csv_line = fgetcsv($fp,1024,";")) {
        foreach ($csv_line as $c=>$value) {
            echo '<input name="txt_form['.$l.']['.$c.']" type="text" value="' . $value .'" style="width:300px"/><br>';
        $l++;
        }
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/01/2008, 12h14
  2. pb de lecture dans un fichier CSV
    Par MayOL69bg dans le forum C#
    Réponses: 3
    Dernier message: 23/05/2007, 14h21
  3. Linges sautées dans "lecture" d'un fichier .csv
    Par Mymi dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/08/2006, 20h02
  4. Fichier CSV à partir un programme C
    Par Premium dans le forum C
    Réponses: 3
    Dernier message: 25/05/2006, 23h53
  5. Ecrire un fichiers CSV à partir de 3 fichiers Excel
    Par yas2006 dans le forum Documents
    Réponses: 22
    Dernier message: 14/03/2006, 14h10

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