PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 20-08-2010 18:21:28

phpdos
Membre
Inscription : 22-12-2009
Messages : 72

enregistrement dans mySql et csv sous Excel

Bonjour,

Par mon formulaire en PHP, les données sont enregistrées dans MySql et dans un fichier csv.
J’ai des problèmes avec mon fichier csv sous Excel…
Je vous pose 2 questions
1- lorsque l'utilisateur écrit  le point-virgule [;] dans un champ de texte (input type="text") au niveau du fichier csv, il y a un problème : à cause de ce point-virgule, il y a une colonne supplémentaire dans mon fichier sous Excel : puisqu’il y a les séparateurs [;] dans un fichier csv.
Comment je peux remédier ce problème ? (dans mysql,  tout est correct) :?:

Voici mon code pour la création du fichier

fputs($ouvrir_FD, utf8_decode($var_ville).';'.utf8_decode($var_nom).';'."\n");

2- Si j'utilise la zone de texte [textarea] avec 5 lignes que l'utilisateur passe à la ligne en appuyant sur la touche "Entrée", dans mon fichier csv sous Excel, le 2e paragraphe est en 2e ligne au lieu de rester dans la même ligne. Pourtant dans mon MySql, tout est correct : sur la même ligne (enregistrement) 
Comment je peux remédier ce problème (dans mysql  tout est correct) :?:

Bon week-end


Brave autiste
Cl... clown
Cl ? Cl ? Est-ce que j'ai une gueule de clowns ?
                  @*|*@

Hors ligne

#2 20-08-2010 18:53:07

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : enregistrement dans mySql et csv sous Excel

salut,

pour ce qui est du problème du ; il n'y a malheureusement pas d'équivalent html (simplement parce qu'il est utilisé dedans, comme dans le &).
tu peut le remplacer par autre chose, un point ou une virgule, même si je sais que cela ne signifie pas la même chose en français.


Pour le p'tit 2, faut savoir que mysql et excel c'est pas pareil (si si) wink

lorsque tu dit : dans mon mysql tous est sur la même ligne, tu parle de ce que tu vois quand tu regarde le contenu avec phpmyadmin (ou équivalent) ou que tu l'affiche sur une page web ? si c'est le c'est normal, essai la fonction nl2br et tu verra une différence. Ceci est du au fait que html n'interprete pas seul les retour chariot (\r\n). si tu fait un select * sur ta table a partir du shell mysql tu verra les retour chariot.

si tu veut les supprimers, utiliser preg_replace et cherche les \r\n

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#3 20-08-2010 19:10:52

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : enregistrement dans mySql et csv sous Excel

dans le format csv, les chaines doivent être entre cotes de porc wink


"lkkljkl",10.5;"une chaine avec un ; et plus";100

a++

Hors ligne

#4 24-08-2010 15:02:52

phpdos
Membre
Inscription : 22-12-2009
Messages : 72

Re : enregistrement dans mySql et csv sous Excel

Bonjour,
Merci pour vos aides…
J’ai réglé mon problème avec la fonction preg_remplace comme vous voyez ci-dessous…
Du coup, j’ai trois questions :

1- Comment je peux optimiser mon code qui se trouve dans la partie de fonction preg_replace ?

      // fonction  preg_replace
      // replacer [;] par [.,]
      // remplacer [\r\n] par [--->]
      //[\r\n] dans excel, c'est la ligne suivant
          $var_ville =  preg_replace( "/;/", ".,", $var_ville );
          $var_ville =  preg_replace( "/\r\n/", "--->", $var_ville );
         
          $var_nom =   preg_replace( "/;/", ".,", $var_nom );
          $var_nom =   preg_replace( "/\r\n/", "--->", $var_nom );
         
          $var_prenom =   preg_replace( "/;/", ".,", $var_prenom );
          $var_prenom =   preg_replace( "/\r\n/", "--->", $var_prenom );
         
          $var_pays =   preg_replace( "/;/", ".,", $var_pays );
          $var_pays =   preg_replace( "/\r\n/", "--->", $var_pays );
         
         
      //ecriture fichier csv
      fputs($ouvrir_FD, utf8_decode($var_ville).';'.utf8_decode($var_nom).';'.utf8_decode($var_prenom).';'.utf8_decode($var_pays).';'."\n");

2- est-ce qu’il y a un script php ou  javascript qui empêche d’écrire ou transformer les minuscules en majuscule dans un champ de texte ( input / textbox)
3- est ce qu’il y a un script php ou  javascript qui transforme les accents dans un champ de texte ( input / textbox)

Bonne journée


Brave autiste
Cl... clown
Cl ? Cl ? Est-ce que j'ai une gueule de clowns ?
                  @*|*@

Hors ligne

#5 24-08-2010 17:05:31

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : enregistrement dans mySql et csv sous Excel

salut,

utilise des tableaux pour preg_replace (voir exemple 2 de la doc http://php.net/preg_replace)

2 et 3 oublie JS c'est pas fiable !
2/ soit tout soit rien en majuscule : strtoupper / strtolower
3/ preg_replace avec des tableaux

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#6 27-08-2010 14:19:21

phpdos
Membre
Inscription : 22-12-2009
Messages : 72

Re : enregistrement dans mySql et csv sous Excel

Bonjour Moogli,

Comme tu m'as dit, j'ai fait un table...

 $tb_tableau_nettoyage = array();
            $tb_tableau_nettoyage[0] = '/;/';
            $tb_tableau_nettoyage[1] = '/\r\n/';

            $tb_tableau_replacer = array();
            $tb_tableau_replacer[0] = '.,';
            $tb_tableau_replacer[1] = '--->';

    $var_ville = preg_replace($tb_tableau_nettoyage, $tb_tableau_replacer, $var_ville);
        $var_nom = preg_replace($tb_tableau_nettoyage, $tb_tableau_replacer, $var_nom);
            $var_prenom = preg_replace($tb_tableau_nettoyage, $tb_tableau_replacer, $var_prenom);
                $var_pays = preg_replace($tb_tableau_nettoyage, $tb_tableau_replacer, $var_pays);
               
               
             //ecriture fichier csv
         fputs($ouvrir_FD, utf8_decode($var_ville).';'.utf8_decode($var_nom).';'.utf8_decode($var_prenom).';'.utf8_decode($var_pays).';'."\n");

Ca marche mais il y a toujours trop de répétitions...
Alors j'aimerais bien l'optimiser... J'ai fait une fonction :



function nettoyage($chaine) {
 
                    $var_fonction_nettoyage ="";
                     
                        if (isset($_POST[$var_fonction_nettoyage])) {
                     
                                {
                                $tb_tableau_nettoyage = array();
                                $tb_tableau_nettoyage[0] = '/;/';
                                $tb_tableau_nettoyage[1] = '/\r\n/';
                               
                                $tb_tableau_replacer = array();
                                $tb_tableau_replacer[0] = '.,';
                                $tb_tableau_replacer[1] = '--->';
                     
                                        $var_fonction_nettoyage = preg_replace($tb_tableau_nettoyage, $tb_tableau_replacer, $_POST[$var_fonction_nettoyage]);
                                         
                                            $var_fonction_nettoyage = utf8_decode($var_fonction_nettoyage);
                     
                               }
                     
                          return $var_fonction_nettoyage;
                                                                    }
 
                                            }
fputs($ouvrir_FD, utf8_decode($var_date).';'.nettoyage($var_votre_nom).';'.nettoyage($var_nom_enfant).';'.nettoyage($var_adresse).';'.nettoyage($var_ville).';'.utf8_decode($var_province).';'.utf8_decode($var_code_postal).';'."\n");

Mais je n’arrive pas… Dans les fichiers CSV; les colonnes (ceux que j’ai appliqué la fonction « nettoyage ») sont vides, sans valeur…
Alors à votre avis, comment je peux alléger mon code? ? Je vais surtout faire cela pour apprendre pas pour la vitesse.

Merci:)


Brave autiste
Cl... clown
Cl ? Cl ? Est-ce que j'ai une gueule de clowns ?
                  @*|*@

Hors ligne

#7 27-08-2010 15:10:48

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : enregistrement dans mySql et csv sous Excel

salut,

tu a deux { au premier if, ça doit te fournir une erreur !
qui plus ai tu a fait un mélange un peu douteur, avec tes $_POST[xxx] au lieu d'utiliser $chaine ....

comme ça, c'est mieux (à tester)

<?php
function nettoyage($chaine) {
  // déclaration des tableaux pour les remplacements
  $tb_tableau_nettoyage = array($tb_tableau_nettoyage => '/;/', $tb_tableau_nettoyage => '/\r\n/');
  $tb_tableau_replacer = array($tb_tableau_replacer => '.,',$tb_tableau_replacer => '--->');
  // nettoyage de la chaine
  $var_fonction_nettoyage = preg_replace($tb_tableau_nettoyage, $tb_tableau_replacer, $_POST[$var_fonction_nettoyage]);
  // renvoi de la chaine "nettoyée"
  return $var_fonction_nettoyage;
  }

}
fputs($ouvrir_FD, utf8_decode($var_date).';'.nettoyage($var_votre_nom).';'.nettoyage($var_nom_enfant).';'.nettoyage($var_adresse).';'.nettoyage($var_ville).';'.utf8_decode($var_province).';'.utf8_decode($var_code_postal).';'."\n");
?>

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#8 30-08-2010 15:29:03

phpdos
Membre
Inscription : 22-12-2009
Messages : 72

Re : enregistrement dans mySql et csv sous Excel

Bonjour moogli  ^_^

Merci pour vos aides... selon les aides et les explications, mes codes marchent...
j'ai deux solutions


la 1ère c'est mon code que j'ai bidouillé pour qu'il marche...

  function nettoyage($chaine) {
 
          $var_fonction_nettoyage =$chaine;
                       
                {
           //remplacement [:] par [.,] pour qu'il n'y a pas de creation des collones sup dans excel
           //remplacement [rn] (lorsqu'utilisateur appuie sur la touche "Entrée") par [--->] pour qu'il n'y a pas de création des colonnes sup dans Excel
            $tb_tableau_nettoyage = array('/;/','/\r\n/');
              $tb_tableau_replacer = array('.,','--->');

            //application utf8_decode — Convertit une chaîne UTF-8 en ISO-8859-1
            //des remplacements  complexe on utilise preg_replace mais on pourrais aussi utiliser str_replace pusique c'est plus basiques (voir la 2e solution)
            return utf8_decode(preg_replace($tb_tableau_nettoyage, $tb_tableau_replacer, $chaine));
           
                 }
                      }  
 
    //ecriture du fichier
    //fputs qui ne permet pas de formater du texte au format csv puisque c'est pour n'importe quel fichier pour Excel on utilise fputcsv qui permet de formater du texte au format csv
    fputs($ouvrir_FD, utf8_decode($var_date).';'.nettoyage($var_votre_nom).';'.nettoyage($var_nom_enfant).';'.nettoyage($var_adresse).';'.nettoyage($var_ville).';'.utf8_decode($var_province).';'.utf8_decode($var_code_postal).';'."\n");

    //Enfin fermer le fichier
    fclose($ouvrir_FD);

et la 2e c'est la meilleur solution :

<? php

          //remplacement [rn] (lorsqu'utilisateur appuie sur la touche "Entrée") par [--->] pour qu'il n'y a pas de création des colonnes sup dans Excel
          function replace_rn_saut($el)
          {
            //callback --> La fonction de rappel à exécuter pour chaque élément de chaque tableau.
                //str_replace() retourne une chaîne ou un tableau, dont toutes les occurrences de search dans subject ont été remplacées par replace.
                //des remplacements basiques on n'utilise  str_replace au lieu de preg_replace qui est plus complexe.
          return (str_replace("\r\n",' ',$el));
          }
         
         
         
            // array --> Liste des tableaux à exécuter via la fonction de callback .
            //http://php.net/manual/fr/function.array-map.php
          $tab_excel = array();
         
          $tab_excel[] = $var_date;
          $tab_excel[] = $var_votre_nom;
          $tab_excel[] = $var_nom_enfant;
          $tab_excel[] = $var_adresse;
          $tab_excel[] = $var_ville;
          $tab_excel[] = $var_province;
          $tab_excel[] = $var_code_postal;
           
        //fonction array_map ----> Applique une fonction sur les éléments d'un tableau
        //retourne un tableau après leur avoir appliqué la fonction callback
           //utf8_decode — Convertit une chaîne UTF-8 en ISO-8859-1
          $tab_excel = array_map('utf8_decode',$tab_excel);
          //apliquer la fonction replace_rn_saut
          $tab_excel = array_map('replace_rn_saut',$tab_excel);
           

           
             
         

          //Ecriture le fichier
          //fputcsv qui permet de formater du texte au format csv
          fputcsv($ouvrir_FD, $tab_excel, ';');
         
          //Enfin fermer le fichier
                  fclose($ouvrir_FD);
         
?>

merci encore et bonne journée


Brave autiste
Cl... clown
Cl ? Cl ? Est-ce que j'ai une gueule de clowns ?
                  @*|*@

Hors ligne

#9 31-08-2010 06:00:07

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : enregistrement dans mySql et csv sous Excel

de rien smile


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

Pied de page des forums